diff --git a/GF/.project b/GF/.project new file mode 100644 index 0000000000000000000000000000000000000000..8c2105af53a8455719de39837690a14395822951 --- /dev/null +++ b/GF/.project @@ -0,0 +1,48 @@ + + + gestioneferie-be + + + gestioneferie + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + + + + 1644425858164 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858176 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425858190 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/.settings/org.eclipse.jdt.core.prefs b/GF/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..a274c0a1cdff77d8585abd6b9ca738e76e9bcc43 --- /dev/null +++ b/GF/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,359 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/GF/.settings/org.eclipse.m2e.core.prefs b/GF/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/.voilaProject b/GF/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-libs/.classpath b/GF/gestioneferie-libs/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..f4b9d225a71f1a4967c086295a321f1d12876a2d --- /dev/null +++ b/GF/gestioneferie-libs/.classpath @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-libs/.mvn/wrapper/MavenWrapperDownloader.java b/GF/gestioneferie-libs/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000000000000000000000000000000000..e76d1f3241d38db9b28f05133823bbed1ad289ff --- /dev/null +++ b/GF/gestioneferie-libs/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/GF/gestioneferie-libs/.mvn/wrapper/maven-wrapper.jar b/GF/gestioneferie-libs/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 Binary files /dev/null and b/GF/gestioneferie-libs/.mvn/wrapper/maven-wrapper.jar differ diff --git a/GF/gestioneferie-libs/.mvn/wrapper/maven-wrapper.properties b/GF/gestioneferie-libs/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..642d572ce90e5085986bdd9c9204b9404f028084 --- /dev/null +++ b/GF/gestioneferie-libs/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/GF/gestioneferie-libs/.project b/GF/gestioneferie-libs/.project new file mode 100644 index 0000000000000000000000000000000000000000..21be2a6784c092f4e7288a641768e49db3814e0e --- /dev/null +++ b/GF/gestioneferie-libs/.project @@ -0,0 +1,47 @@ + + + gestioneferie-libs + + + gestioneferie + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + + + + 1644425858200 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858204 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425858214 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/gestioneferie-libs/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-libs/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c --- /dev/null +++ b/GF/gestioneferie-libs/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/GF/gestioneferie-libs/.settings/org.eclipse.jdt.core.prefs b/GF/gestioneferie-libs/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..3a0745fdb7daeb13fc56e5b4ad9c25d4485ac2aa --- /dev/null +++ b/GF/gestioneferie-libs/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,16 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/GF/gestioneferie-libs/.settings/org.eclipse.m2e.core.prefs b/GF/gestioneferie-libs/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/gestioneferie-libs/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/gestioneferie-libs/.voilaProject b/GF/gestioneferie-libs/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/.classpath b/GF/gestioneferie-libs/gestioneferie-libs-core/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..2929c33c90c6bd547494d8ebb68054276518ce98 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/.classpath @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/.project b/GF/gestioneferie-libs/gestioneferie-libs-core/.project new file mode 100644 index 0000000000000000000000000000000000000000..1179433c2a1f14479a1f4356ef600876f2d49cc1 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/.project @@ -0,0 +1,54 @@ + + + gestioneferie-libs-core + + + gestioneferie + gestioneferie-libs + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1644425858226 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858231 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425858242 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..abdea9ac032d4655898933f93050f48bf9581d14 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.jdt.core.prefs b/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..2af1e7b99c98d3fc61561c085022741062a7820e --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.m2e.core.prefs b/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/.voilaProject b/GF/gestioneferie-libs/gestioneferie-libs-core/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/pom.xml b/GF/gestioneferie-libs/gestioneferie-libs-core/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..374f6f7177fb304023770b3360e81016b026f4a7 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/pom.xml @@ -0,0 +1,48 @@ + + + + 4.0.0 + + gestioneferie-libs-core + gestioneferie-libs-core + Voila 2 Sample Project rel. 0.0.1 + jar + + + it.micegroup + gestioneferie-libs + 0.0.1-SNAPSHOT + ../pom.xml + + + + + it.micegroup + voila2runtime-core + ${voila2.runtime.version} + + + io.springfox + springfox-swagger2 + + + + + it.micegroup + voila2runtime-mail-core + ${voila2.runtime.version} + + + it.micegroup + voila2runtime-bi-core + ${voila2.runtime.version} + + + org.springframework.boot + spring-boot-starter-hateoas + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/entity/BaseEntity.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/entity/BaseEntity.java new file mode 100644 index 0000000000000000000000000000000000000000..13754a955f2bcc1d8c1a1ae0e32e6926b6669be7 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/entity/BaseEntity.java @@ -0,0 +1,19 @@ +package it.micegroup.gestioneferie.libs.entity; + +import it.micegroup.voila2runtime.entity.GenericEntity; +import it.micegroup.gestioneferie.libs.utilities.Constants; + + +/** + * Generic class for entities + * + */ +public abstract class BaseEntity extends GenericEntity { + + public abstract String getObjectKey(); + public abstract void setObjectKey(String id); + + protected String getRowIdFieldDelimiter() { + return Constants.ROWIDFIELDDELIMITER; + } +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/exception/BaseExceptionHandler.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/exception/BaseExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..39b5f65005d9248679927bbc43f3567339a52c88 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/exception/BaseExceptionHandler.java @@ -0,0 +1,91 @@ +package it.micegroup.gestioneferie.libs.exception; + +import it.micegroup.gestioneferie.libs.response.BaseResponse; +import it.micegroup.gestioneferie.libs.utilities.MessageSourceSettings; +import it.micegroup.gestioneferie.libs.utilities.MessageUtil; + +import it.micegroup.voila2runtime.exception.*; +import it.micegroup.voila2runtime.response.Messages; +import it.micegroup.voila2runtime.response.Message.MessageLevelType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +import java.util.ArrayList; + + +public abstract class BaseExceptionHandler extends ResponseEntityExceptionHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(BaseExceptionHandler.class); + + @Autowired + private MessageSource messageSource; + + @ExceptionHandler({NotFoundException.class}) + public ResponseEntity> exceptionHandler(RuntimeException exception, WebRequest request) { + return notFoundExceptionHandler((NotFoundException) exception, request); + } + + @ExceptionHandler({BusinessException.class}) + public ResponseEntity businessExceptionHandler(BusinessException exception, WebRequest request) { + logException(exception); + ErrorDetails errorDetails = new ErrorDetails(exception, request); + return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND); + } + + protected ResponseEntity> notFoundExceptionHandler(NotFoundException exception, WebRequest request) { + exception.setMessage( messageSource.getMessage("not.found", new Object[] {exception.getClassType().getSimpleName()}, exception.getLocale())); + //ErrorDetails errorDetails = ; + + BaseResponse baseError = new BaseResponse<>(); + baseError.setErrorDetails(new ErrorDetails(exception, request)); + + Messages msgs = new Messages(); + msgs.addMessage(MessageLevelType.ERROR, exception.getMessage()); + + baseError.setMessages(msgs); + return new ResponseEntity>(baseError, HttpStatus.NOT_FOUND); + } + + @Override + protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + MessageUtil.setMessageSource(messageSource); + MessageUtil.setMessages(new ArrayList<>()); + ErrorDetails errorDetails = new ErrorDetails(ex, request); + for (ObjectError oe : ex.getAllErrors()) { + MessageUtil.addErrorMessage(oe.getCode(), oe.getArguments()); + } +// errorDetails.getMessages().addAll(MessageUtil.getMessages()); + return new ResponseEntity<>(errorDetails, HttpStatus.BAD_REQUEST); + } + + @Override + protected ResponseEntity handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + logException(ex); + ErrorDetails errorDetails = new ErrorDetails(ex, request); + return new ResponseEntity<>(errorDetails, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity globalExceptionHandler(Exception ex, WebRequest request) { + logException(ex); + ErrorDetails errorDetails = new ErrorDetails(ex, request); + return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR); + } + + protected void logException(Exception e) { + LOGGER.error("Generic error", e); + } + + +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/repository/BaseRepository.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/repository/BaseRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..17b832db07ecac82e9b4e94199cf80a24174a2ba --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/repository/BaseRepository.java @@ -0,0 +1,12 @@ +package it.micegroup.gestioneferie.libs.repository; + + +import it.micegroup.voila2runtime.repository.GenericRepository; +import org.springframework.data.repository.NoRepositoryBean; +/** + * Generic class for repository + * + */ +@NoRepositoryBean +public interface BaseRepository extends GenericRepository { +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/request/BaseRequest.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/request/BaseRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..adc16d1d7fabf5ca692b08924ee83e0d94dc9822 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/request/BaseRequest.java @@ -0,0 +1,44 @@ +package it.micegroup.gestioneferie.libs.request; + +import java.io.Serializable; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +@JsonSerialize +@JsonInclude(value = Include.NON_NULL) +public class BaseRequest implements Serializable { + + private static final long serialVersionUID = -2194408736186342022L; + + @JsonIgnore + private String requestId; + + @JsonProperty(required = true) + private T data; + + public BaseRequest() { + super(); +// String requestId = UserHolder.getCurrentUser().getUserId() + String.valueOf(System.currentTimeMillis()); +// this.setRequestId(requestId); + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getRequestId() { + return requestId; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/response/BaseResponse.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/response/BaseResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..f43ddda3143d251fe72f1f0427d678cf78c43b74 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/response/BaseResponse.java @@ -0,0 +1,37 @@ +package it.micegroup.gestioneferie.libs.response; + +import java.io.Serializable; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.hateoas.RepresentationModel; +import it.micegroup.voila2runtime.exception.ErrorDetails; +import it.micegroup.voila2runtime.response.Messages; +import lombok.Data; + +@Data +public class BaseResponse extends RepresentationModel> implements Serializable { + private Messages messages = new Messages(); + private T response; + private ErrorDetails errorDetails; + + @SuppressWarnings("unused") + public BaseResponse() { + } + + public BaseResponse(Messages messages, T response) { + this.messages = messages; + this.response = response; + } + + @SuppressWarnings("unused") + public BaseResponse(T body) { + setResponse(body); + } + + @Override + public String toString() { + return "BaseResponse [Message=" + messages + ", response=" + response + "]"; + } +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/response/BaseResponseEntityWrapper.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/response/BaseResponseEntityWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..ce0dd6d354d359884e24497f360e2775e8d57c17 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/response/BaseResponseEntityWrapper.java @@ -0,0 +1,64 @@ +package it.micegroup.gestioneferie.libs.response; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +import it.micegroup.voila2runtime.response.Messages; + +@RestControllerAdvice +public class BaseResponseEntityWrapper implements ResponseBodyAdvice { + + private static final Logger LOGGER = LoggerFactory.getLogger(BaseResponseEntityWrapper.class); + + private Messages messages; + + @Override + public boolean supports(MethodParameter returnType, Class converterType) { + return true; + } + + @Override + public T beforeBodyWrite(T baseResponse, MethodParameter returnType, + MediaType selectedContentType, Class> selectedConverterType, + ServerHttpRequest request, ServerHttpResponse response) { + + this.messages = new Messages(); + return baseResponse; + } + + + //TODO capire se � ok questo comportamento + private BaseResponse wrapIterableResponse(BaseResponse baseResponse) { + // TODO decidere come trattare la risposta in caso di liste paginate ecc... + return baseResponse; + } + + private BaseResponse wrapDetailResponse(BaseResponse baseResponse) { + return baseResponse; + } + + +// private BaseResponse wrapIterableResponse(T body) { +// // TODO decidere come trattare la risposta in caso di liste paginate ecc... +// return new BaseResponse<>(body); +// } +// +// private BaseResponse wrapDetailResponse(T body) { +// return new BaseResponse<>(body); +// } + + public Messages getMessages() { + if (messages == null) { + messages = new Messages(); + } + return this.messages; + } +} \ No newline at end of file diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/service/BaseEntityService.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/service/BaseEntityService.java new file mode 100644 index 0000000000000000000000000000000000000000..3896db9a271a51e2987468ef991d5844761377ec --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/service/BaseEntityService.java @@ -0,0 +1,12 @@ +package it.micegroup.gestioneferie.libs.service; + + +import it.micegroup.voila2runtime.service.GenericEntityService; + +/** + * Generic class for entity services + * + */ +public interface BaseEntityService extends GenericEntityService { + +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/Auditable.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/Auditable.java new file mode 100644 index 0000000000000000000000000000000000000000..b11fc2371db8507234f9eec3a92a404814d6ddf7 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/Auditable.java @@ -0,0 +1,70 @@ +package it.micegroup.gestioneferie.libs.utilities; + +import java.time.LocalDateTime; + +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; + +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import it.micegroup.gestioneferie.libs.entity.BaseEntity; + +/** + * Class for audit data. This class is extended by entity flagged as auditable. + */ +@EntityListeners(AuditingEntityListener.class) +@MappedSuperclass +public abstract class Auditable extends BaseEntity { + @CreatedBy + @Column(name = "created_by") + private String createdBy; + + @CreatedDate + @Column(name = "created_date", updatable = false) + private LocalDateTime createdDate; + + @LastModifiedBy + @Column(name = "last_modified_by") + private String lastModifiedBy; + + @LastModifiedDate + @Column(name = "last_modified_date", updatable = false) + private LocalDateTime lastModifiedDate; + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public LocalDateTime getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(LocalDateTime createdDate) { + this.createdDate = createdDate; + } + + public String getLastModifiedBy() { + return lastModifiedBy; + } + + public void setLastModifiedBy(String lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + public LocalDateTime getLastModifiedDate() { + return lastModifiedDate; + } + + public void setLastModifiedDate(LocalDateTime lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/CacheConfig.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/CacheConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..43e73086f9aadbef599d7511934baad24014ef85 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/CacheConfig.java @@ -0,0 +1,23 @@ +package it.micegroup.gestioneferie.libs.utilities; +import java.util.Arrays; + +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.concurrent.ConcurrentMapCache; +import org.springframework.cache.support.SimpleCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean + public CacheManager cacheManager() { + SimpleCacheManager cacheManager = new SimpleCacheManager(); + cacheManager.setCaches(Arrays.asList( + new ConcurrentMapCache("PrivilegePerRole") + )); + return cacheManager; + } +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/Constants.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..c09df7cfd9019e1cb5573e94412fd98028f1ea09 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/Constants.java @@ -0,0 +1,10 @@ +package it.micegroup.gestioneferie.libs.utilities; + +public class Constants{ + private Constants() { + throw new IllegalStateException("Utility class"); + } + public static final String ROWIDFIELDDELIMITER = "~"; + public static final String CORRELATION_KEY = "X-Correlation-ID"; +} + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/JasperReportsCache.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/JasperReportsCache.java new file mode 100644 index 0000000000000000000000000000000000000000..d68994183a152f922aff9eb584e78e8a6114955a --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/JasperReportsCache.java @@ -0,0 +1,31 @@ + +package it.micegroup.gestioneferie.libs.utilities; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.springframework.stereotype.Component; + +import net.sf.jasperreports.engine.JasperReport; + +@Component +public class JasperReportsCache { + private Map cache; + + public JasperReportsCache() { + cache = new ConcurrentHashMap(); + } + + public void save(String key, JasperReport jasperReport) { + cache.put(key, jasperReport); + } + + public JasperReport load(String key) { + return cache.get(key); + } + + public boolean isSaved(String key) { + return cache.containsKey(key); + } +} + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/MessageSourceSettings.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/MessageSourceSettings.java new file mode 100644 index 0000000000000000000000000000000000000000..9403196c86b7b3c2e10097cbea7e1cc5c7bc2a72 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/MessageSourceSettings.java @@ -0,0 +1,20 @@ +package it.micegroup.gestioneferie.libs.utilities; + + +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; + + +@Configuration +public class MessageSourceSettings { + + @Bean + public MessageSource messageSource(){ + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasenames("i18n/res"); + return messageSource; + } + +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/MessageUtil.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/MessageUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..e050e7435e34f2be7b77d9ba3cae32474ec06b96 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/MessageUtil.java @@ -0,0 +1,80 @@ +package it.micegroup.gestioneferie.libs.utilities; + +import java.util.List; +import java.util.Locale; + +import org.springframework.context.MessageSource; +import org.springframework.context.support.DefaultMessageSourceResolvable; + +import it.micegroup.voila2runtime.response.Message; +import it.micegroup.voila2runtime.response.Message.MessageLevelType; + + +public class MessageUtil { + private static MessageSource messageSource; + private static ThreadLocal> messages = new ThreadLocal<>(); + + public static void setMessageSource(MessageSource source) { + messageSource = source; + } + + public static ThreadLocal> getThreadLocalMessages() { + return messages; + } + + public static void setThreadLocalMessages(ThreadLocal> messages) { + MessageUtil.messages = messages; + } + + public static List getMessages() { + return getThreadLocalMessages().get(); + } + + public static void setMessages(List msgs) { + getThreadLocalMessages().set(msgs); + } + + public static Message addInfoMessage(String msg) { + return addMessage(MessageLevelType.INFO, null, msg, null); + } + + public static Message addInfoMessage(String key, Object ... args) { + return addMessage(MessageLevelType.INFO, key, null, args); + } + + public static Message addWarningMessage(String msg) { + return addMessage(MessageLevelType.WARNING, null, msg, null); + } + + public static Message addWarningMessage(String key, Object ... args) { + return addMessage(MessageLevelType.WARNING, key, null, args); + } + + public static Message addErrorMessage(String msg) { + return addMessage(MessageLevelType.ERROR, null, msg, null); + } + + public static Message addErrorMessage(String key, Object ... args) { + return addMessage(MessageLevelType.ERROR, key, null, args); + } + + public static Message addMessage(MessageLevelType severity, String key, String msg, Object[] args) { + if (key != null) { + String[] fields = new String[args.length]; + if (args.length > 0 && args[0].getClass().isAssignableFrom(DefaultMessageSourceResolvable.class)) { + for (int i = 0; i < args.length; i++) { + if (DefaultMessageSourceResolvable.class.isAssignableFrom(args[i].getClass())) { + fields[i] = messageSource.getMessage((DefaultMessageSourceResolvable)args[i], Locale.getDefault()); + } + } + msg = messageSource.getMessage(key, fields, msg, Locale.getDefault()); + } else { + msg = messageSource.getMessage(key, args, msg, Locale.getDefault()); + } + } + Message m = new Message(severity, key, msg, args); + getMessages().add(m); + return m; + } +} + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/SpringFoxConfig.java b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/SpringFoxConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..7c00192c7560ac66a2425f4980dd3000238c50d1 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/java/it/micegroup/gestioneferie/libs/utilities/SpringFoxConfig.java @@ -0,0 +1,51 @@ +package it.micegroup.gestioneferie.libs.utilities; + +//import static java.util.Collections.singletonList; +// +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +//import springfox.documentation.builders.ApiInfoBuilder; +//import springfox.documentation.builders.PathSelectors; +//import springfox.documentation.builders.RequestHandlerSelectors; +//import springfox.documentation.service.ApiInfo; +//import springfox.documentation.service.ApiKey; +//import springfox.documentation.service.AuthorizationScope; +//import springfox.documentation.service.SecurityReference; +//import springfox.documentation.spi.DocumentationType; +//import springfox.documentation.spi.service.contexts.SecurityContext; +//import springfox.documentation.spring.web.plugins.Docket; +//import springfox.documentation.swagger2.annotations.EnableSwagger2; + + +//@Configuration +//@EnableSwagger2 +public class SpringFoxConfig { + +// @Bean +// public Docket api() { +// return new Docket(DocumentationType.SWAGGER_2) +// .apiInfo(apiInfo()).securitySchemes(singletonList(new ApiKey("Token Auth", "Authorization", "Bearer"))) +// .securityContexts(singletonList( +// SecurityContext.builder() +// .securityReferences( +// singletonList(SecurityReference.builder() +// .reference("Token Auth") +// .scopes(new AuthorizationScope[0]) +// .build() +// ) +// ) +// .build()) +// ). +// select() +// .apis(RequestHandlerSelectors.any()) +// .paths(PathSelectors.any()) +// .build(); +// +// } +// +// private ApiInfo apiInfo() { +// return new ApiInfoBuilder().title("REST API Document").description("description for api") +// .termsOfServiceUrl("localhost").version("1.0").build(); +// } +} \ No newline at end of file diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/application.yml b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..9d5bd8a4f1f64f8c06f824becb04d858ec3f2efc --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/application.yml @@ -0,0 +1,7 @@ +jasperreports: + dir: reports + debug: true + +spring: + messages: + basename: i18n/res \ No newline at end of file diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res.properties b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res.properties new file mode 100644 index 0000000000000000000000000000000000000000..7c975c283a8be42ccb58989ba5945121edd861b3 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res.properties @@ -0,0 +1 @@ +not.found={0} not found! \ No newline at end of file diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res_en.properties b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res_en.properties new file mode 100644 index 0000000000000000000000000000000000000000..2289c88200f3d572356e3b4d61c8593d6f867aaa --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res_en.properties @@ -0,0 +1 @@ +not.found={0} not found! \ No newline at end of file diff --git a/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res_it.properties b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..0139c042004bdd364552260bd80cd1dfd11090b1 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-core/src/main/resources/i18n/res_it.properties @@ -0,0 +1 @@ +not.found={0} non trovato! \ No newline at end of file diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/.classpath b/GF/gestioneferie-libs/gestioneferie-libs-impl/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..4e06a5c097aefe0eb456a28052229955747f00e0 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-impl/.classpath @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/.project b/GF/gestioneferie-libs/gestioneferie-libs-impl/.project new file mode 100644 index 0000000000000000000000000000000000000000..24967aacaf49311f7f20d4606cdea6a6f231ecb5 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-impl/.project @@ -0,0 +1,54 @@ + + + gestioneferie-libs-impl + + + gestioneferie + gestioneferie-libs + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1644425858256 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858260 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425858272 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..abdea9ac032d4655898933f93050f48bf9581d14 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.jdt.core.prefs b/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..2af1e7b99c98d3fc61561c085022741062a7820e --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.m2e.core.prefs b/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-impl/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/.voilaProject b/GF/gestioneferie-libs/gestioneferie-libs-impl/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/pom.xml b/GF/gestioneferie-libs/gestioneferie-libs-impl/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..c959c965b4702b5f90f42559572a13d4bfe41546 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-impl/pom.xml @@ -0,0 +1,43 @@ + + + + 4.0.0 + + gestioneferie-libs-impl + gestioneferie-libs-impl + Voila 2 Sample Project rel. 0.0.1 + jar + + + it.micegroup + gestioneferie-libs + 0.0.1-SNAPSHOT + ../pom.xml + + + + + it.micegroup + gestioneferie-libs-core + 0.0.1-SNAPSHOT + + + it.micegroup + voila2runtime-impl + ${voila2.runtime.version} + + + it.micegroup + voila2runtime-mail-impl + ${voila2.runtime.version} + + + it.micegroup + voila2runtime-bi-impl + ${voila2.runtime.version} + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/src/main/java/it/micegroup/gestioneferie/libs/service/BaseServiceImpl.java b/GF/gestioneferie-libs/gestioneferie-libs-impl/src/main/java/it/micegroup/gestioneferie/libs/service/BaseServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..38947737d0b251ddc4a93c2baebabdfd7e7b9f05 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-impl/src/main/java/it/micegroup/gestioneferie/libs/service/BaseServiceImpl.java @@ -0,0 +1,78 @@ +package it.micegroup.gestioneferie.libs.service; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternUtils; + +import org.springframework.stereotype.Service; + +import it.micegroup.gestioneferie.libs.utilities.JasperReportsCache; +import it.micegroup.voila2runtime.exception.BusinessException; +import net.sf.jasperreports.engine.JRException; +import java.io.IOException; + +import net.sf.jasperreports.engine.JasperCompileManager; +import net.sf.jasperreports.engine.JasperReport; + +/** + * Generic class for services + */ +@Service +public class BaseServiceImpl { + private static String JASPER_REPORT_EXTENSION = ".jrxml"; + private static String JASPER_REPORT_MAIN_PREFIX = "Detail"; + + @Value("${jasperreports.dir}") + protected String jasperReportsDir; + + @Autowired + private ResourceLoader resourceLoader; + + @Value("${jasperreports.debug}") + private Boolean jasperReportsDebug; + + @Autowired + private JasperReportsCache jasperReportsCache; + + protected JasperReport prepareJasperReport(String reportName, Map parameters) throws BusinessException { + String jrMainKey = reportName; + String jrMainFilename = jrMainKey + JASPER_REPORT_EXTENSION; + try{ + // Find and build all dependency resources except the main (also know as master report). + ResourcePatternResolver resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader); + Resource[] jrResources = resourcePatternResolver.getResources("classpath:" + jasperReportsDir + "/*" + reportName + JASPER_REPORT_EXTENSION); + Resource jrMainResource = null; + for (Resource resource : jrResources) { + if (resource.getFilename().equals(jrMainFilename)) { + // Save main report resource (file) and jump the build. + jrMainResource = resource; + continue; + } + String jrKey = resource.getFilename().replaceFirst(JASPER_REPORT_EXTENSION, ""); + if (jasperReportsDebug || !jasperReportsCache.isSaved(jrKey)) { + jasperReportsCache.save(jrKey, JasperCompileManager.compileReport(resource.getInputStream())); + } + parameters.put(jrKey, jasperReportsCache.load(jrKey)); + } + // Check if main report exist. + if (jrMainResource == null) { + throw new RuntimeException(jrMainFilename + " not found"); + } + // Compile and return the main report. + if (jasperReportsDebug || !jasperReportsCache.isSaved(jrMainKey)) { + jasperReportsCache.save(jrMainKey, JasperCompileManager.compileReport(jrMainResource.getInputStream())); + } + return jasperReportsCache.load(jrMainKey); + } catch (IOException e) { + throw new BusinessException(e); + } catch(JRException j) { + throw new BusinessException(j); + } + } +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-impl/src/main/resources/application.yml b/GF/gestioneferie-libs/gestioneferie-libs-impl/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..a5cbdb1c9cb3409d5ddbffce5fba1bc2188253a9 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-impl/src/main/resources/application.yml @@ -0,0 +1,3 @@ +jasperreports: + dir: reports + debug: true \ No newline at end of file diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/.classpath b/GF/gestioneferie-libs/gestioneferie-libs-web/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..2016b9404ebf6ea36841ed80f2ba31d03949788f --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/.classpath @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/.project b/GF/gestioneferie-libs/gestioneferie-libs-web/.project new file mode 100644 index 0000000000000000000000000000000000000000..b2d47a08bf13631564e78acbf9a1d18f4fc1a89e --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/.project @@ -0,0 +1,54 @@ + + + gestioneferie-libs-web + + + gestioneferie + gestioneferie-libs + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1644425858283 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858287 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425858299 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..abdea9ac032d4655898933f93050f48bf9581d14 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.jdt.core.prefs b/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..2af1e7b99c98d3fc61561c085022741062a7820e --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.m2e.core.prefs b/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/.voilaProject b/GF/gestioneferie-libs/gestioneferie-libs-web/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/pom.xml b/GF/gestioneferie-libs/gestioneferie-libs-web/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..3eac04dbd7a2eb5e2219cb5332f9e504ee197ea4 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/pom.xml @@ -0,0 +1,50 @@ + + + + 4.0.0 + + gestioneferie-libs-web + gestioneferie-libs-web + Voila 2 Sample Project rel. 0.0.1 + jar + + + it.micegroup + gestioneferie-libs + 0.0.1-SNAPSHOT + ../pom.xml + + + + 2.3.9 + + + + + it.micegroup + gestioneferie-libs-impl + 0.0.1-SNAPSHOT + + + it.micegroup + voila2runtime-web + ${voila2.runtime.version} + + + org.modelmapper + modelmapper + ${modelmapper.version} + + + org.springframework.boot + spring-boot-starter-hateoas + + + org.springframework.boot + spring-boot-starter-oauth2-resource-server + + + + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/assembler/BaseModelAssembler.java b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/assembler/BaseModelAssembler.java new file mode 100644 index 0000000000000000000000000000000000000000..4d4a09350f8592ca28883ba37f96e74a247e1754 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/assembler/BaseModelAssembler.java @@ -0,0 +1,55 @@ +package it.micegroup.gestioneferie.libs.assembler; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; + +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.hateoas.Link; +import org.springframework.hateoas.LinkRelation; +import org.springframework.hateoas.RepresentationModel; +import org.springframework.hateoas.server.RepresentationModelAssembler; + +import it.micegroup.gestioneferie.libs.controller.BaseController; +import it.micegroup.gestioneferie.libs.entity.BaseEntity; +import it.micegroup.gestioneferie.libs.response.BaseResponse; + +import java.net.URI; + +public abstract class BaseModelAssembler, C extends BaseController>> + implements RepresentationModelAssembler { + + private static ModelMapper modelMapperInstance; + + @Value("${gateway.baseuri}") + private String baseUri; + + @Autowired + private ModelMapper modelMapper; + + protected BaseModelAssembler() { + } + + protected D map(M entity, Class dtoClass, Class controllerClass) { + D dto = modelMapper.map(entity, dtoClass); + Link selfLink = convert(linkTo(methodOn(controllerClass).getByObjectKey(entity.getObjectKey())).withSelfRel()); + dto.add(selfLink); + return dto; + } + + protected Link convert(Link link) { + return Link.of(convertLink(link.getHref()), link.getRel()); + } + + private String convertLink(String href) { + URI uri = URI.create(href); + return baseUri + uri.getPath(); + } + + protected Link getLink(String ms, String entity, String objectKey, LinkRelation relation) { + return Link.of("http://127.0.0.1:8090" + "/" + ms + "/" + entity + "/" + objectKey).withRel(relation.value()); + } + +} + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/controller/BaseController.java b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/controller/BaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..27c496a6708bc5883bab8d0ff00c2ea59959a631 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/controller/BaseController.java @@ -0,0 +1,30 @@ +package it.micegroup.gestioneferie.libs.controller; + +import it.micegroup.voila2runtime.controller.GenericController; + +import it.micegroup.gestioneferie.libs.response.BaseResponse; +import org.springframework.http.ResponseEntity; + +/** + * Generic class for controllers + * + */ +public abstract class BaseController extends GenericController { + /** + * Authority constant + */ + protected static final String AUTH = "hasPrivilege"; + + /** + * Application name + */ + protected static final String APPLICATION_NAME = "gestioneferie"; + +public abstract ResponseEntity getByObjectKey(String objectKey); + + public ResponseEntity generateJasperReportPdf(byte[] pdfReport) { + return super.genJasperReportPdf(pdfReport); + } + public ResponseEntity generateJasperReportXls(byte[] xlsReport) { + return super.genJasperReportXls(xlsReport); + }} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/converter/BeanConverter.java b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/converter/BeanConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..bc4cf89b1912d6fa8bc12b357f4fab0400b98495 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/converter/BeanConverter.java @@ -0,0 +1,17 @@ +package it.micegroup.gestioneferie.libs.converter; + +import org.modelmapper.Converter; +import org.modelmapper.ModelMapper; +import org.modelmapper.spi.MappingContext; +import org.springframework.beans.factory.annotation.Autowired; + +public class BeanConverter implements Converter { + + @Autowired + ModelMapper modelMapper; + + @Override + public D convert(MappingContext context) { + return modelMapper.map(context.getSource(), context.getDestinationType()); + } +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/dto/BaseDto.java b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/dto/BaseDto.java new file mode 100644 index 0000000000000000000000000000000000000000..ca802e07c3473d60cbba15025920165fc5dcbe7b --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/dto/BaseDto.java @@ -0,0 +1,11 @@ +package it.micegroup.gestioneferie.libs.dto; + +import java.io.Serializable; +import org.springframework.hateoas.RepresentationModel; +import it.micegroup.voila2runtime.object.GenericObject; + +public abstract class BaseDto extends RepresentationModel implements Serializable { + + private static final long serialVersionUID = 4194007193178138872L; + +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/filter/LogMdcFilter.java b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/filter/LogMdcFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..c9a5843b57e8ea2aeaf91b7e68fedce51783d350 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/filter/LogMdcFilter.java @@ -0,0 +1,39 @@ +package it.micegroup.gestioneferie.libs.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.MDC; +import org.springframework.stereotype.Component; + +import it.micegroup.gestioneferie.libs.utilities.Constants; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class LogMdcFilter implements Filter { + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + if (request instanceof HttpServletRequest) { + HttpServletRequest httpRequest = (HttpServletRequest) request; + + String key = Constants.CORRELATION_KEY; + String uid = httpRequest.getHeader(key); + if (uid != null) { + if (log.isDebugEnabled()) { + log.debug("Setting log MDC attribute key {} to uid {}", key, uid); + } + MDC.put(key, uid); + } + } + chain.doFilter(request, response); + } +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/JPAAuditConfig.java b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/JPAAuditConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..b5165fd1f9dbbdc27a9f5721c292f0265507f591 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/JPAAuditConfig.java @@ -0,0 +1,32 @@ +package it.micegroup.gestioneferie.libs.security; + +import java.util.Optional; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.domain.AuditorAware; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.jwt.Jwt; + +@Configuration +@EnableJpaAuditing(auditorAwareRef = "auditorProvider") +public class JPAAuditConfig { + + @Bean + public AuditorAware auditorProvider() { + return new AuditorAware() { + @Override + public Optional getCurrentAuditor() { + if (SecurityContextHolder.getContext().getAuthentication() != null) { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + Jwt token = (Jwt) auth.getPrincipal(); + String subscriber = (String) token.getClaims().get("sub"); + return Optional.of(subscriber); + } + return Optional.of("Unknown"); + } + }; + } +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/KeycloakRealmRoleConverter.java b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/KeycloakRealmRoleConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..ae6a97616cc42fe6b177da5585c990bae46adef7 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/KeycloakRealmRoleConverter.java @@ -0,0 +1,25 @@ +package it.micegroup.gestioneferie.libs.security; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.oauth2.jwt.Jwt; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class KeycloakRealmRoleConverter implements Converter> { + @Override + public Collection convert(Jwt jwt) { + final Map realmAccess = (Map) jwt.getClaims().get("realm_access"); + return ((List) realmAccess.get("roles")).stream().map(roleName -> "ROLE_" + roleName) // prefix to map + // to a Spring + // Security + // "role" + .map(SimpleGrantedAuthority::new)// .peek(s-> System.out.println(s.getAuthority())) + .collect(Collectors.toList()); + } +} + diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/ResourceServerSecurityConfig.java b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/ResourceServerSecurityConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..60d1a79358474c22abc822956ef1c4fb0d2a9b12 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/java/it/micegroup/gestioneferie/libs/security/ResourceServerSecurityConfig.java @@ -0,0 +1,68 @@ +package it.micegroup.gestioneferie.libs.security; + +import java.util.Arrays; +import java.util.Collections; + +import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.convert.converter.Converter; +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; +import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(jsr250Enabled = true, prePostEnabled = true) // Commentare questa per disattivare sicurezza + // da keycloak +public class ResourceServerSecurityConfig extends WebSecurityConfigurerAdapter { + + @Value("${spring.security.oauth2.resourceserver.jwt.jwk-set-uri}") + private String jwkSetUri; + + @Override + protected void configure(HttpSecurity http) throws Exception { + // http.headers().frameOptions().sameOrigin().and().csrf().disable().authorizeRequests().anyRequest().permitAll(); + // //Usare questa per disabilitare sicurezza da keycloak + + // http.cors().configurationSource(request -> new + // CorsConfiguration().applyPermitDefaultValues()).and().authorizeRequests(a -> + // a.anyRequest().authenticated()).oauth2ResourceServer( + // httpSecurityOAuth2ResourceServerConfigurer -> + // httpSecurityOAuth2ResourceServerConfigurer + // .jwt(jwtConfigurer -> + // jwtConfigurer.jwtAuthenticationConverter(jwtAuthenticationConverter()))); + + http.authorizeRequests(a -> a.anyRequest().authenticated()).oauth2ResourceServer( + httpSecurityOAuth2ResourceServerConfigurer -> httpSecurityOAuth2ResourceServerConfigurer + .jwt(jwtConfigurer -> jwtConfigurer.jwtAuthenticationConverter(jwtAuthenticationConverter()))); + + http.csrf().disable(); + http.headers().frameOptions().disable(); + } + + private Converter jwtAuthenticationConverter() { + JwtAuthenticationConverter jwtConverter = new JwtAuthenticationConverter(); + jwtConverter.setJwtGrantedAuthoritiesConverter(new KeycloakRealmRoleConverter()); + return jwtConverter; + } + + @Bean + public JwtDecoder jwtDecoder() { + return NimbusJwtDecoder.withJwkSetUri(this.jwkSetUri).build(); + } + +} diff --git a/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/resources/application.yml b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..a5cbdb1c9cb3409d5ddbffce5fba1bc2188253a9 --- /dev/null +++ b/GF/gestioneferie-libs/gestioneferie-libs-web/src/main/resources/application.yml @@ -0,0 +1,3 @@ +jasperreports: + dir: reports + debug: true \ No newline at end of file diff --git a/GF/gestioneferie-libs/pom.xml b/GF/gestioneferie-libs/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..91a02fe43031fef7c12126a0a1e0d0845cd71987 --- /dev/null +++ b/GF/gestioneferie-libs/pom.xml @@ -0,0 +1,26 @@ + + + + 4.0.0 + + gestioneferie-libs + gestioneferie-libs + Voila 2 Sample Project rel. 0.0.1 + pom + + + it.micegroup + gestioneferie-be + 0.0.1-SNAPSHOT + ../pom.xml + + + + gestioneferie-libs-core + gestioneferie-libs-web + gestioneferie-libs-impl + + + diff --git a/GF/gestioneferie-ms-configurazionepf/.classpath b/GF/gestioneferie-ms-configurazionepf/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..30aaa471e8e5d257fa796ec6c6672f5411a99d60 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/MavenWrapperDownloader.java b/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000000000000000000000000000000000..c32394f140a74ad74d1deb4a98bf2556fadf23da --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.5"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/maven-wrapper.jar b/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..0d5e649888a4843c1520054d9672f80c62ebbb48 Binary files /dev/null and b/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/maven-wrapper.jar differ diff --git a/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/maven-wrapper.properties b/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..7d59a01f2594defa27705a493da0e4d57465aa2d --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.2/apache-maven-3.6.2-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar diff --git a/GF/gestioneferie-ms-configurazionepf/.project b/GF/gestioneferie-ms-configurazionepf/.project new file mode 100644 index 0000000000000000000000000000000000000000..d2f5c55028fb17817504173e05636b599a7c03c4 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/.project @@ -0,0 +1,74 @@ + + + gestioneferie-ms-configurazionepf + + + gestioneferie + gestioneferie-be + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.acceleo.ide.ui.acceleoBuilder + + + compilation.kind + compilation.absolute.path + + + compliance + pragmatic + + + resource.kind + xmi + + + trim-position + false + + + + + org.eclipse.acceleo.ide.ui.acceleoBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.acceleo.ide.ui.acceleoNature + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + + + 1644511776246 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-node_modules + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.jdt.core.prefs b/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..a274c0a1cdff77d8585abd6b9ca738e76e9bcc43 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,359 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.m2e.core.prefs b/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/gestioneferie-ms-configurazionepf/.voilaProject b/GF/gestioneferie-ms-configurazionepf/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-ms-configurazionepf/Dockerfile b/GF/gestioneferie-ms-configurazionepf/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..4204192b057fd362877c66b64986813eaa37e26f --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/Dockerfile @@ -0,0 +1,10 @@ +FROM openjdk:11.0-jdk +ADD /modules/gestioneferie-ms-configurazionepf-web/target/gestioneferie-ms-configurazionepf.jar / +EXPOSE 8080 +RUN apt-get update +RUN apt-get install dos2unix + +ADD s_start.sh / +RUN dos2unix s_start.sh +RUN chmod +x /s_start.sh +CMD cd / && ./s_start.sh diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.classpath b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..8b2948e19c5b0e119abe2273d4267f30ddbf53d6 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.classpath @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/MavenWrapperDownloader.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000000000000000000000000000000000..c32394f140a74ad74d1deb4a98bf2556fadf23da --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.5"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/maven-wrapper.jar b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..0d5e649888a4843c1520054d9672f80c62ebbb48 Binary files /dev/null and b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/maven-wrapper.jar differ diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/maven-wrapper.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..7d59a01f2594defa27705a493da0e4d57465aa2d --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.2/apache-maven-3.6.2-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.project b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.project new file mode 100644 index 0000000000000000000000000000000000000000..e039759dd0bb13c594b74730d1324f0edf34b830 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.project @@ -0,0 +1,71 @@ + + + gestioneferie-ms-configurazionepf-core + + + gestioneferie-ms-configurazionepf + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.m2e.core.maven2Nature + + + + 1644425858541 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858548 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425858581 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..e9441bb123ec3e1ab029c7eac896bc45681d9a71 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.jdt.core.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..ea81b668205b42187d800803790cb71e28ca2e14 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,366 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.m2e.core.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.voilaProject b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/mvnw b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/mvnw new file mode 100644 index 0000000000000000000000000000000000000000..d2f0ea38081dce15746cffcec1f1e4151d1a1f0a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/mvnw.cmd b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/mvnw.cmd new file mode 100644 index 0000000000000000000000000000000000000000..b26ab24f039ea62cea44199665b23318f3cc5344 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/pom.xml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..3bc81f71b410c9dd4039dc6c5c917d181abd1138 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + gestioneferie-ms-configurazionepf-core + gestioneferie-ms-configurazionepf-core module + http://www.micegroup.it + + + it.micegroup + gestioneferie-ms-configurazionepf + 0.0.1-SNAPSHOT + ../../pom.xml + + jar + + + + + + + + + it.micegroup + gestioneferie-libs-core + 0.0.1-SNAPSHOT + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DconfigPaPfUoHCriteria.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DconfigPaPfUoHCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..a494c6248a231480fb1e0bc502259e8e8b9d14fd --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DconfigPaPfUoHCriteria.java @@ -0,0 +1,198 @@ +package it.micegroup.gestioneferie.configurazionepf.criteria; + +import java.io.Serializable; + +import it.micegroup.voila2runtime.filter.StringFilter; + +import it.micegroup.voila2runtime.filter.LongFilter; +import it.micegroup.voila2runtime.filter.StringFilter; +import it.micegroup.voila2runtime.filter.LocalDateFilter; + +public class DconfigPaPfUoHCriteria implements Serializable { + + // SERIAL UID + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 2107839351L; + + // FILTER ATTRIBUTES + private LongFilter sequIdConfigPaPfUoH; + + private StringFilter flagValidoUoSubordinate; + + private LongFilter fkConfigPaPianoFerie; + + private LongFilter fkUnitaFunzionale; + + private LongFilter fkUnitaOrganizzativaPk; + + private StringFilter utenteUltimaModifica; + + private StringFilter flagEliminato; + + private LocalDateFilter dataInizioValidita; + + private LocalDateFilter dataFineValidita; + + private LocalDateFilter dataUltimaModifica; + + // FILTER FATHER + private String theDconfigPaPianiFerieObjectKey; + + // FILTER IMPORTED FATHER + + // GETTER/SETTER + /** + * @return the sequIdConfigPaPfUoH + */ + public LongFilter getSequIdConfigPaPfUoH() { + return this.sequIdConfigPaPfUoH; + } + + /** + * @param sequIdConfigPaPfUoH to set + */ + public void setSequIdConfigPaPfUoH(LongFilter sequIdConfigPaPfUoH) { + this.sequIdConfigPaPfUoH = sequIdConfigPaPfUoH; + } + + /** + * @return the flagValidoUoSubordinate + */ + public StringFilter getFlagValidoUoSubordinate() { + return this.flagValidoUoSubordinate; + } + + /** + * @param flagValidoUoSubordinate to set + */ + public void setFlagValidoUoSubordinate(StringFilter flagValidoUoSubordinate) { + this.flagValidoUoSubordinate = flagValidoUoSubordinate; + } + + /** + * @return the fkConfigPaPianoFerie + */ + public LongFilter getFkConfigPaPianoFerie() { + return this.fkConfigPaPianoFerie; + } + + /** + * @param fkConfigPaPianoFerie to set + */ + public void setFkConfigPaPianoFerie(LongFilter fkConfigPaPianoFerie) { + this.fkConfigPaPianoFerie = fkConfigPaPianoFerie; + } + + /** + * @return the fkUnitaFunzionale + */ + public LongFilter getFkUnitaFunzionale() { + return this.fkUnitaFunzionale; + } + + /** + * @param fkUnitaFunzionale to set + */ + public void setFkUnitaFunzionale(LongFilter fkUnitaFunzionale) { + this.fkUnitaFunzionale = fkUnitaFunzionale; + } + + /** + * @return the fkUnitaOrganizzativaPk + */ + public LongFilter getFkUnitaOrganizzativaPk() { + return this.fkUnitaOrganizzativaPk; + } + + /** + * @param fkUnitaOrganizzativaPk to set + */ + public void setFkUnitaOrganizzativaPk(LongFilter fkUnitaOrganizzativaPk) { + this.fkUnitaOrganizzativaPk = fkUnitaOrganizzativaPk; + } + + /** + * @return the utenteUltimaModifica + */ + public StringFilter getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(StringFilter utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the flagEliminato + */ + public StringFilter getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(StringFilter flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the dataInizioValidita + */ + public DateFilter getDataInizioValidita() { + return this.dataInizioValidita; + } + + /** + * @param dataInizioValidita to set + */ + public void setDataInizioValidita(DateFilter dataInizioValidita) { + this.dataInizioValidita = dataInizioValidita; + } + + /** + * @return the dataFineValidita + */ + public DateFilter getDataFineValidita() { + return this.dataFineValidita; + } + + /** + * @param dataFineValidita to set + */ + public void setDataFineValidita(DateFilter dataFineValidita) { + this.dataFineValidita = dataFineValidita; + } + + /** + * @return the dataUltimaModifica + */ + public DateFilter getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(DateFilter dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + // GETTER/SETTER FATHER + + public String getTheDconfigPaPianiFerieObjectKey() { + return theDconfigPaPianiFerieObjectKey; + } + + public void setTheDconfigPaPianiFerieObjectKey(String theDconfigPaPianiFerieObjectKey) { + this.theDconfigPaPianiFerieObjectKey = theDconfigPaPianiFerieObjectKey; + } + + // GETTER/SETTER IMPORTED FATHER + + // GEN COMPOSITE FILTER + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DconfigPaPianiFerieCriteria.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DconfigPaPianiFerieCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..23fa72a0aa9ee2ea79e690f2aad256dc7b31a591 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DconfigPaPianiFerieCriteria.java @@ -0,0 +1,187 @@ +package it.micegroup.gestioneferie.configurazionepf.criteria; + +import java.io.Serializable; + +import it.micegroup.voila2runtime.filter.LongFilter; +import it.micegroup.voila2runtime.filter.StringFilter; +import it.micegroup.voila2runtime.filter.LocalDateFilter; + +public class DconfigPaPianiFerieCriteria implements Serializable { + + // SERIAL UID + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 1237557078L; + + // FILTER ATTRIBUTES + private LongFilter sequIdConfigPaPianoFerie; + + private StringFilter codiConfigPaPianoFerie; + + private StringFilter descConfigPaPianoFerie; + + private LongFilter fkAmministrazionePk; + + private LongFilter fkTipoOrganigramma; + + private LocalDateFilter dataUltimaModifica; + + private StringFilter utenteUltimaModifica; + + private StringFilter flagEliminato; + + private LocalDateFilter dataInizioRecord; + + private LocalDateFilter dataFineRecord; + + // FILTER FATHER + + // FILTER IMPORTED FATHER + + // GETTER/SETTER + /** + * @return the sequIdConfigPaPianoFerie + */ + public LongFilter getSequIdConfigPaPianoFerie() { + return this.sequIdConfigPaPianoFerie; + } + + /** + * @param sequIdConfigPaPianoFerie to set + */ + public void setSequIdConfigPaPianoFerie(LongFilter sequIdConfigPaPianoFerie) { + this.sequIdConfigPaPianoFerie = sequIdConfigPaPianoFerie; + } + + /** + * @return the codiConfigPaPianoFerie + */ + public StringFilter getCodiConfigPaPianoFerie() { + return this.codiConfigPaPianoFerie; + } + + /** + * @param codiConfigPaPianoFerie to set + */ + public void setCodiConfigPaPianoFerie(StringFilter codiConfigPaPianoFerie) { + this.codiConfigPaPianoFerie = codiConfigPaPianoFerie; + } + + /** + * @return the descConfigPaPianoFerie + */ + public StringFilter getDescConfigPaPianoFerie() { + return this.descConfigPaPianoFerie; + } + + /** + * @param descConfigPaPianoFerie to set + */ + public void setDescConfigPaPianoFerie(StringFilter descConfigPaPianoFerie) { + this.descConfigPaPianoFerie = descConfigPaPianoFerie; + } + + /** + * @return the fkAmministrazionePk + */ + public LongFilter getFkAmministrazionePk() { + return this.fkAmministrazionePk; + } + + /** + * @param fkAmministrazionePk to set + */ + public void setFkAmministrazionePk(LongFilter fkAmministrazionePk) { + this.fkAmministrazionePk = fkAmministrazionePk; + } + + /** + * @return the fkTipoOrganigramma + */ + public LongFilter getFkTipoOrganigramma() { + return this.fkTipoOrganigramma; + } + + /** + * @param fkTipoOrganigramma to set + */ + public void setFkTipoOrganigramma(LongFilter fkTipoOrganigramma) { + this.fkTipoOrganigramma = fkTipoOrganigramma; + } + + /** + * @return the dataUltimaModifica + */ + public DateFilter getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(DateFilter dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + /** + * @return the utenteUltimaModifica + */ + public StringFilter getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(StringFilter utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the flagEliminato + */ + public StringFilter getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(StringFilter flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the dataInizioRecord + */ + public DateFilter getDataInizioRecord() { + return this.dataInizioRecord; + } + + /** + * @param dataInizioRecord to set + */ + public void setDataInizioRecord(DateFilter dataInizioRecord) { + this.dataInizioRecord = dataInizioRecord; + } + + /** + * @return the dataFineRecord + */ + public DateFilter getDataFineRecord() { + return this.dataFineRecord; + } + + /** + * @param dataFineRecord to set + */ + public void setDataFineRecord(DateFilter dataFineRecord) { + this.dataFineRecord = dataFineRecord; + } + + // GETTER/SETTER FATHER + + // GETTER/SETTER IMPORTED FATHER + + // GEN COMPOSITE FILTER + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DpercAutPianFerieHCriteria.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DpercAutPianFerieHCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..d64a9b929346378a0655d47f607cba2648f3ddcb --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DpercAutPianFerieHCriteria.java @@ -0,0 +1,191 @@ +package it.micegroup.gestioneferie.configurazionepf.criteria; + +import java.io.Serializable; + +import it.micegroup.voila2runtime.filter.StringFilter; + +import it.micegroup.voila2runtime.filter.LongFilter; +import it.micegroup.voila2runtime.filter.LocalDateFilter; +import it.micegroup.voila2runtime.filter.StringFilter; + +public class DpercAutPianFerieHCriteria implements Serializable { + + // SERIAL UID + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 2997153128L; + + // FILTER ATTRIBUTES + private LongFilter sequIdPercAutPianFerieH; + + private LongFilter fkConfigPaPianoFerie; + + private LongFilter fkPercorso; + + private LongFilter fkPercAutPianFeriePk; + + private LocalDateFilter dataUltimaModifica; + + private LocalDateFilter dataFineValidita; + + private LocalDateFilter dataInizioValidita; + + private StringFilter utenteUltimaModifica; + + private StringFilter flagEliminato; + + // FILTER FATHER + private String theDpercAutPianFeriePkObjectKey; + private String theDconfigPaPianiFerieObjectKey; + + // FILTER IMPORTED FATHER + + // GETTER/SETTER + /** + * @return the sequIdPercAutPianFerieH + */ + public LongFilter getSequIdPercAutPianFerieH() { + return this.sequIdPercAutPianFerieH; + } + + /** + * @param sequIdPercAutPianFerieH to set + */ + public void setSequIdPercAutPianFerieH(LongFilter sequIdPercAutPianFerieH) { + this.sequIdPercAutPianFerieH = sequIdPercAutPianFerieH; + } + + /** + * @return the fkConfigPaPianoFerie + */ + public LongFilter getFkConfigPaPianoFerie() { + return this.fkConfigPaPianoFerie; + } + + /** + * @param fkConfigPaPianoFerie to set + */ + public void setFkConfigPaPianoFerie(LongFilter fkConfigPaPianoFerie) { + this.fkConfigPaPianoFerie = fkConfigPaPianoFerie; + } + + /** + * @return the fkPercorso + */ + public LongFilter getFkPercorso() { + return this.fkPercorso; + } + + /** + * @param fkPercorso to set + */ + public void setFkPercorso(LongFilter fkPercorso) { + this.fkPercorso = fkPercorso; + } + + /** + * @return the fkPercAutPianFeriePk + */ + public LongFilter getFkPercAutPianFeriePk() { + return this.fkPercAutPianFeriePk; + } + + /** + * @param fkPercAutPianFeriePk to set + */ + public void setFkPercAutPianFeriePk(LongFilter fkPercAutPianFeriePk) { + this.fkPercAutPianFeriePk = fkPercAutPianFeriePk; + } + + /** + * @return the dataUltimaModifica + */ + public DateFilter getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(DateFilter dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + /** + * @return the dataFineValidita + */ + public DateFilter getDataFineValidita() { + return this.dataFineValidita; + } + + /** + * @param dataFineValidita to set + */ + public void setDataFineValidita(DateFilter dataFineValidita) { + this.dataFineValidita = dataFineValidita; + } + + /** + * @return the dataInizioValidita + */ + public DateFilter getDataInizioValidita() { + return this.dataInizioValidita; + } + + /** + * @param dataInizioValidita to set + */ + public void setDataInizioValidita(DateFilter dataInizioValidita) { + this.dataInizioValidita = dataInizioValidita; + } + + /** + * @return the utenteUltimaModifica + */ + public StringFilter getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(StringFilter utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the flagEliminato + */ + public StringFilter getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(StringFilter flagEliminato) { + this.flagEliminato = flagEliminato; + } + + // GETTER/SETTER FATHER + + public String getTheDpercAutPianFeriePkObjectKey() { + return theDpercAutPianFeriePkObjectKey; + } + + public void setTheDpercAutPianFeriePkObjectKey(String theDpercAutPianFeriePkObjectKey) { + this.theDpercAutPianFeriePkObjectKey = theDpercAutPianFeriePkObjectKey; + } + + public String getTheDconfigPaPianiFerieObjectKey() { + return theDconfigPaPianiFerieObjectKey; + } + + public void setTheDconfigPaPianiFerieObjectKey(String theDconfigPaPianiFerieObjectKey) { + this.theDconfigPaPianiFerieObjectKey = theDconfigPaPianiFerieObjectKey; + } + + // GETTER/SETTER IMPORTED FATHER + + // GEN COMPOSITE FILTER + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DpercAutPianFeriePkCriteria.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DpercAutPianFeriePkCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..034c032e5fb51b5f16b553becbdc8c72de222c4b --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DpercAutPianFeriePkCriteria.java @@ -0,0 +1,91 @@ +package it.micegroup.gestioneferie.configurazionepf.criteria; + +import java.io.Serializable; + +import it.micegroup.voila2runtime.filter.LongFilter; +import it.micegroup.voila2runtime.filter.StringFilter; +import it.micegroup.voila2runtime.filter.LocalDateFilter; + +public class DpercAutPianFeriePkCriteria implements Serializable { + + // SERIAL UID + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 887071405L; + + // FILTER ATTRIBUTES + private LongFilter sequIdPercAutPianFeriePk; + + private StringFilter flagEliminato; + + private StringFilter utenteUltimaModifica; + + private LocalDateFilter dataUltimaModifica; + + // FILTER FATHER + + // FILTER IMPORTED FATHER + + // GETTER/SETTER + /** + * @return the sequIdPercAutPianFeriePk + */ + public LongFilter getSequIdPercAutPianFeriePk() { + return this.sequIdPercAutPianFeriePk; + } + + /** + * @param sequIdPercAutPianFeriePk to set + */ + public void setSequIdPercAutPianFeriePk(LongFilter sequIdPercAutPianFeriePk) { + this.sequIdPercAutPianFeriePk = sequIdPercAutPianFeriePk; + } + + /** + * @return the flagEliminato + */ + public StringFilter getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(StringFilter flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the utenteUltimaModifica + */ + public StringFilter getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(StringFilter utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the dataUltimaModifica + */ + public DateFilter getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(DateFilter dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + // GETTER/SETTER FATHER + + // GETTER/SETTER IMPORTED FATHER + + // GEN COMPOSITE FILTER + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DregolePianiFerieHCriteria.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DregolePianiFerieHCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..2069ec183a1314d2998ae35cd3269f9ef957ba08 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DregolePianiFerieHCriteria.java @@ -0,0 +1,278 @@ +package it.micegroup.gestioneferie.configurazionepf.criteria; + +import java.io.Serializable; + +import it.micegroup.voila2runtime.filter.StringFilter; + +import it.micegroup.voila2runtime.filter.LongFilter; +import it.micegroup.voila2runtime.filter.StringFilter; +import it.micegroup.voila2runtime.filter.LocalDateFilter; + +public class DregolePianiFerieHCriteria implements Serializable { + + // SERIAL UID + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 976188501L; + + // FILTER ATTRIBUTES + private LongFilter sequIdRegolePianiFerieH; + + private LongFilter numMinGgDaPianificare; + + private LongFilter numMaxGgDaPianificare; + + private LongFilter numePercMinGiorniPresenza; + + private StringFilter flagValidoUoSubordinate; + + private LongFilter fkAmministrazione; + + private LongFilter fkRegolaPianoFeriePk; + + private LongFilter fkTipoOrganigramma; + + private LongFilter fkUnitaFunzionale; + + private LongFilter fkUnitaOrganizzativaPk; + + private StringFilter flagEliminato; + + private StringFilter utenteUltimaModifica; + + private LocalDateFilter dataUltimaModifica; + + private LocalDateFilter dataInizioValidita; + + private LocalDateFilter dataFineValidita; + + // FILTER FATHER + private String theDregolePianiFeriePkObjectKey; + + // FILTER IMPORTED FATHER + + // GETTER/SETTER + /** + * @return the sequIdRegolePianiFerieH + */ + public LongFilter getSequIdRegolePianiFerieH() { + return this.sequIdRegolePianiFerieH; + } + + /** + * @param sequIdRegolePianiFerieH to set + */ + public void setSequIdRegolePianiFerieH(LongFilter sequIdRegolePianiFerieH) { + this.sequIdRegolePianiFerieH = sequIdRegolePianiFerieH; + } + + /** + * @return the numMinGgDaPianificare + */ + public LongFilter getNumMinGgDaPianificare() { + return this.numMinGgDaPianificare; + } + + /** + * @param numMinGgDaPianificare to set + */ + public void setNumMinGgDaPianificare(LongFilter numMinGgDaPianificare) { + this.numMinGgDaPianificare = numMinGgDaPianificare; + } + + /** + * @return the numMaxGgDaPianificare + */ + public LongFilter getNumMaxGgDaPianificare() { + return this.numMaxGgDaPianificare; + } + + /** + * @param numMaxGgDaPianificare to set + */ + public void setNumMaxGgDaPianificare(LongFilter numMaxGgDaPianificare) { + this.numMaxGgDaPianificare = numMaxGgDaPianificare; + } + + /** + * @return the numePercMinGiorniPresenza + */ + public LongFilter getNumePercMinGiorniPresenza() { + return this.numePercMinGiorniPresenza; + } + + /** + * @param numePercMinGiorniPresenza to set + */ + public void setNumePercMinGiorniPresenza(LongFilter numePercMinGiorniPresenza) { + this.numePercMinGiorniPresenza = numePercMinGiorniPresenza; + } + + /** + * @return the flagValidoUoSubordinate + */ + public StringFilter getFlagValidoUoSubordinate() { + return this.flagValidoUoSubordinate; + } + + /** + * @param flagValidoUoSubordinate to set + */ + public void setFlagValidoUoSubordinate(StringFilter flagValidoUoSubordinate) { + this.flagValidoUoSubordinate = flagValidoUoSubordinate; + } + + /** + * @return the fkAmministrazione + */ + public LongFilter getFkAmministrazione() { + return this.fkAmministrazione; + } + + /** + * @param fkAmministrazione to set + */ + public void setFkAmministrazione(LongFilter fkAmministrazione) { + this.fkAmministrazione = fkAmministrazione; + } + + /** + * @return the fkRegolaPianoFeriePk + */ + public LongFilter getFkRegolaPianoFeriePk() { + return this.fkRegolaPianoFeriePk; + } + + /** + * @param fkRegolaPianoFeriePk to set + */ + public void setFkRegolaPianoFeriePk(LongFilter fkRegolaPianoFeriePk) { + this.fkRegolaPianoFeriePk = fkRegolaPianoFeriePk; + } + + /** + * @return the fkTipoOrganigramma + */ + public LongFilter getFkTipoOrganigramma() { + return this.fkTipoOrganigramma; + } + + /** + * @param fkTipoOrganigramma to set + */ + public void setFkTipoOrganigramma(LongFilter fkTipoOrganigramma) { + this.fkTipoOrganigramma = fkTipoOrganigramma; + } + + /** + * @return the fkUnitaFunzionale + */ + public LongFilter getFkUnitaFunzionale() { + return this.fkUnitaFunzionale; + } + + /** + * @param fkUnitaFunzionale to set + */ + public void setFkUnitaFunzionale(LongFilter fkUnitaFunzionale) { + this.fkUnitaFunzionale = fkUnitaFunzionale; + } + + /** + * @return the fkUnitaOrganizzativaPk + */ + public LongFilter getFkUnitaOrganizzativaPk() { + return this.fkUnitaOrganizzativaPk; + } + + /** + * @param fkUnitaOrganizzativaPk to set + */ + public void setFkUnitaOrganizzativaPk(LongFilter fkUnitaOrganizzativaPk) { + this.fkUnitaOrganizzativaPk = fkUnitaOrganizzativaPk; + } + + /** + * @return the flagEliminato + */ + public StringFilter getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(StringFilter flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the utenteUltimaModifica + */ + public StringFilter getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(StringFilter utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the dataUltimaModifica + */ + public DateFilter getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(DateFilter dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + /** + * @return the dataInizioValidita + */ + public DateFilter getDataInizioValidita() { + return this.dataInizioValidita; + } + + /** + * @param dataInizioValidita to set + */ + public void setDataInizioValidita(DateFilter dataInizioValidita) { + this.dataInizioValidita = dataInizioValidita; + } + + /** + * @return the dataFineValidita + */ + public DateFilter getDataFineValidita() { + return this.dataFineValidita; + } + + /** + * @param dataFineValidita to set + */ + public void setDataFineValidita(DateFilter dataFineValidita) { + this.dataFineValidita = dataFineValidita; + } + + // GETTER/SETTER FATHER + + public String getTheDregolePianiFeriePkObjectKey() { + return theDregolePianiFeriePkObjectKey; + } + + public void setTheDregolePianiFeriePkObjectKey(String theDregolePianiFeriePkObjectKey) { + this.theDregolePianiFeriePkObjectKey = theDregolePianiFeriePkObjectKey; + } + + // GETTER/SETTER IMPORTED FATHER + + // GEN COMPOSITE FILTER + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DregolePianiFeriePkCriteria.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DregolePianiFeriePkCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..aa621d70b9210252a995bdac12f5f32e953d384b --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/criteria/DregolePianiFeriePkCriteria.java @@ -0,0 +1,155 @@ +package it.micegroup.gestioneferie.configurazionepf.criteria; + +import java.io.Serializable; + +import it.micegroup.voila2runtime.filter.LongFilter; +import it.micegroup.voila2runtime.filter.StringFilter; +import it.micegroup.voila2runtime.filter.LocalDateFilter; + +public class DregolePianiFeriePkCriteria implements Serializable { + + // SERIAL UID + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 3289577936L; + + // FILTER ATTRIBUTES + private LongFilter sequIdRegolePianiFeriePk; + + private StringFilter codiRegola; + + private StringFilter descRegola; + + private StringFilter flagEliminato; + + private StringFilter utenteUltimaModifica; + + private LocalDateFilter dataUltimaModifica; + + private LocalDateFilter dataInizioValidita; + + private LocalDateFilter dataFineValidita; + + // FILTER FATHER + + // FILTER IMPORTED FATHER + + // GETTER/SETTER + /** + * @return the sequIdRegolePianiFeriePk + */ + public LongFilter getSequIdRegolePianiFeriePk() { + return this.sequIdRegolePianiFeriePk; + } + + /** + * @param sequIdRegolePianiFeriePk to set + */ + public void setSequIdRegolePianiFeriePk(LongFilter sequIdRegolePianiFeriePk) { + this.sequIdRegolePianiFeriePk = sequIdRegolePianiFeriePk; + } + + /** + * @return the codiRegola + */ + public StringFilter getCodiRegola() { + return this.codiRegola; + } + + /** + * @param codiRegola to set + */ + public void setCodiRegola(StringFilter codiRegola) { + this.codiRegola = codiRegola; + } + + /** + * @return the descRegola + */ + public StringFilter getDescRegola() { + return this.descRegola; + } + + /** + * @param descRegola to set + */ + public void setDescRegola(StringFilter descRegola) { + this.descRegola = descRegola; + } + + /** + * @return the flagEliminato + */ + public StringFilter getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(StringFilter flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the utenteUltimaModifica + */ + public StringFilter getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(StringFilter utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the dataUltimaModifica + */ + public DateFilter getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(DateFilter dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + /** + * @return the dataInizioValidita + */ + public DateFilter getDataInizioValidita() { + return this.dataInizioValidita; + } + + /** + * @param dataInizioValidita to set + */ + public void setDataInizioValidita(DateFilter dataInizioValidita) { + this.dataInizioValidita = dataInizioValidita; + } + + /** + * @return the dataFineValidita + */ + public DateFilter getDataFineValidita() { + return this.dataFineValidita; + } + + /** + * @param dataFineValidita to set + */ + public void setDataFineValidita(DateFilter dataFineValidita) { + this.dataFineValidita = dataFineValidita; + } + + // GETTER/SETTER FATHER + + // GETTER/SETTER IMPORTED FATHER + + // GEN COMPOSITE FILTER + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DconfigPaPfUoH.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DconfigPaPfUoH.java new file mode 100644 index 0000000000000000000000000000000000000000..84a9d22106c01d984e5628da989987a4a37a4762 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DconfigPaPfUoH.java @@ -0,0 +1,414 @@ +package it.micegroup.gestioneferie.configurazionepf.entity; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +import javax.persistence.Id; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.FetchType; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonBackReference; +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; + +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Getter; +import lombok.AllArgsConstructor; + +import javax.persistence.Table; + +import org.apache.commons.lang3.StringUtils; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.hibernate.Hibernate; +import java.util.Objects; + +import it.micegroup.gestioneferie.libs.entity.BaseEntity; +import it.micegroup.voila2runtime.utils.EntityUtils; + +@NoArgsConstructor + +@Getter +@Setter +@Entity +@Table(name = "D_CONFIG_PA_PF_UO_H") +public class DconfigPaPfUoH extends BaseEntity implements Serializable { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 2107839351L; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DconfigPaPfUoH.class); + + // ATTRIBUTES + @Id + + @Column(name = "SEQU_ID_CONFIG_PA_PF_UO_H", columnDefinition = "NUMBER(15)") + private Long sequIdConfigPaPfUoH; + @NotNull + + @Column(name = "FLAG_VALIDO_UO_SUBORDINATE", columnDefinition = "VARCHAR(1)") + private String flagValidoUoSubordinate; + @NotNull + + @Column(name = "FK_CONFIG_PA_PIANO_FERIE", columnDefinition = "NUMBER(15)") + private Long fkConfigPaPianoFerie; + @Column(name = "FK_UNITA_FUNZIONALE", columnDefinition = "NUMBER(15)") + private Long fkUnitaFunzionale; + @Column(name = "FK_UNITA_ORGANIZZATIVA_PK", columnDefinition = "NUMBER(15)") + private Long fkUnitaOrganizzativaPk; + @NotNull + + @Column(name = "UTENTE_ULTIMA_MODIFICA", columnDefinition = "VARCHAR(50)") + private String utenteUltimaModifica; + @NotNull + + @Column(name = "FLAG_ELIMINATO", columnDefinition = "VARCHAR(1)") + private String flagEliminato; + @NotNull + + @Column(name = "DATA_INIZIO_VALIDITA", columnDefinition = "DATE") + private Date dataInizioValidita; + @NotNull + + @Column(name = "DATA_FINE_VALIDITA", columnDefinition = "DATE") + private Date dataFineValidita; + @NotNull + + @Column(name = "DATA_ULTIMA_MODIFICA", columnDefinition = "DATE") + private Date dataUltimaModifica; + + // IMPORTED PARENTS + + // CONSTRUCTORS + public DconfigPaPfUoH(String objectKey) { + super(); + setObjectKey(objectKey); + } + + public DconfigPaPfUoH(String flagValidoUoSubordinate, Long fkConfigPaPianoFerie, Long fkUnitaFunzionale, + Long fkUnitaOrganizzativaPk, String utenteUltimaModifica, String flagEliminato, Date dataInizioValidita, + Date dataFineValidita, Date dataUltimaModifica, Long sequIdConfigPaPfUoH) { + super(); + + this.flagValidoUoSubordinate = flagValidoUoSubordinate; + this.fkConfigPaPianoFerie = fkConfigPaPianoFerie; + this.fkUnitaFunzionale = fkUnitaFunzionale; + this.fkUnitaOrganizzativaPk = fkUnitaOrganizzativaPk; + this.utenteUltimaModifica = utenteUltimaModifica; + this.flagEliminato = flagEliminato; + this.dataInizioValidita = dataInizioValidita; + this.dataFineValidita = dataFineValidita; + this.dataUltimaModifica = dataUltimaModifica; + this.sequIdConfigPaPfUoH = sequIdConfigPaPfUoH; + } + + // CHILDREN + + // PARENTS + @NotNull + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "FK_CONFIG_PA_PIANO_FERIE", referencedColumnName = "SEQU_ID_CONFIG_PA_PIANO_FERIE", nullable = false) + @JsonBackReference("theDconfigPaPianiFerie") + @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" }, allowSetters = true) + private DconfigPaPianiFerie theDconfigPaPianiFerie; + + // GETTER/SETTER + /** + * @return the sequIdConfigPaPfUoH + */ + public Long getSequIdConfigPaPfUoH() { + return this.sequIdConfigPaPfUoH; + } + + /** + * @param sequIdConfigPaPfUoH to set + */ + public void setSequIdConfigPaPfUoH(Long sequIdConfigPaPfUoH) { + this.sequIdConfigPaPfUoH = sequIdConfigPaPfUoH; + } + + /** + * @return the flagValidoUoSubordinate + */ + public String getFlagValidoUoSubordinate() { + return this.flagValidoUoSubordinate; + } + + /** + * @param flagValidoUoSubordinate to set + */ + public void setFlagValidoUoSubordinate(String flagValidoUoSubordinate) { + this.flagValidoUoSubordinate = flagValidoUoSubordinate; + } + + /** + * @return the fkConfigPaPianoFerie + */ + public Long getFkConfigPaPianoFerie() { + return this.fkConfigPaPianoFerie; + } + + /** + * @param fkConfigPaPianoFerie to set + */ + public void setFkConfigPaPianoFerie(Long fkConfigPaPianoFerie) { + this.fkConfigPaPianoFerie = fkConfigPaPianoFerie; + } + + /** + * @return the fkUnitaFunzionale + */ + public Long getFkUnitaFunzionale() { + return this.fkUnitaFunzionale; + } + + /** + * @param fkUnitaFunzionale to set + */ + public void setFkUnitaFunzionale(Long fkUnitaFunzionale) { + this.fkUnitaFunzionale = fkUnitaFunzionale; + } + + /** + * @return the fkUnitaOrganizzativaPk + */ + public Long getFkUnitaOrganizzativaPk() { + return this.fkUnitaOrganizzativaPk; + } + + /** + * @param fkUnitaOrganizzativaPk to set + */ + public void setFkUnitaOrganizzativaPk(Long fkUnitaOrganizzativaPk) { + this.fkUnitaOrganizzativaPk = fkUnitaOrganizzativaPk; + } + + /** + * @return the utenteUltimaModifica + */ + public String getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(String utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the flagEliminato + */ + public String getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(String flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the dataInizioValidita + */ + public Date getDataInizioValidita() { + return this.dataInizioValidita; + } + + /** + * @param dataInizioValidita to set + */ + public void setDataInizioValidita(Date dataInizioValidita) { + this.dataInizioValidita = dataInizioValidita; + } + + /** + * @return the dataFineValidita + */ + public Date getDataFineValidita() { + return this.dataFineValidita; + } + + /** + * @param dataFineValidita to set + */ + public void setDataFineValidita(Date dataFineValidita) { + this.dataFineValidita = dataFineValidita; + } + + /** + * @return the dataUltimaModifica + */ + public Date getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(Date dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + // CHILD GETTER/SETTER + + /// ADD CHILD + + // PARENT GETTER/SETTER + /** + * @return the DconfigPaPianiFerie + */ + @JsonProperty(access = Access.WRITE_ONLY) + public DconfigPaPianiFerie getTheDconfigPaPianiFerie() { + return theDconfigPaPianiFerie; + } + + /** + * @param aDconfigPaPianiFerieList to set + */ + public void setTheDconfigPaPianiFerie(DconfigPaPianiFerie aDconfigPaPianiFerie) { + theDconfigPaPianiFerie = aDconfigPaPianiFerie; + } + + // PARENT ID GETTER/SETTER + /** + * Return the sequIdConfigPaPianoFerie from theDconfigPaPianiFerie. + * + * @return sequIdConfigPaPianoFerie from theDconfigPaPianiFerie. + */ + @JsonProperty + public Long getSequIdConfigPaPianoFerie() { + // If the parent entity object is null, then return null + if (getTheDconfigPaPianiFerie() == null) { + return null; + } + // Return requested attribute + return theDconfigPaPianiFerie.getSequIdConfigPaPianoFerie(); + } + + // PARENT OBJECT TITLE + /** + * Return the object title of theDconfigPaPianiFerie. + * + * @return the object title of theDconfigPaPianiFerie. + */ + @JsonProperty + public String getTheDconfigPaPianiFerieObjectTitle() { + return getTheDconfigPaPianiFerie() != null ? getTheDconfigPaPianiFerie().getObjectTitle() : null; + } + + // PARENT OBJECT KEY + /** + * Return the object key of theDconfigPaPianiFerie. + * + * @return the object key of theDconfigPaPianiFerie. + */ + @JsonProperty + public String getTheDconfigPaPianiFerieObjectKey() { + return getTheDconfigPaPianiFerie() != null ? getTheDconfigPaPianiFerie().getObjectKey() : null; + } + + /** + * Set object key of theDconfigPaPianiFerie. + * + */ + @JsonProperty + public void setTheDconfigPaPianiFerieObjectKey(String objectKey) { + if (EntityUtils.isValueChanged(getTheDconfigPaPianiFerieObjectKey(), objectKey, false)) { + DconfigPaPianiFerie dconfigPaPianiFerie = new DconfigPaPianiFerie(); + dconfigPaPianiFerie.setObjectKey(objectKey); + setTheDconfigPaPianiFerie(dconfigPaPianiFerie); + } + } + + // IMPORTED PARENT OBJECT KEY + + // OPERATIONS + + // OBJECT KEY + /** + * Restituisce l'identificativo della chiave in formato stringa. Ritorna + * conveniente nelle selezioni da lista. + * + * @return L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public String getObjectKey() { + return getObjectKeyById(getSequIdConfigPaPfUoH()); + } + + public String getObjectKeyById(Long identification) { + if (identification == null) { + return null; + } + StringBuilder output = new StringBuilder(); + output.append(identification); + return output.toString(); + } + + /** + * Inizializza la parte identificativa del bean in base alla stringa tokenizzata + * da "||" fornita in input. + * + * @param key L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public void setObjectKey(String key) { + if (key == null || key.trim().length() == 0) { + return; + } + String[] array = StringUtils.splitByWholeSeparatorPreserveAllTokens(key, getRowIdFieldDelimiter()); + int ctr = 0; + + setSequIdConfigPaPfUoH(getLongCheckedAgainstNullContent(array[ctr])); + } + + // OBJECT TITLE + public String getObjectTitle() { + StringBuilder output = new StringBuilder(); + output.append(getFlagValidoUoSubordinate()); + return output.toString(); + } + + // PREPERSIST + + @PrePersist + public void prePersist() { + } + + @PreUpdate + public void PreUpdate() { + } + + // Equals / HashCode + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) + return false; + DconfigPaPfUoH that = (DconfigPaPfUoH) o; + return sequIdConfigPaPfUoH != null && Objects.equals(sequIdConfigPaPfUoH, that.sequIdConfigPaPfUoH); + } + + @Override + public int hashCode() { + return Objects.hash(sequIdConfigPaPfUoH); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DconfigPaPianiFerie.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DconfigPaPianiFerie.java new file mode 100644 index 0000000000000000000000000000000000000000..a5daa7188758d5e171ee454fa455de9489a7fa9c --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DconfigPaPianiFerie.java @@ -0,0 +1,397 @@ +package it.micegroup.gestioneferie.configurazionepf.entity; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +import javax.persistence.Id; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import java.util.Collection; +import java.util.ArrayList; +import javax.persistence.OneToMany; +import javax.persistence.CascadeType; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import lombok.ToString; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; + +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Getter; +import lombok.AllArgsConstructor; + +import javax.persistence.Table; + +import org.apache.commons.lang3.StringUtils; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.hibernate.Hibernate; +import java.util.Objects; + +import it.micegroup.gestioneferie.libs.entity.BaseEntity; +import it.micegroup.voila2runtime.utils.EntityUtils; + +@NoArgsConstructor + +@Getter +@Setter +@Entity +@Table(name = "D_CONFIG_PA_PIANI_FERIE") +public class DconfigPaPianiFerie extends BaseEntity implements Serializable { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 1237557078L; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DconfigPaPianiFerie.class); + + // ATTRIBUTES + @Id + + @Column(name = "SEQU_ID_CONFIG_PA_PIANO_FERIE", columnDefinition = "NUMBER(15)") + private Long sequIdConfigPaPianoFerie; + @NotNull + + @Column(name = "CODI_CONFIG_PA_PIANO_FERIE", columnDefinition = "VARCHAR(50)") + private String codiConfigPaPianoFerie; + @NotNull + + @Column(name = "DESC_CONFIG_PA_PIANO_FERIE", columnDefinition = "VARCHAR(250)") + private String descConfigPaPianoFerie; + @NotNull + + @Column(name = "FK_AMMINISTRAZIONE_PK", columnDefinition = "NUMBER(15)") + private Long fkAmministrazionePk; + @NotNull + + @Column(name = "FK_TIPO_ORGANIGRAMMA", columnDefinition = "NUMBER(15)") + private Long fkTipoOrganigramma; + @NotNull + + @Column(name = "DATA_ULTIMA_MODIFICA", columnDefinition = "DATE") + private Date dataUltimaModifica; + @NotNull + + @Column(name = "UTENTE_ULTIMA_MODIFICA", columnDefinition = "VARCHAR(50)") + private String utenteUltimaModifica; + @NotNull + + @Column(name = "FLAG_ELIMINATO", columnDefinition = "VARCHAR(1)") + private String flagEliminato; + @NotNull + + @Column(name = "DATA_INIZIO_RECORD", columnDefinition = "DATE") + private Date dataInizioRecord; + @NotNull + + @Column(name = "DATA_FINE_RECORD", columnDefinition = "DATE") + private Date dataFineRecord; + + // IMPORTED PARENTS + + // CONSTRUCTORS + public DconfigPaPianiFerie(String objectKey) { + super(); + setObjectKey(objectKey); + } + + public DconfigPaPianiFerie(String codiConfigPaPianoFerie, String descConfigPaPianoFerie, Long fkAmministrazionePk, + Long fkTipoOrganigramma, Date dataUltimaModifica, String utenteUltimaModifica, String flagEliminato, + Date dataInizioRecord, Date dataFineRecord, Long sequIdConfigPaPianoFerie) { + super(); + + this.codiConfigPaPianoFerie = codiConfigPaPianoFerie; + this.descConfigPaPianoFerie = descConfigPaPianoFerie; + this.fkAmministrazionePk = fkAmministrazionePk; + this.fkTipoOrganigramma = fkTipoOrganigramma; + this.dataUltimaModifica = dataUltimaModifica; + this.utenteUltimaModifica = utenteUltimaModifica; + this.flagEliminato = flagEliminato; + this.dataInizioRecord = dataInizioRecord; + this.dataFineRecord = dataFineRecord; + this.sequIdConfigPaPianoFerie = sequIdConfigPaPianoFerie; + } + + // CHILDREN + @JsonProperty(access = Access.WRITE_ONLY) + @JsonManagedReference("theDconfigPaPianiFerie") + @OneToMany(mappedBy = "theDconfigPaPianiFerie", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ToString.Exclude + private Collection theDpercAutPianFerieH = new ArrayList<>(); + + @JsonProperty(access = Access.WRITE_ONLY) + @JsonManagedReference("theDconfigPaPianiFerie") + @OneToMany(mappedBy = "theDconfigPaPianiFerie", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ToString.Exclude + private Collection theDconfigPaPfUoH = new ArrayList<>(); + + // PARENTS + + // GETTER/SETTER + /** + * @return the sequIdConfigPaPianoFerie + */ + public Long getSequIdConfigPaPianoFerie() { + return this.sequIdConfigPaPianoFerie; + } + + /** + * @param sequIdConfigPaPianoFerie to set + */ + public void setSequIdConfigPaPianoFerie(Long sequIdConfigPaPianoFerie) { + this.sequIdConfigPaPianoFerie = sequIdConfigPaPianoFerie; + } + + /** + * @return the codiConfigPaPianoFerie + */ + public String getCodiConfigPaPianoFerie() { + return this.codiConfigPaPianoFerie; + } + + /** + * @param codiConfigPaPianoFerie to set + */ + public void setCodiConfigPaPianoFerie(String codiConfigPaPianoFerie) { + this.codiConfigPaPianoFerie = codiConfigPaPianoFerie; + } + + /** + * @return the descConfigPaPianoFerie + */ + public String getDescConfigPaPianoFerie() { + return this.descConfigPaPianoFerie; + } + + /** + * @param descConfigPaPianoFerie to set + */ + public void setDescConfigPaPianoFerie(String descConfigPaPianoFerie) { + this.descConfigPaPianoFerie = descConfigPaPianoFerie; + } + + /** + * @return the fkAmministrazionePk + */ + public Long getFkAmministrazionePk() { + return this.fkAmministrazionePk; + } + + /** + * @param fkAmministrazionePk to set + */ + public void setFkAmministrazionePk(Long fkAmministrazionePk) { + this.fkAmministrazionePk = fkAmministrazionePk; + } + + /** + * @return the fkTipoOrganigramma + */ + public Long getFkTipoOrganigramma() { + return this.fkTipoOrganigramma; + } + + /** + * @param fkTipoOrganigramma to set + */ + public void setFkTipoOrganigramma(Long fkTipoOrganigramma) { + this.fkTipoOrganigramma = fkTipoOrganigramma; + } + + /** + * @return the dataUltimaModifica + */ + public Date getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(Date dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + /** + * @return the utenteUltimaModifica + */ + public String getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(String utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the flagEliminato + */ + public String getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(String flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the dataInizioRecord + */ + public Date getDataInizioRecord() { + return this.dataInizioRecord; + } + + /** + * @param dataInizioRecord to set + */ + public void setDataInizioRecord(Date dataInizioRecord) { + this.dataInizioRecord = dataInizioRecord; + } + + /** + * @return the dataFineRecord + */ + public Date getDataFineRecord() { + return this.dataFineRecord; + } + + /** + * @param dataFineRecord to set + */ + public void setDataFineRecord(Date dataFineRecord) { + this.dataFineRecord = dataFineRecord; + } + + // CHILD GETTER/SETTER + /** + * @return the DpercAutPianFerieH + */ + public Collection getTheDpercAutPianFerieH() { + return theDpercAutPianFerieH; + } + + /** + * @param aDpercAutPianFerieHList to set + */ + public void setTheDpercAutPianFerieH(Collection aDpercAutPianFerieHList) { + theDpercAutPianFerieH = aDpercAutPianFerieHList; + } + + /** + * @return the DconfigPaPfUoH + */ + public Collection getTheDconfigPaPfUoH() { + return theDconfigPaPfUoH; + } + + /** + * @param aDconfigPaPfUoHList to set + */ + public void setTheDconfigPaPfUoH(Collection aDconfigPaPfUoHList) { + theDconfigPaPfUoH = aDconfigPaPfUoHList; + } + + /// ADD CHILD + public void addDpercAutPianFerieH(DpercAutPianFerieH dpercAutPianFerieH) { + theDpercAutPianFerieH.add(dpercAutPianFerieH); + } + + public void addDconfigPaPfUoH(DconfigPaPfUoH dconfigPaPfUoH) { + theDconfigPaPfUoH.add(dconfigPaPfUoH); + } + + // PARENT GETTER/SETTER + + // PARENT ID GETTER/SETTER + + // PARENT OBJECT TITLE + + // PARENT OBJECT KEY + + // IMPORTED PARENT OBJECT KEY + + // OPERATIONS + + // OBJECT KEY + /** + * Restituisce l'identificativo della chiave in formato stringa. Ritorna + * conveniente nelle selezioni da lista. + * + * @return L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public String getObjectKey() { + return getObjectKeyById(getSequIdConfigPaPianoFerie()); + } + + public String getObjectKeyById(Long identification) { + if (identification == null) { + return null; + } + StringBuilder output = new StringBuilder(); + output.append(identification); + return output.toString(); + } + + /** + * Inizializza la parte identificativa del bean in base alla stringa tokenizzata + * da "||" fornita in input. + * + * @param key L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public void setObjectKey(String key) { + if (key == null || key.trim().length() == 0) { + return; + } + String[] array = StringUtils.splitByWholeSeparatorPreserveAllTokens(key, getRowIdFieldDelimiter()); + int ctr = 0; + + setSequIdConfigPaPianoFerie(getLongCheckedAgainstNullContent(array[ctr])); + } + + // OBJECT TITLE + public String getObjectTitle() { + StringBuilder output = new StringBuilder(); + output.append(getCodiConfigPaPianoFerie()); + return output.toString(); + } + + // PREPERSIST + + @PrePersist + public void prePersist() { + } + + @PreUpdate + public void PreUpdate() { + } + + // Equals / HashCode + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) + return false; + DconfigPaPianiFerie that = (DconfigPaPianiFerie) o; + return sequIdConfigPaPianoFerie != null + && Objects.equals(sequIdConfigPaPianoFerie, that.sequIdConfigPaPianoFerie); + } + + @Override + public int hashCode() { + return Objects.hash(sequIdConfigPaPianoFerie); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DpercAutPianFerieH.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DpercAutPianFerieH.java new file mode 100644 index 0000000000000000000000000000000000000000..e34ca85f7f9a0b62c17390c23d9778dd8a148f7c --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DpercAutPianFerieH.java @@ -0,0 +1,468 @@ +package it.micegroup.gestioneferie.configurazionepf.entity; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +import javax.persistence.Id; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.FetchType; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonBackReference; +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; + +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Getter; +import lombok.AllArgsConstructor; + +import javax.persistence.Table; + +import org.apache.commons.lang3.StringUtils; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.hibernate.Hibernate; +import java.util.Objects; + +import it.micegroup.gestioneferie.libs.entity.BaseEntity; +import it.micegroup.voila2runtime.utils.EntityUtils; + +@NoArgsConstructor + +@Getter +@Setter +@Entity +@Table(name = "D_PERC_AUT_PIAN_FERIE_H") +public class DpercAutPianFerieH extends BaseEntity implements Serializable { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 2997153128L; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DpercAutPianFerieH.class); + + // ATTRIBUTES + @Id + + @Column(name = "SEQU_ID_PERC_AUT_PIAN_FERIE_H", columnDefinition = "NUMBER(15)") + private Long sequIdPercAutPianFerieH; + @NotNull + + @Column(name = "FK_CONFIG_PA_PIANO_FERIE", columnDefinition = "NUMBER(15)") + private Long fkConfigPaPianoFerie; + @NotNull + + @Column(name = "FK_PERCORSO", columnDefinition = "NUMBER(15)") + private Long fkPercorso; + @NotNull + + @Column(name = "FK_PERC_AUT_PIAN_FERIE_PK", columnDefinition = "NUMBER(15)") + private Long fkPercAutPianFeriePk; + @NotNull + + @Column(name = "DATA_ULTIMA_MODIFICA", columnDefinition = "DATE") + private Date dataUltimaModifica; + @NotNull + + @Column(name = "DATA_FINE_VALIDITA", columnDefinition = "DATE") + private Date dataFineValidita; + @NotNull + + @Column(name = "DATA_INIZIO_VALIDITA", columnDefinition = "DATE") + private Date dataInizioValidita; + @NotNull + + @Column(name = "UTENTE_ULTIMA_MODIFICA", columnDefinition = "VARCHAR(50)") + private String utenteUltimaModifica; + @NotNull + + @Column(name = "FLAG_ELIMINATO", columnDefinition = "VARCHAR(1)") + private String flagEliminato; + + // IMPORTED PARENTS + + // CONSTRUCTORS + public DpercAutPianFerieH(String objectKey) { + super(); + setObjectKey(objectKey); + } + + public DpercAutPianFerieH(Long fkConfigPaPianoFerie, Long fkPercorso, Long fkPercAutPianFeriePk, + Date dataUltimaModifica, Date dataFineValidita, Date dataInizioValidita, String utenteUltimaModifica, + String flagEliminato, Long sequIdPercAutPianFerieH) { + super(); + + this.fkConfigPaPianoFerie = fkConfigPaPianoFerie; + this.fkPercorso = fkPercorso; + this.fkPercAutPianFeriePk = fkPercAutPianFeriePk; + this.dataUltimaModifica = dataUltimaModifica; + this.dataFineValidita = dataFineValidita; + this.dataInizioValidita = dataInizioValidita; + this.utenteUltimaModifica = utenteUltimaModifica; + this.flagEliminato = flagEliminato; + this.sequIdPercAutPianFerieH = sequIdPercAutPianFerieH; + } + + // CHILDREN + + // PARENTS + @NotNull + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "FK_PERC_AUT_PIAN_FERIE_PK", referencedColumnName = "SEQU_ID_PERC_AUT_PIAN_FERIE_PK", nullable = false) + @JsonBackReference("theDpercAutPianFeriePk") + @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" }, allowSetters = true) + private DpercAutPianFeriePk theDpercAutPianFeriePk; + @NotNull + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "FK_CONFIG_PA_PIANO_FERIE", referencedColumnName = "SEQU_ID_CONFIG_PA_PIANO_FERIE", nullable = false) + @JsonBackReference("theDconfigPaPianiFerie") + @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" }, allowSetters = true) + private DconfigPaPianiFerie theDconfigPaPianiFerie; + + // GETTER/SETTER + /** + * @return the sequIdPercAutPianFerieH + */ + public Long getSequIdPercAutPianFerieH() { + return this.sequIdPercAutPianFerieH; + } + + /** + * @param sequIdPercAutPianFerieH to set + */ + public void setSequIdPercAutPianFerieH(Long sequIdPercAutPianFerieH) { + this.sequIdPercAutPianFerieH = sequIdPercAutPianFerieH; + } + + /** + * @return the fkConfigPaPianoFerie + */ + public Long getFkConfigPaPianoFerie() { + return this.fkConfigPaPianoFerie; + } + + /** + * @param fkConfigPaPianoFerie to set + */ + public void setFkConfigPaPianoFerie(Long fkConfigPaPianoFerie) { + this.fkConfigPaPianoFerie = fkConfigPaPianoFerie; + } + + /** + * @return the fkPercorso + */ + public Long getFkPercorso() { + return this.fkPercorso; + } + + /** + * @param fkPercorso to set + */ + public void setFkPercorso(Long fkPercorso) { + this.fkPercorso = fkPercorso; + } + + /** + * @return the fkPercAutPianFeriePk + */ + public Long getFkPercAutPianFeriePk() { + return this.fkPercAutPianFeriePk; + } + + /** + * @param fkPercAutPianFeriePk to set + */ + public void setFkPercAutPianFeriePk(Long fkPercAutPianFeriePk) { + this.fkPercAutPianFeriePk = fkPercAutPianFeriePk; + } + + /** + * @return the dataUltimaModifica + */ + public Date getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(Date dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + /** + * @return the dataFineValidita + */ + public Date getDataFineValidita() { + return this.dataFineValidita; + } + + /** + * @param dataFineValidita to set + */ + public void setDataFineValidita(Date dataFineValidita) { + this.dataFineValidita = dataFineValidita; + } + + /** + * @return the dataInizioValidita + */ + public Date getDataInizioValidita() { + return this.dataInizioValidita; + } + + /** + * @param dataInizioValidita to set + */ + public void setDataInizioValidita(Date dataInizioValidita) { + this.dataInizioValidita = dataInizioValidita; + } + + /** + * @return the utenteUltimaModifica + */ + public String getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(String utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the flagEliminato + */ + public String getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(String flagEliminato) { + this.flagEliminato = flagEliminato; + } + + // CHILD GETTER/SETTER + + /// ADD CHILD + + // PARENT GETTER/SETTER + /** + * @return the DpercAutPianFeriePk + */ + @JsonProperty(access = Access.WRITE_ONLY) + public DpercAutPianFeriePk getTheDpercAutPianFeriePk() { + return theDpercAutPianFeriePk; + } + + /** + * @param aDpercAutPianFeriePkList to set + */ + public void setTheDpercAutPianFeriePk(DpercAutPianFeriePk aDpercAutPianFeriePk) { + theDpercAutPianFeriePk = aDpercAutPianFeriePk; + } + + /** + * @return the DconfigPaPianiFerie + */ + @JsonProperty(access = Access.WRITE_ONLY) + public DconfigPaPianiFerie getTheDconfigPaPianiFerie() { + return theDconfigPaPianiFerie; + } + + /** + * @param aDconfigPaPianiFerieList to set + */ + public void setTheDconfigPaPianiFerie(DconfigPaPianiFerie aDconfigPaPianiFerie) { + theDconfigPaPianiFerie = aDconfigPaPianiFerie; + } + + // PARENT ID GETTER/SETTER + /** + * Return the sequIdPercAutPianFeriePk from theDpercAutPianFeriePk. + * + * @return sequIdPercAutPianFeriePk from theDpercAutPianFeriePk. + */ + @JsonProperty + public Long getSequIdPercAutPianFeriePk() { + // If the parent entity object is null, then return null + if (getTheDpercAutPianFeriePk() == null) { + return null; + } + // Return requested attribute + return theDpercAutPianFeriePk.getSequIdPercAutPianFeriePk(); + } + + /** + * Return the sequIdConfigPaPianoFerie from theDconfigPaPianiFerie. + * + * @return sequIdConfigPaPianoFerie from theDconfigPaPianiFerie. + */ + @JsonProperty + public Long getSequIdConfigPaPianoFerie() { + // If the parent entity object is null, then return null + if (getTheDconfigPaPianiFerie() == null) { + return null; + } + // Return requested attribute + return theDconfigPaPianiFerie.getSequIdConfigPaPianoFerie(); + } + + // PARENT OBJECT TITLE + /** + * Return the object title of theDpercAutPianFeriePk. + * + * @return the object title of theDpercAutPianFeriePk. + */ + @JsonProperty + public String getTheDpercAutPianFeriePkObjectTitle() { + return getTheDpercAutPianFeriePk() != null ? getTheDpercAutPianFeriePk().getObjectTitle() : null; + } + + /** + * Return the object title of theDconfigPaPianiFerie. + * + * @return the object title of theDconfigPaPianiFerie. + */ + @JsonProperty + public String getTheDconfigPaPianiFerieObjectTitle() { + return getTheDconfigPaPianiFerie() != null ? getTheDconfigPaPianiFerie().getObjectTitle() : null; + } + + // PARENT OBJECT KEY + /** + * Return the object key of theDpercAutPianFeriePk. + * + * @return the object key of theDpercAutPianFeriePk. + */ + @JsonProperty + public String getTheDpercAutPianFeriePkObjectKey() { + return getTheDpercAutPianFeriePk() != null ? getTheDpercAutPianFeriePk().getObjectKey() : null; + } + + /** + * Set object key of theDpercAutPianFeriePk. + * + */ + @JsonProperty + public void setTheDpercAutPianFeriePkObjectKey(String objectKey) { + if (EntityUtils.isValueChanged(getTheDpercAutPianFeriePkObjectKey(), objectKey, false)) { + DpercAutPianFeriePk dpercAutPianFeriePk = new DpercAutPianFeriePk(); + dpercAutPianFeriePk.setObjectKey(objectKey); + setTheDpercAutPianFeriePk(dpercAutPianFeriePk); + } + } + + /** + * Return the object key of theDconfigPaPianiFerie. + * + * @return the object key of theDconfigPaPianiFerie. + */ + @JsonProperty + public String getTheDconfigPaPianiFerieObjectKey() { + return getTheDconfigPaPianiFerie() != null ? getTheDconfigPaPianiFerie().getObjectKey() : null; + } + + /** + * Set object key of theDconfigPaPianiFerie. + * + */ + @JsonProperty + public void setTheDconfigPaPianiFerieObjectKey(String objectKey) { + if (EntityUtils.isValueChanged(getTheDconfigPaPianiFerieObjectKey(), objectKey, false)) { + DconfigPaPianiFerie dconfigPaPianiFerie = new DconfigPaPianiFerie(); + dconfigPaPianiFerie.setObjectKey(objectKey); + setTheDconfigPaPianiFerie(dconfigPaPianiFerie); + } + } + + // IMPORTED PARENT OBJECT KEY + + // OPERATIONS + + // OBJECT KEY + /** + * Restituisce l'identificativo della chiave in formato stringa. Ritorna + * conveniente nelle selezioni da lista. + * + * @return L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public String getObjectKey() { + return getObjectKeyById(getSequIdPercAutPianFerieH()); + } + + public String getObjectKeyById(Long identification) { + if (identification == null) { + return null; + } + StringBuilder output = new StringBuilder(); + output.append(identification); + return output.toString(); + } + + /** + * Inizializza la parte identificativa del bean in base alla stringa tokenizzata + * da "||" fornita in input. + * + * @param key L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public void setObjectKey(String key) { + if (key == null || key.trim().length() == 0) { + return; + } + String[] array = StringUtils.splitByWholeSeparatorPreserveAllTokens(key, getRowIdFieldDelimiter()); + int ctr = 0; + + setSequIdPercAutPianFerieH(getLongCheckedAgainstNullContent(array[ctr])); + } + + // OBJECT TITLE + public String getObjectTitle() { + StringBuilder output = new StringBuilder(); + output.append(getUtenteUltimaModifica()); + return output.toString(); + } + + // PREPERSIST + + @PrePersist + public void prePersist() { + } + + @PreUpdate + public void PreUpdate() { + } + + // Equals / HashCode + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) + return false; + DpercAutPianFerieH that = (DpercAutPianFerieH) o; + return sequIdPercAutPianFerieH != null && Objects.equals(sequIdPercAutPianFerieH, that.sequIdPercAutPianFerieH); + } + + @Override + public int hashCode() { + return Objects.hash(sequIdPercAutPianFerieH); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DpercAutPianFeriePk.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DpercAutPianFeriePk.java new file mode 100644 index 0000000000000000000000000000000000000000..f472e89defa70bd0e51398e092910e6ebbdfe7cc --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DpercAutPianFeriePk.java @@ -0,0 +1,258 @@ +package it.micegroup.gestioneferie.configurazionepf.entity; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +import javax.persistence.Id; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import java.util.Collection; +import java.util.ArrayList; +import javax.persistence.OneToMany; +import javax.persistence.CascadeType; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import lombok.ToString; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; + +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Getter; +import lombok.AllArgsConstructor; + +import javax.persistence.Table; + +import org.apache.commons.lang3.StringUtils; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.hibernate.Hibernate; +import java.util.Objects; + +import it.micegroup.gestioneferie.libs.entity.BaseEntity; +import it.micegroup.voila2runtime.utils.EntityUtils; + +@NoArgsConstructor + +@Getter +@Setter +@Entity +@Table(name = "D_PERC_AUT_PIAN_FERIE_PK") +public class DpercAutPianFeriePk extends BaseEntity implements Serializable { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 887071405L; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DpercAutPianFeriePk.class); + + // ATTRIBUTES + @Id + + @Column(name = "SEQU_ID_PERC_AUT_PIAN_FERIE_PK", columnDefinition = "NUMBER(15)") + private Long sequIdPercAutPianFeriePk; + @NotNull + + @Column(name = "FLAG_ELIMINATO", columnDefinition = "VARCHAR(1)") + private String flagEliminato; + @NotNull + + @Column(name = "UTENTE_ULTIMA_MODIFICA", columnDefinition = "VARCHAR(50)") + private String utenteUltimaModifica; + @NotNull + + @Column(name = "DATA_ULTIMA_MODIFICA", columnDefinition = "DATE") + private Date dataUltimaModifica; + + // IMPORTED PARENTS + + // CONSTRUCTORS + public DpercAutPianFeriePk(String objectKey) { + super(); + setObjectKey(objectKey); + } + + public DpercAutPianFeriePk(String flagEliminato, String utenteUltimaModifica, Date dataUltimaModifica, + Long sequIdPercAutPianFeriePk) { + super(); + + this.flagEliminato = flagEliminato; + this.utenteUltimaModifica = utenteUltimaModifica; + this.dataUltimaModifica = dataUltimaModifica; + this.sequIdPercAutPianFeriePk = sequIdPercAutPianFeriePk; + } + + // CHILDREN + @JsonProperty(access = Access.WRITE_ONLY) + @JsonManagedReference("theDpercAutPianFeriePk") + @OneToMany(mappedBy = "theDpercAutPianFeriePk", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ToString.Exclude + private Collection theDpercAutPianFerieH = new ArrayList<>(); + + // PARENTS + + // GETTER/SETTER + /** + * @return the sequIdPercAutPianFeriePk + */ + public Long getSequIdPercAutPianFeriePk() { + return this.sequIdPercAutPianFeriePk; + } + + /** + * @param sequIdPercAutPianFeriePk to set + */ + public void setSequIdPercAutPianFeriePk(Long sequIdPercAutPianFeriePk) { + this.sequIdPercAutPianFeriePk = sequIdPercAutPianFeriePk; + } + + /** + * @return the flagEliminato + */ + public String getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(String flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the utenteUltimaModifica + */ + public String getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(String utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the dataUltimaModifica + */ + public Date getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(Date dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + // CHILD GETTER/SETTER + /** + * @return the DpercAutPianFerieH + */ + public Collection getTheDpercAutPianFerieH() { + return theDpercAutPianFerieH; + } + + /** + * @param aDpercAutPianFerieHList to set + */ + public void setTheDpercAutPianFerieH(Collection aDpercAutPianFerieHList) { + theDpercAutPianFerieH = aDpercAutPianFerieHList; + } + + /// ADD CHILD + public void addDpercAutPianFerieH(DpercAutPianFerieH dpercAutPianFerieH) { + theDpercAutPianFerieH.add(dpercAutPianFerieH); + } + + // PARENT GETTER/SETTER + + // PARENT ID GETTER/SETTER + + // PARENT OBJECT TITLE + + // PARENT OBJECT KEY + + // IMPORTED PARENT OBJECT KEY + + // OPERATIONS + + // OBJECT KEY + /** + * Restituisce l'identificativo della chiave in formato stringa. Ritorna + * conveniente nelle selezioni da lista. + * + * @return L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public String getObjectKey() { + return getObjectKeyById(getSequIdPercAutPianFeriePk()); + } + + public String getObjectKeyById(Long identification) { + if (identification == null) { + return null; + } + StringBuilder output = new StringBuilder(); + output.append(identification); + return output.toString(); + } + + /** + * Inizializza la parte identificativa del bean in base alla stringa tokenizzata + * da "||" fornita in input. + * + * @param key L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public void setObjectKey(String key) { + if (key == null || key.trim().length() == 0) { + return; + } + String[] array = StringUtils.splitByWholeSeparatorPreserveAllTokens(key, getRowIdFieldDelimiter()); + int ctr = 0; + + setSequIdPercAutPianFeriePk(getLongCheckedAgainstNullContent(array[ctr])); + } + + // OBJECT TITLE + public String getObjectTitle() { + StringBuilder output = new StringBuilder(); + output.append(getFlagEliminato()); + return output.toString(); + } + + // PREPERSIST + + @PrePersist + public void prePersist() { + } + + @PreUpdate + public void PreUpdate() { + } + + // Equals / HashCode + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) + return false; + DpercAutPianFeriePk that = (DpercAutPianFeriePk) o; + return sequIdPercAutPianFeriePk != null + && Objects.equals(sequIdPercAutPianFeriePk, that.sequIdPercAutPianFeriePk); + } + + @Override + public int hashCode() { + return Objects.hash(sequIdPercAutPianFeriePk); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DregolePianiFerieH.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DregolePianiFerieH.java new file mode 100644 index 0000000000000000000000000000000000000000..5b8f10938168a516a0f1560ada6620fffd213957 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DregolePianiFerieH.java @@ -0,0 +1,510 @@ +package it.micegroup.gestioneferie.configurazionepf.entity; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +import javax.persistence.Id; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +import javax.persistence.FetchType; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonBackReference; +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; + +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Getter; +import lombok.AllArgsConstructor; + +import javax.persistence.Table; + +import org.apache.commons.lang3.StringUtils; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.hibernate.Hibernate; +import java.util.Objects; + +import it.micegroup.gestioneferie.libs.entity.BaseEntity; +import it.micegroup.voila2runtime.utils.EntityUtils; + +@NoArgsConstructor + +@Getter +@Setter +@Entity +@Table(name = "D_REGOLE_PIANI_FERIE_H") +public class DregolePianiFerieH extends BaseEntity implements Serializable { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 976188501L; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DregolePianiFerieH.class); + + // ATTRIBUTES + @Id + + @Column(name = "SEQU_ID_REGOLE_PIANI_FERIE_H", columnDefinition = "NUMBER(15)") + private Long sequIdRegolePianiFerieH; + @NotNull + + @Column(name = "NUME_MIN_GG_DA_PIANIFICARE", columnDefinition = "NUMBER(15)") + private Long numMinGgDaPianificare; + @NotNull + + @Column(name = "NUME_MAX_GG_DA_PIANIFICARE", columnDefinition = "NUMBER(15)") + private Long numMaxGgDaPianificare; + @NotNull + + @Column(name = "NUME_PERC_MIN_GIORNI_PRESENZA", columnDefinition = "NUMBER(15)") + private Long numePercMinGiorniPresenza; + @NotNull + + @Column(name = "FLAG_VALIDO_UO_SUBORDINATE", columnDefinition = "VARCHAR(1)") + private String flagValidoUoSubordinate; + @NotNull + + @Column(name = "FK_AMMINISTRAZIONE", columnDefinition = "NUMBER(15)") + private Long fkAmministrazione; + @NotNull + + @Column(name = "FK_REGOLA_PIANO_FERIE_PK", columnDefinition = "NUMBER(15)") + private Long fkRegolaPianoFeriePk; + @NotNull + + @Column(name = "FK_TIPO_ORGANIGRAMMA", columnDefinition = "NUMBER(15)") + private Long fkTipoOrganigramma; + @Column(name = "FK_UNITA_FUNZIONALE", columnDefinition = "NUMBER(15)") + private Long fkUnitaFunzionale; + @Column(name = "FK_UNITA_ORGANIZZATIVA_PK", columnDefinition = "NUMBER(15)") + private Long fkUnitaOrganizzativaPk; + @NotNull + + @Column(name = "FLAG_ELIMINATO", columnDefinition = "VARCHAR(1)") + private String flagEliminato; + @NotNull + + @Column(name = "UTENTE_ULTIMA_MODIFICA", columnDefinition = "VARCHAR(50)") + private String utenteUltimaModifica; + @NotNull + + @Column(name = "DATA_ULTIMA_MODIFICA", columnDefinition = "DATE") + private Date dataUltimaModifica; + @NotNull + + @Column(name = "DATA_INIZIO_VALIDITA", columnDefinition = "DATE") + private Date dataInizioValidita; + @NotNull + + @Column(name = "DATA_FINE_VALIDITA", columnDefinition = "DATE") + private Date dataFineValidita; + + // IMPORTED PARENTS + + // CONSTRUCTORS + public DregolePianiFerieH(String objectKey) { + super(); + setObjectKey(objectKey); + } + + public DregolePianiFerieH(Long numMinGgDaPianificare, Long numMaxGgDaPianificare, Long numePercMinGiorniPresenza, + String flagValidoUoSubordinate, Long fkAmministrazione, Long fkRegolaPianoFeriePk, Long fkTipoOrganigramma, + Long fkUnitaFunzionale, Long fkUnitaOrganizzativaPk, String flagEliminato, String utenteUltimaModifica, + Date dataUltimaModifica, Date dataInizioValidita, Date dataFineValidita, Long sequIdRegolePianiFerieH) { + super(); + + this.numMinGgDaPianificare = numMinGgDaPianificare; + this.numMaxGgDaPianificare = numMaxGgDaPianificare; + this.numePercMinGiorniPresenza = numePercMinGiorniPresenza; + this.flagValidoUoSubordinate = flagValidoUoSubordinate; + this.fkAmministrazione = fkAmministrazione; + this.fkRegolaPianoFeriePk = fkRegolaPianoFeriePk; + this.fkTipoOrganigramma = fkTipoOrganigramma; + this.fkUnitaFunzionale = fkUnitaFunzionale; + this.fkUnitaOrganizzativaPk = fkUnitaOrganizzativaPk; + this.flagEliminato = flagEliminato; + this.utenteUltimaModifica = utenteUltimaModifica; + this.dataUltimaModifica = dataUltimaModifica; + this.dataInizioValidita = dataInizioValidita; + this.dataFineValidita = dataFineValidita; + this.sequIdRegolePianiFerieH = sequIdRegolePianiFerieH; + } + + // CHILDREN + + // PARENTS + @NotNull + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "FK_REGOLA_PIANO_FERIE_PK", referencedColumnName = "SEQU_ID_REGOLE_PIANI_FERIE_PK", nullable = false) + @JsonBackReference("theDregolePianiFeriePk") + @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" }, allowSetters = true) + private DregolePianiFeriePk theDregolePianiFeriePk; + + // GETTER/SETTER + /** + * @return the sequIdRegolePianiFerieH + */ + public Long getSequIdRegolePianiFerieH() { + return this.sequIdRegolePianiFerieH; + } + + /** + * @param sequIdRegolePianiFerieH to set + */ + public void setSequIdRegolePianiFerieH(Long sequIdRegolePianiFerieH) { + this.sequIdRegolePianiFerieH = sequIdRegolePianiFerieH; + } + + /** + * @return the numMinGgDaPianificare + */ + public Long getNumMinGgDaPianificare() { + return this.numMinGgDaPianificare; + } + + /** + * @param numMinGgDaPianificare to set + */ + public void setNumMinGgDaPianificare(Long numMinGgDaPianificare) { + this.numMinGgDaPianificare = numMinGgDaPianificare; + } + + /** + * @return the numMaxGgDaPianificare + */ + public Long getNumMaxGgDaPianificare() { + return this.numMaxGgDaPianificare; + } + + /** + * @param numMaxGgDaPianificare to set + */ + public void setNumMaxGgDaPianificare(Long numMaxGgDaPianificare) { + this.numMaxGgDaPianificare = numMaxGgDaPianificare; + } + + /** + * @return the numePercMinGiorniPresenza + */ + public Long getNumePercMinGiorniPresenza() { + return this.numePercMinGiorniPresenza; + } + + /** + * @param numePercMinGiorniPresenza to set + */ + public void setNumePercMinGiorniPresenza(Long numePercMinGiorniPresenza) { + this.numePercMinGiorniPresenza = numePercMinGiorniPresenza; + } + + /** + * @return the flagValidoUoSubordinate + */ + public String getFlagValidoUoSubordinate() { + return this.flagValidoUoSubordinate; + } + + /** + * @param flagValidoUoSubordinate to set + */ + public void setFlagValidoUoSubordinate(String flagValidoUoSubordinate) { + this.flagValidoUoSubordinate = flagValidoUoSubordinate; + } + + /** + * @return the fkAmministrazione + */ + public Long getFkAmministrazione() { + return this.fkAmministrazione; + } + + /** + * @param fkAmministrazione to set + */ + public void setFkAmministrazione(Long fkAmministrazione) { + this.fkAmministrazione = fkAmministrazione; + } + + /** + * @return the fkRegolaPianoFeriePk + */ + public Long getFkRegolaPianoFeriePk() { + return this.fkRegolaPianoFeriePk; + } + + /** + * @param fkRegolaPianoFeriePk to set + */ + public void setFkRegolaPianoFeriePk(Long fkRegolaPianoFeriePk) { + this.fkRegolaPianoFeriePk = fkRegolaPianoFeriePk; + } + + /** + * @return the fkTipoOrganigramma + */ + public Long getFkTipoOrganigramma() { + return this.fkTipoOrganigramma; + } + + /** + * @param fkTipoOrganigramma to set + */ + public void setFkTipoOrganigramma(Long fkTipoOrganigramma) { + this.fkTipoOrganigramma = fkTipoOrganigramma; + } + + /** + * @return the fkUnitaFunzionale + */ + public Long getFkUnitaFunzionale() { + return this.fkUnitaFunzionale; + } + + /** + * @param fkUnitaFunzionale to set + */ + public void setFkUnitaFunzionale(Long fkUnitaFunzionale) { + this.fkUnitaFunzionale = fkUnitaFunzionale; + } + + /** + * @return the fkUnitaOrganizzativaPk + */ + public Long getFkUnitaOrganizzativaPk() { + return this.fkUnitaOrganizzativaPk; + } + + /** + * @param fkUnitaOrganizzativaPk to set + */ + public void setFkUnitaOrganizzativaPk(Long fkUnitaOrganizzativaPk) { + this.fkUnitaOrganizzativaPk = fkUnitaOrganizzativaPk; + } + + /** + * @return the flagEliminato + */ + public String getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(String flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the utenteUltimaModifica + */ + public String getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(String utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the dataUltimaModifica + */ + public Date getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(Date dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + /** + * @return the dataInizioValidita + */ + public Date getDataInizioValidita() { + return this.dataInizioValidita; + } + + /** + * @param dataInizioValidita to set + */ + public void setDataInizioValidita(Date dataInizioValidita) { + this.dataInizioValidita = dataInizioValidita; + } + + /** + * @return the dataFineValidita + */ + public Date getDataFineValidita() { + return this.dataFineValidita; + } + + /** + * @param dataFineValidita to set + */ + public void setDataFineValidita(Date dataFineValidita) { + this.dataFineValidita = dataFineValidita; + } + + // CHILD GETTER/SETTER + + /// ADD CHILD + + // PARENT GETTER/SETTER + /** + * @return the DregolePianiFeriePk + */ + @JsonProperty(access = Access.WRITE_ONLY) + public DregolePianiFeriePk getTheDregolePianiFeriePk() { + return theDregolePianiFeriePk; + } + + /** + * @param aDregolePianiFeriePkList to set + */ + public void setTheDregolePianiFeriePk(DregolePianiFeriePk aDregolePianiFeriePk) { + theDregolePianiFeriePk = aDregolePianiFeriePk; + } + + // PARENT ID GETTER/SETTER + /** + * Return the sequIdRegolePianiFeriePk from theDregolePianiFeriePk. + * + * @return sequIdRegolePianiFeriePk from theDregolePianiFeriePk. + */ + @JsonProperty + public Long getSequIdRegolePianiFeriePk() { + // If the parent entity object is null, then return null + if (getTheDregolePianiFeriePk() == null) { + return null; + } + // Return requested attribute + return theDregolePianiFeriePk.getSequIdRegolePianiFeriePk(); + } + + // PARENT OBJECT TITLE + /** + * Return the object title of theDregolePianiFeriePk. + * + * @return the object title of theDregolePianiFeriePk. + */ + @JsonProperty + public String getTheDregolePianiFeriePkObjectTitle() { + return getTheDregolePianiFeriePk() != null ? getTheDregolePianiFeriePk().getObjectTitle() : null; + } + + // PARENT OBJECT KEY + /** + * Return the object key of theDregolePianiFeriePk. + * + * @return the object key of theDregolePianiFeriePk. + */ + @JsonProperty + public String getTheDregolePianiFeriePkObjectKey() { + return getTheDregolePianiFeriePk() != null ? getTheDregolePianiFeriePk().getObjectKey() : null; + } + + /** + * Set object key of theDregolePianiFeriePk. + * + */ + @JsonProperty + public void setTheDregolePianiFeriePkObjectKey(String objectKey) { + if (EntityUtils.isValueChanged(getTheDregolePianiFeriePkObjectKey(), objectKey, false)) { + DregolePianiFeriePk dregolePianiFeriePk = new DregolePianiFeriePk(); + dregolePianiFeriePk.setObjectKey(objectKey); + setTheDregolePianiFeriePk(dregolePianiFeriePk); + } + } + + // IMPORTED PARENT OBJECT KEY + + // OPERATIONS + + // OBJECT KEY + /** + * Restituisce l'identificativo della chiave in formato stringa. Ritorna + * conveniente nelle selezioni da lista. + * + * @return L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public String getObjectKey() { + return getObjectKeyById(getSequIdRegolePianiFerieH()); + } + + public String getObjectKeyById(Long identification) { + if (identification == null) { + return null; + } + StringBuilder output = new StringBuilder(); + output.append(identification); + return output.toString(); + } + + /** + * Inizializza la parte identificativa del bean in base alla stringa tokenizzata + * da "||" fornita in input. + * + * @param key L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public void setObjectKey(String key) { + if (key == null || key.trim().length() == 0) { + return; + } + String[] array = StringUtils.splitByWholeSeparatorPreserveAllTokens(key, getRowIdFieldDelimiter()); + int ctr = 0; + + setSequIdRegolePianiFerieH(getLongCheckedAgainstNullContent(array[ctr])); + } + + // OBJECT TITLE + public String getObjectTitle() { + StringBuilder output = new StringBuilder(); + output.append(getFlagValidoUoSubordinate()); + return output.toString(); + } + + // PREPERSIST + + @PrePersist + public void prePersist() { + } + + @PreUpdate + public void PreUpdate() { + } + + // Equals / HashCode + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) + return false; + DregolePianiFerieH that = (DregolePianiFerieH) o; + return sequIdRegolePianiFerieH != null && Objects.equals(sequIdRegolePianiFerieH, that.sequIdRegolePianiFerieH); + } + + @Override + public int hashCode() { + return Objects.hash(sequIdRegolePianiFerieH); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DregolePianiFeriePk.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DregolePianiFeriePk.java new file mode 100644 index 0000000000000000000000000000000000000000..1c010411278dc88a7f9e965eb352d2e753de03f6 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/entity/DregolePianiFeriePk.java @@ -0,0 +1,334 @@ +package it.micegroup.gestioneferie.configurazionepf.entity; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +import javax.persistence.Id; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import java.util.Collection; +import java.util.ArrayList; +import javax.persistence.OneToMany; +import javax.persistence.CascadeType; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import lombok.ToString; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; + +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Getter; +import lombok.AllArgsConstructor; + +import javax.persistence.Table; + +import org.apache.commons.lang3.StringUtils; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.hibernate.Hibernate; +import java.util.Objects; + +import it.micegroup.gestioneferie.libs.entity.BaseEntity; +import it.micegroup.voila2runtime.utils.EntityUtils; + +@NoArgsConstructor + +@Getter +@Setter +@Entity +@Table(name = "D_REGOLE_PIANI_FERIE_PK") +public class DregolePianiFeriePk extends BaseEntity implements Serializable { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 3289577936L; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DregolePianiFeriePk.class); + + // ATTRIBUTES + @Id + + @Column(name = "SEQU_ID_REGOLE_PIANI_FERIE_PK", columnDefinition = "NUMBER(15)") + private Long sequIdRegolePianiFeriePk; + @NotNull + + @Column(name = "CODI_REGOLA", columnDefinition = "VARCHAR(50)") + private String codiRegola; + @NotNull + + @Column(name = "DESC_REGOLA", columnDefinition = "VARCHAR(250)") + private String descRegola; + @NotNull + + @Column(name = "FLAG_ELIMINATO", columnDefinition = "VARCHAR(1)") + private String flagEliminato; + @NotNull + + @Column(name = "UTENTE_ULTIMA_MODIFICA", columnDefinition = "VARCHAR(50)") + private String utenteUltimaModifica; + @NotNull + + @Column(name = "DATA_ULTIMA_MODIFICA", columnDefinition = "DATE") + private Date dataUltimaModifica; + @NotNull + + @Column(name = "DATA_INIZIO_VALIDITA", columnDefinition = "DATE") + private Date dataInizioValidita; + @NotNull + + @Column(name = "DATA_FINE_VALIDITA", columnDefinition = "DATE") + private Date dataFineValidita; + + // IMPORTED PARENTS + + // CONSTRUCTORS + public DregolePianiFeriePk(String objectKey) { + super(); + setObjectKey(objectKey); + } + + public DregolePianiFeriePk(String codiRegola, String descRegola, String flagEliminato, String utenteUltimaModifica, + Date dataUltimaModifica, Date dataInizioValidita, Date dataFineValidita, Long sequIdRegolePianiFeriePk) { + super(); + + this.codiRegola = codiRegola; + this.descRegola = descRegola; + this.flagEliminato = flagEliminato; + this.utenteUltimaModifica = utenteUltimaModifica; + this.dataUltimaModifica = dataUltimaModifica; + this.dataInizioValidita = dataInizioValidita; + this.dataFineValidita = dataFineValidita; + this.sequIdRegolePianiFeriePk = sequIdRegolePianiFeriePk; + } + + // CHILDREN + @JsonProperty(access = Access.WRITE_ONLY) + @JsonManagedReference("theDregolePianiFeriePk") + @OneToMany(mappedBy = "theDregolePianiFeriePk", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ToString.Exclude + private Collection theDregolePianiFerieH = new ArrayList<>(); + + // PARENTS + + // GETTER/SETTER + /** + * @return the sequIdRegolePianiFeriePk + */ + public Long getSequIdRegolePianiFeriePk() { + return this.sequIdRegolePianiFeriePk; + } + + /** + * @param sequIdRegolePianiFeriePk to set + */ + public void setSequIdRegolePianiFeriePk(Long sequIdRegolePianiFeriePk) { + this.sequIdRegolePianiFeriePk = sequIdRegolePianiFeriePk; + } + + /** + * @return the codiRegola + */ + public String getCodiRegola() { + return this.codiRegola; + } + + /** + * @param codiRegola to set + */ + public void setCodiRegola(String codiRegola) { + this.codiRegola = codiRegola; + } + + /** + * @return the descRegola + */ + public String getDescRegola() { + return this.descRegola; + } + + /** + * @param descRegola to set + */ + public void setDescRegola(String descRegola) { + this.descRegola = descRegola; + } + + /** + * @return the flagEliminato + */ + public String getFlagEliminato() { + return this.flagEliminato; + } + + /** + * @param flagEliminato to set + */ + public void setFlagEliminato(String flagEliminato) { + this.flagEliminato = flagEliminato; + } + + /** + * @return the utenteUltimaModifica + */ + public String getUtenteUltimaModifica() { + return this.utenteUltimaModifica; + } + + /** + * @param utenteUltimaModifica to set + */ + public void setUtenteUltimaModifica(String utenteUltimaModifica) { + this.utenteUltimaModifica = utenteUltimaModifica; + } + + /** + * @return the dataUltimaModifica + */ + public Date getDataUltimaModifica() { + return this.dataUltimaModifica; + } + + /** + * @param dataUltimaModifica to set + */ + public void setDataUltimaModifica(Date dataUltimaModifica) { + this.dataUltimaModifica = dataUltimaModifica; + } + + /** + * @return the dataInizioValidita + */ + public Date getDataInizioValidita() { + return this.dataInizioValidita; + } + + /** + * @param dataInizioValidita to set + */ + public void setDataInizioValidita(Date dataInizioValidita) { + this.dataInizioValidita = dataInizioValidita; + } + + /** + * @return the dataFineValidita + */ + public Date getDataFineValidita() { + return this.dataFineValidita; + } + + /** + * @param dataFineValidita to set + */ + public void setDataFineValidita(Date dataFineValidita) { + this.dataFineValidita = dataFineValidita; + } + + // CHILD GETTER/SETTER + /** + * @return the DregolePianiFerieH + */ + public Collection getTheDregolePianiFerieH() { + return theDregolePianiFerieH; + } + + /** + * @param aDregolePianiFerieHList to set + */ + public void setTheDregolePianiFerieH(Collection aDregolePianiFerieHList) { + theDregolePianiFerieH = aDregolePianiFerieHList; + } + + /// ADD CHILD + public void addDregolePianiFerieH(DregolePianiFerieH dregolePianiFerieH) { + theDregolePianiFerieH.add(dregolePianiFerieH); + } + + // PARENT GETTER/SETTER + + // PARENT ID GETTER/SETTER + + // PARENT OBJECT TITLE + + // PARENT OBJECT KEY + + // IMPORTED PARENT OBJECT KEY + + // OPERATIONS + + // OBJECT KEY + /** + * Restituisce l'identificativo della chiave in formato stringa. Ritorna + * conveniente nelle selezioni da lista. + * + * @return L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public String getObjectKey() { + return getObjectKeyById(getSequIdRegolePianiFeriePk()); + } + + public String getObjectKeyById(Long identification) { + if (identification == null) { + return null; + } + StringBuilder output = new StringBuilder(); + output.append(identification); + return output.toString(); + } + + /** + * Inizializza la parte identificativa del bean in base alla stringa tokenizzata + * da "||" fornita in input. + * + * @param key L'identificativo della chiave in formato pk1||pk2||pk3... + */ + public void setObjectKey(String key) { + if (key == null || key.trim().length() == 0) { + return; + } + String[] array = StringUtils.splitByWholeSeparatorPreserveAllTokens(key, getRowIdFieldDelimiter()); + int ctr = 0; + + setSequIdRegolePianiFeriePk(getLongCheckedAgainstNullContent(array[ctr])); + } + + // OBJECT TITLE + public String getObjectTitle() { + StringBuilder output = new StringBuilder(); + output.append(getCodiRegola()); + return output.toString(); + } + + // PREPERSIST + + @PrePersist + public void prePersist() { + } + + @PreUpdate + public void PreUpdate() { + } + + // Equals / HashCode + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) + return false; + DregolePianiFeriePk that = (DregolePianiFeriePk) o; + return sequIdRegolePianiFeriePk != null + && Objects.equals(sequIdRegolePianiFeriePk, that.sequIdRegolePianiFeriePk); + } + + @Override + public int hashCode() { + return Objects.hash(sequIdRegolePianiFeriePk); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DconfigPaPfUoHRepository.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DconfigPaPfUoHRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..b2774debbfcd3fece36be16e500c2d7daba173e9 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DconfigPaPfUoHRepository.java @@ -0,0 +1,33 @@ +package it.micegroup.gestioneferie.configurazionepf.repository; + +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.Collection; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; +import it.micegroup.gestioneferie.libs.repository.BaseRepository; + +@Repository +@EnableJpaRepositories +public interface DconfigPaPfUoHRepository extends BaseRepository { + + @EntityGraph(attributePaths = { "theDconfigPaPianiFerie" }, type = EntityGraphType.FETCH) + + Optional findBySequIdConfigPaPfUoH(Long id); + + @EntityGraph(attributePaths = { "theDconfigPaPianiFerie" }, type = EntityGraphType.FETCH) + + Page findByTheDconfigPaPianiFerie(DconfigPaPianiFerie parentEntity, Pageable pageable); + + @Query("DELETE FROM DconfigPaPfUoH WHERE sequIdConfigPaPfUoH IN ?1") + void deleteByIdIn(Collection ids); +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DconfigPaPianiFerieRepository.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DconfigPaPianiFerieRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..4a733d1b626c0c1bf9ed657dad37e180190f15ae --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DconfigPaPianiFerieRepository.java @@ -0,0 +1,21 @@ +package it.micegroup.gestioneferie.configurazionepf.repository; + +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.Collection; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; +import it.micegroup.gestioneferie.libs.repository.BaseRepository; + +@Repository +@EnableJpaRepositories +public interface DconfigPaPianiFerieRepository extends BaseRepository { + + Optional findBySequIdConfigPaPianoFerie(Long id); + + @Query("DELETE FROM DconfigPaPianiFerie WHERE sequIdConfigPaPianoFerie IN ?1") + void deleteByIdIn(Collection ids); +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DpercAutPianFerieHRepository.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DpercAutPianFerieHRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..ffa691cd5377daf6085f727d919825aefc41b6ab --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DpercAutPianFerieHRepository.java @@ -0,0 +1,38 @@ +package it.micegroup.gestioneferie.configurazionepf.repository; + +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.Collection; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; +import it.micegroup.gestioneferie.libs.repository.BaseRepository; + +@Repository +@EnableJpaRepositories +public interface DpercAutPianFerieHRepository extends BaseRepository { + + @EntityGraph(attributePaths = { "theDpercAutPianFeriePk", "theDconfigPaPianiFerie" }, type = EntityGraphType.FETCH) + + Optional findBySequIdPercAutPianFerieH(Long id); + + @EntityGraph(attributePaths = { "theDpercAutPianFeriePk", "theDconfigPaPianiFerie" }, type = EntityGraphType.FETCH) + + Page findByTheDpercAutPianFeriePk(DpercAutPianFeriePk parentEntity, Pageable pageable); + + @EntityGraph(attributePaths = { "theDpercAutPianFeriePk", "theDconfigPaPianiFerie" }, type = EntityGraphType.FETCH) + + Page findByTheDconfigPaPianiFerie(DconfigPaPianiFerie parentEntity, Pageable pageable); + + @Query("DELETE FROM DpercAutPianFerieH WHERE sequIdPercAutPianFerieH IN ?1") + void deleteByIdIn(Collection ids); +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DpercAutPianFeriePkRepository.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DpercAutPianFeriePkRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..cefbde747eedca1cd499d0f0b110c057c5b16aeb --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DpercAutPianFeriePkRepository.java @@ -0,0 +1,21 @@ +package it.micegroup.gestioneferie.configurazionepf.repository; + +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.Collection; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; +import it.micegroup.gestioneferie.libs.repository.BaseRepository; + +@Repository +@EnableJpaRepositories +public interface DpercAutPianFeriePkRepository extends BaseRepository { + + Optional findBySequIdPercAutPianFeriePk(Long id); + + @Query("DELETE FROM DpercAutPianFeriePk WHERE sequIdPercAutPianFeriePk IN ?1") + void deleteByIdIn(Collection ids); +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DregolePianiFerieHRepository.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DregolePianiFerieHRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..e5241fc011a74904dabf333d8f4bf729b5e59bdf --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DregolePianiFerieHRepository.java @@ -0,0 +1,33 @@ +package it.micegroup.gestioneferie.configurazionepf.repository; + +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.Collection; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; +import it.micegroup.gestioneferie.libs.repository.BaseRepository; + +@Repository +@EnableJpaRepositories +public interface DregolePianiFerieHRepository extends BaseRepository { + + @EntityGraph(attributePaths = { "theDregolePianiFeriePk" }, type = EntityGraphType.FETCH) + + Optional findBySequIdRegolePianiFerieH(Long id); + + @EntityGraph(attributePaths = { "theDregolePianiFeriePk" }, type = EntityGraphType.FETCH) + + Page findByTheDregolePianiFeriePk(DregolePianiFeriePk parentEntity, Pageable pageable); + + @Query("DELETE FROM DregolePianiFerieH WHERE sequIdRegolePianiFerieH IN ?1") + void deleteByIdIn(Collection ids); +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DregolePianiFeriePkRepository.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DregolePianiFeriePkRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..b00315af54650d486cce0b7e67799502d76bb025 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/repository/DregolePianiFeriePkRepository.java @@ -0,0 +1,21 @@ +package it.micegroup.gestioneferie.configurazionepf.repository; + +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.Collection; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; +import it.micegroup.gestioneferie.libs.repository.BaseRepository; + +@Repository +@EnableJpaRepositories +public interface DregolePianiFeriePkRepository extends BaseRepository { + + Optional findBySequIdRegolePianiFeriePk(Long id); + + @Query("DELETE FROM DregolePianiFeriePk WHERE sequIdRegolePianiFeriePk IN ?1") + void deleteByIdIn(Collection ids); +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPfUoHService.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPfUoHService.java new file mode 100644 index 0000000000000000000000000000000000000000..bc1f69bf433b749f564865e9b8e80380ca5b354d --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPfUoHService.java @@ -0,0 +1,20 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH; +import it.micegroup.gestioneferie.configurazionepf.criteria.DconfigPaPfUoHCriteria; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; +import it.micegroup.gestioneferie.libs.service.BaseEntityService; +import it.micegroup.voila2runtime.exception.BusinessException; + +public interface DconfigPaPfUoHService extends BaseEntityService { + + // PARENT-SPECIFIC SERVICES + Page findByTheDconfigPaPianiFerie(DconfigPaPianiFerie parentEntity, Pageable pageable); + + DconfigPaPfUoH bulkUpdate(DconfigPaPfUoH dconfigPaPfUoH); + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPianiFerieService.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPianiFerieService.java new file mode 100644 index 0000000000000000000000000000000000000000..981152c21d0481b57c1b85efab7cb5d104bc2c9b --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPianiFerieService.java @@ -0,0 +1,15 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; +import it.micegroup.gestioneferie.configurazionepf.criteria.DconfigPaPianiFerieCriteria; +import it.micegroup.gestioneferie.libs.service.BaseEntityService; +import it.micegroup.voila2runtime.exception.BusinessException; + +public interface DconfigPaPianiFerieService + extends BaseEntityService { + + // PARENT-SPECIFIC SERVICES + + DconfigPaPianiFerie bulkUpdate(DconfigPaPianiFerie dconfigPaPianiFerie); + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFerieHService.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFerieHService.java new file mode 100644 index 0000000000000000000000000000000000000000..f733460da565037a4218c0b099ed6f14fe9a2807 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFerieHService.java @@ -0,0 +1,48 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; +import it.micegroup.gestioneferie.configurazionepf.criteria.DpercAutPianFerieHCriteria; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; +import it.micegroup.gestioneferie.libs.service.BaseEntityService; +import it.micegroup.voila2runtime.exception.BusinessException; + +public interface DpercAutPianFerieHService + extends BaseEntityService { + + // PARENT-SPECIFIC SERVICES + Page findByTheDpercAutPianFeriePk(DpercAutPianFeriePk parentEntity, Pageable pageable); + + Page findByTheDconfigPaPianiFerie(DconfigPaPianiFerie parentEntity, Pageable pageable); + + /** + * Return a list of DpercAutPianFeriePk from all DpercAutPianFerieH with given + * theDpercAutPianFeriePk + * + * @param dconfigPaPianiFerie + * @param pageable + * @return list of DpercAutPianFeriePk from all DpercAutPianFerieH with given + * TheDpercAutPianFeriePk + */ + Page findDpercAutPianFeriePkByTheDconfigPaPianiFerie(DconfigPaPianiFerie dconfigPaPianiFerie, + Pageable pageable); + + /** + * Return a list of DconfigPaPianiFerie from all DpercAutPianFerieH with given + * theDconfigPaPianiFerie + * + * @param dpercAutPianFeriePk + * @param pageable + * @return list of DconfigPaPianiFerie from all DpercAutPianFerieH with given + * TheDconfigPaPianiFerie + */ + Page findDconfigPaPianiFerieByTheDpercAutPianFeriePk(DpercAutPianFeriePk dpercAutPianFeriePk, + Pageable pageable); + + DpercAutPianFerieH bulkUpdate(DpercAutPianFerieH dpercAutPianFerieH); + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFeriePkService.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFeriePkService.java new file mode 100644 index 0000000000000000000000000000000000000000..9f83d307e0c7395176dba75a3963800d2e722316 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFeriePkService.java @@ -0,0 +1,15 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; +import it.micegroup.gestioneferie.configurazionepf.criteria.DpercAutPianFeriePkCriteria; +import it.micegroup.gestioneferie.libs.service.BaseEntityService; +import it.micegroup.voila2runtime.exception.BusinessException; + +public interface DpercAutPianFeriePkService + extends BaseEntityService { + + // PARENT-SPECIFIC SERVICES + + DpercAutPianFeriePk bulkUpdate(DpercAutPianFeriePk dpercAutPianFeriePk); + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFerieHService.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFerieHService.java new file mode 100644 index 0000000000000000000000000000000000000000..df19e77475ced21b5c97371191adec5524a2b4d5 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFerieHService.java @@ -0,0 +1,21 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH; +import it.micegroup.gestioneferie.configurazionepf.criteria.DregolePianiFerieHCriteria; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; +import it.micegroup.gestioneferie.libs.service.BaseEntityService; +import it.micegroup.voila2runtime.exception.BusinessException; + +public interface DregolePianiFerieHService + extends BaseEntityService { + + // PARENT-SPECIFIC SERVICES + Page findByTheDregolePianiFeriePk(DregolePianiFeriePk parentEntity, Pageable pageable); + + DregolePianiFerieH bulkUpdate(DregolePianiFerieH dregolePianiFerieH); + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFeriePkService.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFeriePkService.java new file mode 100644 index 0000000000000000000000000000000000000000..cf581d0357dd88b8daf986a4478447b28ac5b5f8 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-core/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFeriePkService.java @@ -0,0 +1,15 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; +import it.micegroup.gestioneferie.configurazionepf.criteria.DregolePianiFeriePkCriteria; +import it.micegroup.gestioneferie.libs.service.BaseEntityService; +import it.micegroup.voila2runtime.exception.BusinessException; + +public interface DregolePianiFeriePkService + extends BaseEntityService { + + // PARENT-SPECIFIC SERVICES + + DregolePianiFeriePk bulkUpdate(DregolePianiFeriePk dregolePianiFeriePk); + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.classpath b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..2bf55d487955a8e4a1bcf32d46fd360e218e4d0b --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.classpath @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/MavenWrapperDownloader.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000000000000000000000000000000000..c32394f140a74ad74d1deb4a98bf2556fadf23da --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.5"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/maven-wrapper.jar b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..0d5e649888a4843c1520054d9672f80c62ebbb48 Binary files /dev/null and b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/maven-wrapper.jar differ diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/maven-wrapper.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..7d59a01f2594defa27705a493da0e4d57465aa2d --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.2/apache-maven-3.6.2-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.project b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.project new file mode 100644 index 0000000000000000000000000000000000000000..90357daae87a22ec476ac8509381b842014c64d0 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.project @@ -0,0 +1,71 @@ + + + gestioneferie-ms-configurazionepf-impl + + + gestioneferie-ms-configurazionepf + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.m2e.core.maven2Nature + + + + 1644425858603 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858625 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425858654 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..abdea9ac032d4655898933f93050f48bf9581d14 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.jdt.core.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..ea81b668205b42187d800803790cb71e28ca2e14 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,366 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.m2e.core.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.voilaProject b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/mvnw b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/mvnw new file mode 100644 index 0000000000000000000000000000000000000000..d2f0ea38081dce15746cffcec1f1e4151d1a1f0a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/mvnw.cmd b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/mvnw.cmd new file mode 100644 index 0000000000000000000000000000000000000000..b26ab24f039ea62cea44199665b23318f3cc5344 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/pom.xml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..2546d232c26430a21a00f3543f5319d68e5b4040 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + gestioneferie-ms-configurazionepf-impl + gestioneferie-ms-configurazionepf-impl module + http://www.micegroup.it + + + it.micegroup + gestioneferie-ms-configurazionepf + 0.0.1-SNAPSHOT + ../../pom.xml + + jar + + + + it.micegroup + gestioneferie-ms-configurazionepf-core + ${project.parent.version} + + + it.micegroup + gestioneferie-libs-impl + 0.0.1-SNAPSHOT + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPfUoHServiceImpl.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPfUoHServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..397dce38f793c022ba8c14549dbdf1e0ff2cce1a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPfUoHServiceImpl.java @@ -0,0 +1,293 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import java.util.Map; +import java.util.List; +import java.util.Locale; +import java.util.HashMap; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ResourceBundle; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; + +import org.springframework.context.i18n.LocaleContextHolder; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.sf.jasperreports.engine.JRParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.JasperReport; +import net.sf.jasperreports.engine.JasperFillManager; +import net.sf.jasperreports.engine.JasperExportManager; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +import it.micegroup.voila2runtime.filter.LongFilter; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH_; +import it.micegroup.gestioneferie.configurazionepf.criteria.DconfigPaPfUoHCriteria; +import it.micegroup.gestioneferie.configurazionepf.repository.DconfigPaPfUoHRepository; +import it.micegroup.voila2runtime.specification.FilterService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH_; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie_; +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.libs.service.BaseServiceImpl; + +import it.micegroup.voila2runtime.exception.BusinessException; +import net.sf.jasperreports.engine.JRException; + +@RequiredArgsConstructor +@Service +@Transactional +public class DconfigPaPfUoHServiceImpl extends BaseServiceImpl implements DconfigPaPfUoHService { + + private final DconfigPaPfUoHRepository dconfigPaPfUoHRepository; + private final FilterService filterService; + + // CHILD SERVICES + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DconfigPaPfUoHServiceImpl.class); + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll(org. springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + return dconfigPaPfUoHRepository.findAll(pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll() + */ + @Override + @Transactional(readOnly = true) + public List findAll() { + return dconfigPaPfUoHRepository.findAll(); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object, org.springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findByCriteria(DconfigPaPfUoHCriteria criteria, Pageable pageable) { + final Specification specification = createSpecification(criteria); + return dconfigPaPfUoHRepository.findAll(specification, pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object) + */ + @Override + @Transactional(readOnly = true) + public List findByCriteria(DconfigPaPfUoHCriteria criteria) { + final Specification specification = createSpecification(criteria); + return dconfigPaPfUoHRepository.findAll(specification); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findById(java.lang. Object) + */ + @Override + @Transactional(readOnly = true) + public Optional findById(Long id) { + return dconfigPaPfUoHRepository.findBySequIdConfigPaPfUoH(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * exists(java.lang. Object) + */ + @Override + public boolean exists(Long id) { + return dconfigPaPfUoHRepository.existsById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * insert(java. lang.Object) + */ + @Override + public DconfigPaPfUoH insert(@Valid DconfigPaPfUoH entity) { + return dconfigPaPfUoHRepository.save(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * update(java. lang.Object) + */ + @Override + public DconfigPaPfUoH update(@Valid DconfigPaPfUoH entity) { + return dconfigPaPfUoHRepository.save(entity); + } + + @Override + public void delete(DconfigPaPfUoH entity) { + dconfigPaPfUoHRepository.delete(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteById(java.lang. Object) + */ + @Override + public void deleteById(Long id) { + dconfigPaPfUoHRepository.deleteById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteByIdIn(java.lang. Object) + */ + @Override + public void deleteByIdIn(Collection ids) { + dconfigPaPfUoHRepository.deleteByIdIn(ids); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByObjectKey(java.lang.String) + */ + @Override + @Transactional(readOnly = true) + public Optional findByObjectKey(String id) { + DconfigPaPfUoH dconfigPaPfUoH = new DconfigPaPfUoH(id); + + return findById(dconfigPaPfUoH.getSequIdConfigPaPfUoH()); + } + + @Override + public Page findByTheDconfigPaPianiFerie(DconfigPaPianiFerie parentEntity, Pageable pageable) { + return dconfigPaPfUoHRepository.findByTheDconfigPaPianiFerie(parentEntity, pageable); + } + + /** + * Convert DconfigPaPfUoHCriteria to a {@link Specification} + * + * @param criteria + * @return + */ + private Specification createSpecification(DconfigPaPfUoHCriteria criteria) { + Specification specification = Specification.where(null); + + if (criteria != null) { + // Attribute filters + if (criteria.getSequIdConfigPaPfUoH() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getSequIdConfigPaPfUoH(), DconfigPaPfUoH_.sequIdConfigPaPfUoH)); + } + if (criteria.getFlagValidoUoSubordinate() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getFlagValidoUoSubordinate(), DconfigPaPfUoH_.flagValidoUoSubordinate)); + } + if (criteria.getFkConfigPaPianoFerie() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkConfigPaPianoFerie(), DconfigPaPfUoH_.fkConfigPaPianoFerie)); + } + if (criteria.getFkUnitaFunzionale() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkUnitaFunzionale(), DconfigPaPfUoH_.fkUnitaFunzionale)); + } + if (criteria.getFkUnitaOrganizzativaPk() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkUnitaOrganizzativaPk(), DconfigPaPfUoH_.fkUnitaOrganizzativaPk)); + } + if (criteria.getUtenteUltimaModifica() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getUtenteUltimaModifica(), DconfigPaPfUoH_.utenteUltimaModifica)); + } + if (criteria.getFlagEliminato() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.getFlagEliminato(), + DconfigPaPfUoH_.flagEliminato)); + } + if (criteria.getDataInizioValidita() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataInizioValidita(), DconfigPaPfUoH_.dataInizioValidita)); + } + if (criteria.getDataFineValidita() != null) { + specification = specification.and(filterService + .generateRangeSpecification(criteria.getDataFineValidita(), DconfigPaPfUoH_.dataFineValidita)); + } + if (criteria.getDataUltimaModifica() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataUltimaModifica(), DconfigPaPfUoH_.dataUltimaModifica)); + } + + if (criteria.getTheDconfigPaPianiFerieObjectKey() != null) { + DconfigPaPianiFerie dconfigPaPianiFerie = new DconfigPaPianiFerie( + criteria.getTheDconfigPaPianiFerieObjectKey()); + + specification = specification.and( + filterService.generateEqualsSpecification(dconfigPaPianiFerie.getSequIdConfigPaPianoFerie(), + r -> r.get(DconfigPaPfUoH_.theDconfigPaPianiFerie) + .get(DconfigPaPianiFerie_.sequIdConfigPaPianoFerie))); + } + + } + return specification; + } + + @Override + @Transactional() + public DconfigPaPfUoH bulkUpdate(DconfigPaPfUoH dconfigPaPfUoH) { + + DconfigPaPfUoH update = this.update(dconfigPaPfUoH); + + return update; + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPianiFerieServiceImpl.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPianiFerieServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..c2c6569ef04e234a3bbbb541f273b20bd5c335c2 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DconfigPaPianiFerieServiceImpl.java @@ -0,0 +1,294 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import java.util.Map; +import java.util.List; +import java.util.Locale; +import java.util.HashMap; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ResourceBundle; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; + +import org.springframework.context.i18n.LocaleContextHolder; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.sf.jasperreports.engine.JRParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.JasperReport; +import net.sf.jasperreports.engine.JasperFillManager; +import net.sf.jasperreports.engine.JasperExportManager; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie_; +import it.micegroup.gestioneferie.configurazionepf.criteria.DconfigPaPianiFerieCriteria; +import it.micegroup.gestioneferie.configurazionepf.repository.DconfigPaPianiFerieRepository; +import it.micegroup.voila2runtime.specification.FilterService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie_; +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.libs.service.BaseServiceImpl; + +import java.util.stream.Collectors; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH; +import it.micegroup.voila2runtime.entity.GenericEntity; +import it.micegroup.voila2runtime.exception.BusinessException; +import net.sf.jasperreports.engine.JRException; + +@RequiredArgsConstructor +@Service +@Transactional +public class DconfigPaPianiFerieServiceImpl extends BaseServiceImpl implements DconfigPaPianiFerieService { + + private final DconfigPaPianiFerieRepository dconfigPaPianiFerieRepository; + private final FilterService filterService; + + // CHILD SERVICES + private final DpercAutPianFerieHService dpercAutPianFerieHService; + private final DconfigPaPfUoHService dconfigPaPfUoHService; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DconfigPaPianiFerieServiceImpl.class); + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll(org. springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + return dconfigPaPianiFerieRepository.findAll(pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll() + */ + @Override + @Transactional(readOnly = true) + public List findAll() { + return dconfigPaPianiFerieRepository.findAll(); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object, org.springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findByCriteria(DconfigPaPianiFerieCriteria criteria, Pageable pageable) { + final Specification specification = createSpecification(criteria); + return dconfigPaPianiFerieRepository.findAll(specification, pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object) + */ + @Override + @Transactional(readOnly = true) + public List findByCriteria(DconfigPaPianiFerieCriteria criteria) { + final Specification specification = createSpecification(criteria); + return dconfigPaPianiFerieRepository.findAll(specification); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findById(java.lang. Object) + */ + @Override + @Transactional(readOnly = true) + public Optional findById(Long id) { + return dconfigPaPianiFerieRepository.findBySequIdConfigPaPianoFerie(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * exists(java.lang. Object) + */ + @Override + public boolean exists(Long id) { + return dconfigPaPianiFerieRepository.existsById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * insert(java. lang.Object) + */ + @Override + public DconfigPaPianiFerie insert(@Valid DconfigPaPianiFerie entity) { + return dconfigPaPianiFerieRepository.save(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * update(java. lang.Object) + */ + @Override + public DconfigPaPianiFerie update(@Valid DconfigPaPianiFerie entity) { + return dconfigPaPianiFerieRepository.save(entity); + } + + @Override + public void delete(DconfigPaPianiFerie entity) { + dconfigPaPianiFerieRepository.delete(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteById(java.lang. Object) + */ + @Override + public void deleteById(Long id) { + dconfigPaPianiFerieRepository.deleteById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteByIdIn(java.lang. Object) + */ + @Override + public void deleteByIdIn(Collection ids) { + dconfigPaPianiFerieRepository.deleteByIdIn(ids); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByObjectKey(java.lang.String) + */ + @Override + @Transactional(readOnly = true) + public Optional findByObjectKey(String id) { + DconfigPaPianiFerie dconfigPaPianiFerie = new DconfigPaPianiFerie(id); + + return findById(dconfigPaPianiFerie.getSequIdConfigPaPianoFerie()); + } + + /** + * Convert DconfigPaPianiFerieCriteria to a {@link Specification} + * + * @param criteria + * @return + */ + private Specification createSpecification(DconfigPaPianiFerieCriteria criteria) { + Specification specification = Specification.where(null); + + if (criteria != null) { + // Attribute filters + if (criteria.getSequIdConfigPaPianoFerie() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getSequIdConfigPaPianoFerie(), DconfigPaPianiFerie_.sequIdConfigPaPianoFerie)); + } + if (criteria.getCodiConfigPaPianoFerie() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getCodiConfigPaPianoFerie(), DconfigPaPianiFerie_.codiConfigPaPianoFerie)); + } + if (criteria.getDescConfigPaPianoFerie() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getDescConfigPaPianoFerie(), DconfigPaPianiFerie_.descConfigPaPianoFerie)); + } + if (criteria.getFkAmministrazionePk() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkAmministrazionePk(), DconfigPaPianiFerie_.fkAmministrazionePk)); + } + if (criteria.getFkTipoOrganigramma() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkTipoOrganigramma(), DconfigPaPianiFerie_.fkTipoOrganigramma)); + } + if (criteria.getDataUltimaModifica() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataUltimaModifica(), DconfigPaPianiFerie_.dataUltimaModifica)); + } + if (criteria.getUtenteUltimaModifica() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getUtenteUltimaModifica(), DconfigPaPianiFerie_.utenteUltimaModifica)); + } + if (criteria.getFlagEliminato() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.getFlagEliminato(), + DconfigPaPianiFerie_.flagEliminato)); + } + if (criteria.getDataInizioRecord() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataInizioRecord(), DconfigPaPianiFerie_.dataInizioRecord)); + } + if (criteria.getDataFineRecord() != null) { + specification = specification.and(filterService.generateRangeSpecification(criteria.getDataFineRecord(), + DconfigPaPianiFerie_.dataFineRecord)); + } + + } + return specification; + } + + @Override + @Transactional() + public DconfigPaPianiFerie bulkUpdate(DconfigPaPianiFerie dconfigPaPianiFerie) { + List updateTheDpercAutPianFerieH = dconfigPaPianiFerie.getTheDpercAutPianFerieH().stream() + .filter(child -> !child.isDeletedEntityState()).collect(Collectors.toList()); + List deleteTheDpercAutPianFerieH = dconfigPaPianiFerie.getTheDpercAutPianFerieH().stream() + .filter(GenericEntity::isDeletedEntityState).collect(Collectors.toList()); + + dconfigPaPianiFerie.setTheDpercAutPianFerieH(updateTheDpercAutPianFerieH); + List updateTheDconfigPaPfUoH = dconfigPaPianiFerie.getTheDconfigPaPfUoH().stream() + .filter(child -> !child.isDeletedEntityState()).collect(Collectors.toList()); + List deleteTheDconfigPaPfUoH = dconfigPaPianiFerie.getTheDconfigPaPfUoH().stream() + .filter(GenericEntity::isDeletedEntityState).collect(Collectors.toList()); + + dconfigPaPianiFerie.setTheDconfigPaPfUoH(updateTheDconfigPaPfUoH); + + DconfigPaPianiFerie update = this.update(dconfigPaPianiFerie); + + deleteTheDpercAutPianFerieH + .forEach(child -> dpercAutPianFerieHService.deleteById(child.getSequIdPercAutPianFerieH())); + deleteTheDconfigPaPfUoH.forEach(child -> dconfigPaPfUoHService.deleteById(child.getSequIdConfigPaPfUoH())); + return update; + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFerieHServiceImpl.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFerieHServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..26eb623dcdd892d411f8c2ce37588c8cd0a15403 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFerieHServiceImpl.java @@ -0,0 +1,351 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import java.util.Map; +import java.util.List; +import java.util.Locale; +import java.util.HashMap; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ResourceBundle; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; + +import org.springframework.context.i18n.LocaleContextHolder; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.sf.jasperreports.engine.JRParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.JasperReport; +import net.sf.jasperreports.engine.JasperFillManager; +import net.sf.jasperreports.engine.JasperExportManager; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +import it.micegroup.voila2runtime.filter.LongFilter; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH_; +import it.micegroup.gestioneferie.configurazionepf.criteria.DpercAutPianFerieHCriteria; +import it.micegroup.gestioneferie.configurazionepf.repository.DpercAutPianFerieHRepository; +import it.micegroup.voila2runtime.specification.FilterService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH_; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk_; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie_; + +import org.springframework.data.domain.PageImpl; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.libs.service.BaseServiceImpl; + +import it.micegroup.voila2runtime.exception.BusinessException; +import net.sf.jasperreports.engine.JRException; + +@RequiredArgsConstructor +@Service +@Transactional +public class DpercAutPianFerieHServiceImpl extends BaseServiceImpl implements DpercAutPianFerieHService { + + private final DpercAutPianFerieHRepository dpercAutPianFerieHRepository; + private final FilterService filterService; + + // CHILD SERVICES + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DpercAutPianFerieHServiceImpl.class); + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll(org. springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + return dpercAutPianFerieHRepository.findAll(pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll() + */ + @Override + @Transactional(readOnly = true) + public List findAll() { + return dpercAutPianFerieHRepository.findAll(); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object, org.springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findByCriteria(DpercAutPianFerieHCriteria criteria, Pageable pageable) { + final Specification specification = createSpecification(criteria); + return dpercAutPianFerieHRepository.findAll(specification, pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object) + */ + @Override + @Transactional(readOnly = true) + public List findByCriteria(DpercAutPianFerieHCriteria criteria) { + final Specification specification = createSpecification(criteria); + return dpercAutPianFerieHRepository.findAll(specification); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findById(java.lang. Object) + */ + @Override + @Transactional(readOnly = true) + public Optional findById(Long id) { + return dpercAutPianFerieHRepository.findBySequIdPercAutPianFerieH(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * exists(java.lang. Object) + */ + @Override + public boolean exists(Long id) { + return dpercAutPianFerieHRepository.existsById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * insert(java. lang.Object) + */ + @Override + public DpercAutPianFerieH insert(@Valid DpercAutPianFerieH entity) { + return dpercAutPianFerieHRepository.save(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * update(java. lang.Object) + */ + @Override + public DpercAutPianFerieH update(@Valid DpercAutPianFerieH entity) { + return dpercAutPianFerieHRepository.save(entity); + } + + @Override + public void delete(DpercAutPianFerieH entity) { + dpercAutPianFerieHRepository.delete(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteById(java.lang. Object) + */ + @Override + public void deleteById(Long id) { + dpercAutPianFerieHRepository.deleteById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteByIdIn(java.lang. Object) + */ + @Override + public void deleteByIdIn(Collection ids) { + dpercAutPianFerieHRepository.deleteByIdIn(ids); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByObjectKey(java.lang.String) + */ + @Override + @Transactional(readOnly = true) + public Optional findByObjectKey(String id) { + DpercAutPianFerieH dpercAutPianFerieH = new DpercAutPianFerieH(id); + + return findById(dpercAutPianFerieH.getSequIdPercAutPianFerieH()); + } + + @Override + public Page findByTheDpercAutPianFeriePk(DpercAutPianFeriePk parentEntity, Pageable pageable) { + return dpercAutPianFerieHRepository.findByTheDpercAutPianFeriePk(parentEntity, pageable); + } + + @Override + public Page findByTheDconfigPaPianiFerie(DconfigPaPianiFerie parentEntity, Pageable pageable) { + return dpercAutPianFerieHRepository.findByTheDconfigPaPianiFerie(parentEntity, pageable); + } + + /** + * Convert DpercAutPianFerieHCriteria to a {@link Specification} + * + * @param criteria + * @return + */ + private Specification createSpecification(DpercAutPianFerieHCriteria criteria) { + Specification specification = Specification.where(null); + + if (criteria != null) { + // Attribute filters + if (criteria.getSequIdPercAutPianFerieH() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getSequIdPercAutPianFerieH(), DpercAutPianFerieH_.sequIdPercAutPianFerieH)); + } + if (criteria.getFkConfigPaPianoFerie() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkConfigPaPianoFerie(), DpercAutPianFerieH_.fkConfigPaPianoFerie)); + } + if (criteria.getFkPercorso() != null) { + specification = specification.and(filterService.generateRangeSpecification(criteria.getFkPercorso(), + DpercAutPianFerieH_.fkPercorso)); + } + if (criteria.getFkPercAutPianFeriePk() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkPercAutPianFeriePk(), DpercAutPianFerieH_.fkPercAutPianFeriePk)); + } + if (criteria.getDataUltimaModifica() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataUltimaModifica(), DpercAutPianFerieH_.dataUltimaModifica)); + } + if (criteria.getDataFineValidita() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataFineValidita(), DpercAutPianFerieH_.dataFineValidita)); + } + if (criteria.getDataInizioValidita() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataInizioValidita(), DpercAutPianFerieH_.dataInizioValidita)); + } + if (criteria.getUtenteUltimaModifica() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getUtenteUltimaModifica(), DpercAutPianFerieH_.utenteUltimaModifica)); + } + if (criteria.getFlagEliminato() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.getFlagEliminato(), + DpercAutPianFerieH_.flagEliminato)); + } + + if (criteria.getTheDpercAutPianFeriePkObjectKey() != null) { + DpercAutPianFeriePk dpercAutPianFeriePk = new DpercAutPianFeriePk( + criteria.getTheDpercAutPianFeriePkObjectKey()); + + specification = specification.and( + filterService.generateEqualsSpecification(dpercAutPianFeriePk.getSequIdPercAutPianFeriePk(), + r -> r.get(DpercAutPianFerieH_.theDpercAutPianFeriePk) + .get(DpercAutPianFeriePk_.sequIdPercAutPianFeriePk))); + } + if (criteria.getTheDconfigPaPianiFerieObjectKey() != null) { + DconfigPaPianiFerie dconfigPaPianiFerie = new DconfigPaPianiFerie( + criteria.getTheDconfigPaPianiFerieObjectKey()); + + specification = specification.and( + filterService.generateEqualsSpecification(dconfigPaPianiFerie.getSequIdConfigPaPianoFerie(), + r -> r.get(DpercAutPianFerieH_.theDconfigPaPianiFerie) + .get(DconfigPaPianiFerie_.sequIdConfigPaPianoFerie))); + } + + } + return specification; + } + + /* + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.DpercAutPianFerieHService + * #findDpercAutPianFeriePkBytheDconfigPaPianiFerie(it.micegroup.gestioneferie. + * configurazionepf.entity.DconfigPaPianiFerie, + * org.springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findDpercAutPianFeriePkByTheDconfigPaPianiFerie( + DconfigPaPianiFerie dconfigPaPianiFerie, Pageable pageable) { + Page dpercAutPianFerieHPage = dpercAutPianFerieHRepository + .findByTheDconfigPaPianiFerie(dconfigPaPianiFerie, pageable); + List content = dpercAutPianFerieHPage.getContent().stream() + .map(DpercAutPianFerieH::getTheDpercAutPianFeriePk).collect(Collectors.toList()); + Page result = new PageImpl(content, pageable, + dpercAutPianFerieHPage.getTotalElements()); + return result; + } + + /* + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.DpercAutPianFerieHService + * #findDconfigPaPianiFerieBytheDpercAutPianFeriePk(it.micegroup.gestioneferie. + * configurazionepf.entity.DpercAutPianFeriePk, + * org.springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findDconfigPaPianiFerieByTheDpercAutPianFeriePk( + DpercAutPianFeriePk dpercAutPianFeriePk, Pageable pageable) { + Page dpercAutPianFerieHPage = dpercAutPianFerieHRepository + .findByTheDpercAutPianFeriePk(dpercAutPianFeriePk, pageable); + List content = dpercAutPianFerieHPage.getContent().stream() + .map(DpercAutPianFerieH::getTheDconfigPaPianiFerie).collect(Collectors.toList()); + Page result = new PageImpl(content, pageable, + dpercAutPianFerieHPage.getTotalElements()); + return result; + } + + @Override + @Transactional() + public DpercAutPianFerieH bulkUpdate(DpercAutPianFerieH dpercAutPianFerieH) { + + DpercAutPianFerieH update = this.update(dpercAutPianFerieH); + + return update; + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFeriePkServiceImpl.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFeriePkServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..00fa6513aa89a9e06a1f2a64054a5fe1b2885a6b --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DpercAutPianFeriePkServiceImpl.java @@ -0,0 +1,261 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import java.util.Map; +import java.util.List; +import java.util.Locale; +import java.util.HashMap; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ResourceBundle; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; + +import org.springframework.context.i18n.LocaleContextHolder; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.sf.jasperreports.engine.JRParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.JasperReport; +import net.sf.jasperreports.engine.JasperFillManager; +import net.sf.jasperreports.engine.JasperExportManager; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk_; +import it.micegroup.gestioneferie.configurazionepf.criteria.DpercAutPianFeriePkCriteria; +import it.micegroup.gestioneferie.configurazionepf.repository.DpercAutPianFeriePkRepository; +import it.micegroup.voila2runtime.specification.FilterService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk_; +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.libs.service.BaseServiceImpl; + +import java.util.stream.Collectors; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; +import it.micegroup.voila2runtime.entity.GenericEntity; +import it.micegroup.voila2runtime.exception.BusinessException; +import net.sf.jasperreports.engine.JRException; + +@RequiredArgsConstructor +@Service +@Transactional +public class DpercAutPianFeriePkServiceImpl extends BaseServiceImpl implements DpercAutPianFeriePkService { + + private final DpercAutPianFeriePkRepository dpercAutPianFeriePkRepository; + private final FilterService filterService; + + // CHILD SERVICES + private final DpercAutPianFerieHService dpercAutPianFerieHService; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DpercAutPianFeriePkServiceImpl.class); + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll(org. springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + return dpercAutPianFeriePkRepository.findAll(pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll() + */ + @Override + @Transactional(readOnly = true) + public List findAll() { + return dpercAutPianFeriePkRepository.findAll(); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object, org.springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findByCriteria(DpercAutPianFeriePkCriteria criteria, Pageable pageable) { + final Specification specification = createSpecification(criteria); + return dpercAutPianFeriePkRepository.findAll(specification, pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object) + */ + @Override + @Transactional(readOnly = true) + public List findByCriteria(DpercAutPianFeriePkCriteria criteria) { + final Specification specification = createSpecification(criteria); + return dpercAutPianFeriePkRepository.findAll(specification); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findById(java.lang. Object) + */ + @Override + @Transactional(readOnly = true) + public Optional findById(Long id) { + return dpercAutPianFeriePkRepository.findBySequIdPercAutPianFeriePk(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * exists(java.lang. Object) + */ + @Override + public boolean exists(Long id) { + return dpercAutPianFeriePkRepository.existsById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * insert(java. lang.Object) + */ + @Override + public DpercAutPianFeriePk insert(@Valid DpercAutPianFeriePk entity) { + return dpercAutPianFeriePkRepository.save(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * update(java. lang.Object) + */ + @Override + public DpercAutPianFeriePk update(@Valid DpercAutPianFeriePk entity) { + return dpercAutPianFeriePkRepository.save(entity); + } + + @Override + public void delete(DpercAutPianFeriePk entity) { + dpercAutPianFeriePkRepository.delete(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteById(java.lang. Object) + */ + @Override + public void deleteById(Long id) { + dpercAutPianFeriePkRepository.deleteById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteByIdIn(java.lang. Object) + */ + @Override + public void deleteByIdIn(Collection ids) { + dpercAutPianFeriePkRepository.deleteByIdIn(ids); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByObjectKey(java.lang.String) + */ + @Override + @Transactional(readOnly = true) + public Optional findByObjectKey(String id) { + DpercAutPianFeriePk dpercAutPianFeriePk = new DpercAutPianFeriePk(id); + + return findById(dpercAutPianFeriePk.getSequIdPercAutPianFeriePk()); + } + + /** + * Convert DpercAutPianFeriePkCriteria to a {@link Specification} + * + * @param criteria + * @return + */ + private Specification createSpecification(DpercAutPianFeriePkCriteria criteria) { + Specification specification = Specification.where(null); + + if (criteria != null) { + // Attribute filters + if (criteria.getSequIdPercAutPianFeriePk() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getSequIdPercAutPianFeriePk(), DpercAutPianFeriePk_.sequIdPercAutPianFeriePk)); + } + if (criteria.getFlagEliminato() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.getFlagEliminato(), + DpercAutPianFeriePk_.flagEliminato)); + } + if (criteria.getUtenteUltimaModifica() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getUtenteUltimaModifica(), DpercAutPianFeriePk_.utenteUltimaModifica)); + } + if (criteria.getDataUltimaModifica() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataUltimaModifica(), DpercAutPianFeriePk_.dataUltimaModifica)); + } + + } + return specification; + } + + @Override + @Transactional() + public DpercAutPianFeriePk bulkUpdate(DpercAutPianFeriePk dpercAutPianFeriePk) { + List updateTheDpercAutPianFerieH = dpercAutPianFeriePk.getTheDpercAutPianFerieH().stream() + .filter(child -> !child.isDeletedEntityState()).collect(Collectors.toList()); + List deleteTheDpercAutPianFerieH = dpercAutPianFeriePk.getTheDpercAutPianFerieH().stream() + .filter(GenericEntity::isDeletedEntityState).collect(Collectors.toList()); + + dpercAutPianFeriePk.setTheDpercAutPianFerieH(updateTheDpercAutPianFerieH); + + DpercAutPianFeriePk update = this.update(dpercAutPianFeriePk); + + deleteTheDpercAutPianFerieH + .forEach(child -> dpercAutPianFerieHService.deleteById(child.getSequIdPercAutPianFerieH())); + return update; + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFerieHServiceImpl.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFerieHServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..7b33417ff5ac5bf0defdb5921e595666eb524f9e --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFerieHServiceImpl.java @@ -0,0 +1,313 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import java.util.Map; +import java.util.List; +import java.util.Locale; +import java.util.HashMap; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ResourceBundle; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; + +import org.springframework.context.i18n.LocaleContextHolder; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.sf.jasperreports.engine.JRParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.JasperReport; +import net.sf.jasperreports.engine.JasperFillManager; +import net.sf.jasperreports.engine.JasperExportManager; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +import it.micegroup.voila2runtime.filter.LongFilter; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH_; +import it.micegroup.gestioneferie.configurazionepf.criteria.DregolePianiFerieHCriteria; +import it.micegroup.gestioneferie.configurazionepf.repository.DregolePianiFerieHRepository; +import it.micegroup.voila2runtime.specification.FilterService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH_; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk_; +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.libs.service.BaseServiceImpl; + +import it.micegroup.voila2runtime.exception.BusinessException; +import net.sf.jasperreports.engine.JRException; + +@RequiredArgsConstructor +@Service +@Transactional +public class DregolePianiFerieHServiceImpl extends BaseServiceImpl implements DregolePianiFerieHService { + + private final DregolePianiFerieHRepository dregolePianiFerieHRepository; + private final FilterService filterService; + + // CHILD SERVICES + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DregolePianiFerieHServiceImpl.class); + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll(org. springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + return dregolePianiFerieHRepository.findAll(pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll() + */ + @Override + @Transactional(readOnly = true) + public List findAll() { + return dregolePianiFerieHRepository.findAll(); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object, org.springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findByCriteria(DregolePianiFerieHCriteria criteria, Pageable pageable) { + final Specification specification = createSpecification(criteria); + return dregolePianiFerieHRepository.findAll(specification, pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object) + */ + @Override + @Transactional(readOnly = true) + public List findByCriteria(DregolePianiFerieHCriteria criteria) { + final Specification specification = createSpecification(criteria); + return dregolePianiFerieHRepository.findAll(specification); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findById(java.lang. Object) + */ + @Override + @Transactional(readOnly = true) + public Optional findById(Long id) { + return dregolePianiFerieHRepository.findBySequIdRegolePianiFerieH(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * exists(java.lang. Object) + */ + @Override + public boolean exists(Long id) { + return dregolePianiFerieHRepository.existsById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * insert(java. lang.Object) + */ + @Override + public DregolePianiFerieH insert(@Valid DregolePianiFerieH entity) { + return dregolePianiFerieHRepository.save(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * update(java. lang.Object) + */ + @Override + public DregolePianiFerieH update(@Valid DregolePianiFerieH entity) { + return dregolePianiFerieHRepository.save(entity); + } + + @Override + public void delete(DregolePianiFerieH entity) { + dregolePianiFerieHRepository.delete(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteById(java.lang. Object) + */ + @Override + public void deleteById(Long id) { + dregolePianiFerieHRepository.deleteById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteByIdIn(java.lang. Object) + */ + @Override + public void deleteByIdIn(Collection ids) { + dregolePianiFerieHRepository.deleteByIdIn(ids); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByObjectKey(java.lang.String) + */ + @Override + @Transactional(readOnly = true) + public Optional findByObjectKey(String id) { + DregolePianiFerieH dregolePianiFerieH = new DregolePianiFerieH(id); + + return findById(dregolePianiFerieH.getSequIdRegolePianiFerieH()); + } + + @Override + public Page findByTheDregolePianiFeriePk(DregolePianiFeriePk parentEntity, Pageable pageable) { + return dregolePianiFerieHRepository.findByTheDregolePianiFeriePk(parentEntity, pageable); + } + + /** + * Convert DregolePianiFerieHCriteria to a {@link Specification} + * + * @param criteria + * @return + */ + private Specification createSpecification(DregolePianiFerieHCriteria criteria) { + Specification specification = Specification.where(null); + + if (criteria != null) { + // Attribute filters + if (criteria.getSequIdRegolePianiFerieH() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getSequIdRegolePianiFerieH(), DregolePianiFerieH_.sequIdRegolePianiFerieH)); + } + if (criteria.getNumMinGgDaPianificare() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getNumMinGgDaPianificare(), DregolePianiFerieH_.numMinGgDaPianificare)); + } + if (criteria.getNumMaxGgDaPianificare() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getNumMaxGgDaPianificare(), DregolePianiFerieH_.numMaxGgDaPianificare)); + } + if (criteria.getNumePercMinGiorniPresenza() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getNumePercMinGiorniPresenza(), DregolePianiFerieH_.numePercMinGiorniPresenza)); + } + if (criteria.getFlagValidoUoSubordinate() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getFlagValidoUoSubordinate(), DregolePianiFerieH_.flagValidoUoSubordinate)); + } + if (criteria.getFkAmministrazione() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkAmministrazione(), DregolePianiFerieH_.fkAmministrazione)); + } + if (criteria.getFkRegolaPianoFeriePk() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkRegolaPianoFeriePk(), DregolePianiFerieH_.fkRegolaPianoFeriePk)); + } + if (criteria.getFkTipoOrganigramma() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkTipoOrganigramma(), DregolePianiFerieH_.fkTipoOrganigramma)); + } + if (criteria.getFkUnitaFunzionale() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkUnitaFunzionale(), DregolePianiFerieH_.fkUnitaFunzionale)); + } + if (criteria.getFkUnitaOrganizzativaPk() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getFkUnitaOrganizzativaPk(), DregolePianiFerieH_.fkUnitaOrganizzativaPk)); + } + if (criteria.getFlagEliminato() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.getFlagEliminato(), + DregolePianiFerieH_.flagEliminato)); + } + if (criteria.getUtenteUltimaModifica() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getUtenteUltimaModifica(), DregolePianiFerieH_.utenteUltimaModifica)); + } + if (criteria.getDataUltimaModifica() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataUltimaModifica(), DregolePianiFerieH_.dataUltimaModifica)); + } + if (criteria.getDataInizioValidita() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataInizioValidita(), DregolePianiFerieH_.dataInizioValidita)); + } + if (criteria.getDataFineValidita() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataFineValidita(), DregolePianiFerieH_.dataFineValidita)); + } + + if (criteria.getTheDregolePianiFeriePkObjectKey() != null) { + DregolePianiFeriePk dregolePianiFeriePk = new DregolePianiFeriePk( + criteria.getTheDregolePianiFeriePkObjectKey()); + + specification = specification.and( + filterService.generateEqualsSpecification(dregolePianiFeriePk.getSequIdRegolePianiFeriePk(), + r -> r.get(DregolePianiFerieH_.theDregolePianiFeriePk) + .get(DregolePianiFeriePk_.sequIdRegolePianiFeriePk))); + } + + } + return specification; + } + + @Override + @Transactional() + public DregolePianiFerieH bulkUpdate(DregolePianiFerieH dregolePianiFerieH) { + + DregolePianiFerieH update = this.update(dregolePianiFerieH); + + return update; + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFeriePkServiceImpl.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFeriePkServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..fe5cceab262043c4c28769e072a3418f1e37e73c --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/java/it/micegroup/gestioneferie/configurazionepf/service/DregolePianiFeriePkServiceImpl.java @@ -0,0 +1,277 @@ +package it.micegroup.gestioneferie.configurazionepf.service; + +import java.util.Map; +import java.util.List; +import java.util.Locale; +import java.util.HashMap; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ResourceBundle; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; + +import org.springframework.context.i18n.LocaleContextHolder; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.sf.jasperreports.engine.JRParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.JasperReport; +import net.sf.jasperreports.engine.JasperFillManager; +import net.sf.jasperreports.engine.JasperExportManager; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk_; +import it.micegroup.gestioneferie.configurazionepf.criteria.DregolePianiFeriePkCriteria; +import it.micegroup.gestioneferie.configurazionepf.repository.DregolePianiFeriePkRepository; +import it.micegroup.voila2runtime.specification.FilterService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk_; +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.libs.service.BaseServiceImpl; + +import java.util.stream.Collectors; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH; +import it.micegroup.voila2runtime.entity.GenericEntity; +import it.micegroup.voila2runtime.exception.BusinessException; +import net.sf.jasperreports.engine.JRException; + +@RequiredArgsConstructor +@Service +@Transactional +public class DregolePianiFeriePkServiceImpl extends BaseServiceImpl implements DregolePianiFeriePkService { + + private final DregolePianiFeriePkRepository dregolePianiFeriePkRepository; + private final FilterService filterService; + + // CHILD SERVICES + private final DregolePianiFerieHService dregolePianiFerieHService; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DregolePianiFeriePkServiceImpl.class); + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll(org. springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findAll(Pageable pageable) { + return dregolePianiFeriePkRepository.findAll(pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findAll() + */ + @Override + @Transactional(readOnly = true) + public List findAll() { + return dregolePianiFeriePkRepository.findAll(); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object, org.springframework.data.domain.Pageable) + */ + @Override + @Transactional(readOnly = true) + public Page findByCriteria(DregolePianiFeriePkCriteria criteria, Pageable pageable) { + final Specification specification = createSpecification(criteria); + return dregolePianiFeriePkRepository.findAll(specification, pageable); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByCriteria(java. lang.Object) + */ + @Override + @Transactional(readOnly = true) + public List findByCriteria(DregolePianiFeriePkCriteria criteria) { + final Specification specification = createSpecification(criteria); + return dregolePianiFeriePkRepository.findAll(specification); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findById(java.lang. Object) + */ + @Override + @Transactional(readOnly = true) + public Optional findById(Long id) { + return dregolePianiFeriePkRepository.findBySequIdRegolePianiFeriePk(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * exists(java.lang. Object) + */ + @Override + public boolean exists(Long id) { + return dregolePianiFeriePkRepository.existsById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * insert(java. lang.Object) + */ + @Override + public DregolePianiFeriePk insert(@Valid DregolePianiFeriePk entity) { + return dregolePianiFeriePkRepository.save(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * update(java. lang.Object) + */ + @Override + public DregolePianiFeriePk update(@Valid DregolePianiFeriePk entity) { + return dregolePianiFeriePkRepository.save(entity); + } + + @Override + public void delete(DregolePianiFeriePk entity) { + dregolePianiFeriePkRepository.delete(entity); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteById(java.lang. Object) + */ + @Override + public void deleteById(Long id) { + dregolePianiFeriePkRepository.deleteById(id); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * deleteByIdIn(java.lang. Object) + */ + @Override + public void deleteByIdIn(Collection ids) { + dregolePianiFeriePkRepository.deleteByIdIn(ids); + } + + /* + * (non-Javadoc) + * + * @see + * it.micegroup.gestioneferie.configurazionepf.service.GenericEntityService# + * findByObjectKey(java.lang.String) + */ + @Override + @Transactional(readOnly = true) + public Optional findByObjectKey(String id) { + DregolePianiFeriePk dregolePianiFeriePk = new DregolePianiFeriePk(id); + + return findById(dregolePianiFeriePk.getSequIdRegolePianiFeriePk()); + } + + /** + * Convert DregolePianiFeriePkCriteria to a {@link Specification} + * + * @param criteria + * @return + */ + private Specification createSpecification(DregolePianiFeriePkCriteria criteria) { + Specification specification = Specification.where(null); + + if (criteria != null) { + // Attribute filters + if (criteria.getSequIdRegolePianiFeriePk() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getSequIdRegolePianiFeriePk(), DregolePianiFeriePk_.sequIdRegolePianiFeriePk)); + } + if (criteria.getCodiRegola() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.getCodiRegola(), + DregolePianiFeriePk_.codiRegola)); + } + if (criteria.getDescRegola() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.getDescRegola(), + DregolePianiFeriePk_.descRegola)); + } + if (criteria.getFlagEliminato() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.getFlagEliminato(), + DregolePianiFeriePk_.flagEliminato)); + } + if (criteria.getUtenteUltimaModifica() != null) { + specification = specification.and(filterService.generateStringSpecification( + criteria.getUtenteUltimaModifica(), DregolePianiFeriePk_.utenteUltimaModifica)); + } + if (criteria.getDataUltimaModifica() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataUltimaModifica(), DregolePianiFeriePk_.dataUltimaModifica)); + } + if (criteria.getDataInizioValidita() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataInizioValidita(), DregolePianiFeriePk_.dataInizioValidita)); + } + if (criteria.getDataFineValidita() != null) { + specification = specification.and(filterService.generateRangeSpecification( + criteria.getDataFineValidita(), DregolePianiFeriePk_.dataFineValidita)); + } + + } + return specification; + } + + @Override + @Transactional() + public DregolePianiFeriePk bulkUpdate(DregolePianiFeriePk dregolePianiFeriePk) { + List updateTheDregolePianiFerieH = dregolePianiFeriePk.getTheDregolePianiFerieH().stream() + .filter(child -> !child.isDeletedEntityState()).collect(Collectors.toList()); + List deleteTheDregolePianiFerieH = dregolePianiFeriePk.getTheDregolePianiFerieH().stream() + .filter(GenericEntity::isDeletedEntityState).collect(Collectors.toList()); + + dregolePianiFeriePk.setTheDregolePianiFerieH(updateTheDregolePianiFerieH); + + DregolePianiFeriePk update = this.update(dregolePianiFeriePk); + + deleteTheDregolePianiFerieH + .forEach(child -> dregolePianiFerieHService.deleteById(child.getSequIdRegolePianiFerieH())); + return update; + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/resources/ciao.txt b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/resources/ciao.txt new file mode 100644 index 0000000000000000000000000000000000000000..8c9e1f737937ac329364a6a3f8528d786aa87baf --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-impl/src/main/resources/ciao.txt @@ -0,0 +1 @@ +HELLOOOOOOOOOOOO \ No newline at end of file diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.classpath b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..c2a5cfacd84437ac2c6ea83ec09e576d4882e2bb --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.classpath @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.project b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.project new file mode 100644 index 0000000000000000000000000000000000000000..23f8a2e0a82d3ca7cb09a9629cce5ea6e67a3f9f --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.project @@ -0,0 +1,92 @@ + + + gestioneferie-ms-configurazionepf-model + + + gestioneferie + gestioneferie-ms-configurazionepf + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.acceleo.ide.ui.acceleoBuilder + + + compilation.kind + compilation.absolute.path + + + compliance + pragmatic + + + resource.kind + xmi + + + trim-position + false + + + + + org.eclipse.acceleo.ide.ui.acceleoBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.acceleo.ide.ui.acceleoNature + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + + + 1644425858680 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858698 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425858769 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..99f26c0203a7844de00dbfc56e6a35d8ed3c022c --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.voilaProject b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/META-INF/MANIFEST.MF b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/META-INF/MANIFEST.MF new file mode 100644 index 0000000000000000000000000000000000000000..8a545dd249ed736adf09d8a1642ff81f6a0f0d78 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/META-INF/MANIFEST.MF @@ -0,0 +1,13 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: configurazionepf +Bundle-SymbolicName: configurazionepf +Bundle-Version: 1.0.0.qualifier +Automatic-Module-Name: configurazionepf +Bundle-RequiredExecutionEnvironment: JavaSE-15 +Export-Package: it.micegroup.gestioneferie.configurazionepf.model +Require-Bundle: org.eclipse.acceleo.engine, + it.micegroup.voila2.cartridge.library;bundle-version="1.0.0", + it.micegroup.voila2.cartridge.angular;bundle-version="1.0.0", + it.mice.voila2.acceleogenerator;bundle-version="1.0.0" + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/pom.xml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..e42c237940c4672017e6cd347ee00a089838a659 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/pom.xml @@ -0,0 +1,24 @@ + + + + 4.0.0 + + gestioneferie-ms-configurazionepf-model + gestioneferie-ms-configurazionepf-model + Voila 2 Sample Project rel. 0.0.1 + pom + + + it.micegroup + gestioneferie-ms-configurazionepf + 0.0.1-SNAPSHOT + ../../pom.xml + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/Main.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..4c25e87d23650423304d6686318542f982f1d68d --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/Main.java @@ -0,0 +1,415 @@ +/******************************************************************************* + * Copyright (c) 2008, 2012 Obeo. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package it.micegroup.gestioneferie.configurazionepf.model; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.acceleo.engine.event.IAcceleoTextGenerationListener; +import org.eclipse.acceleo.engine.generation.strategy.IAcceleoGenerationStrategy; +import org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator; +import org.eclipse.emf.common.util.BasicMonitor; +import org.eclipse.emf.common.util.Monitor; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.ResourceSet; + +/** + * Entry point of the 'Main' generation module. + * + * @generated + */ +public class Main extends AbstractAcceleoGenerator { + /** + * The name of the module. + * + * @generated + */ + public static final String MODULE_FILE_NAME = "/it/micegroup/gestioneferie/configurazionepf/model/main"; + + /** + * The name of the templates that are to be generated. + * + * @generated + */ + public static final String[] TEMPLATE_NAMES = { "mainClass" }; + + /** + * The list of properties files from the launch parameters (Launch configuration). + * + * @generated + */ + private List propertiesFiles = new ArrayList(); + + /** + * Allows the public constructor to be used. Note that a generator created + * this way cannot be used to launch generations before one of + * {@link #initialize(EObject, File, List)} or + * {@link #initialize(URI, File, List)} is called. + *

+ * The main reason for this constructor is to allow clients of this + * generation to call it from another Java file, as it allows for the + * retrieval of {@link #getProperties()} and + * {@link #getGenerationListeners()}. + *

+ * + * @generated + */ + public Main() { + // Empty implementation + } + + /** + * This allows clients to instantiates a generator with all required information. + * + * @param modelURI + * URI where the model on which this generator will be used is located. + * @param targetFolder + * This will be used as the output folder for this generation : it will be the base path + * against which all file block URLs will be resolved. + * @param arguments + * If the template which will be called requires more than one argument taken from the model, + * pass them here. + * @throws IOException + * This can be thrown in three scenarios : the module cannot be found, it cannot be loaded, or + * the model cannot be loaded. + * @generated + */ + public Main(URI modelURI, File targetFolder, + List arguments) throws IOException { + initialize(modelURI, targetFolder, arguments); + } + + /** + * This allows clients to instantiates a generator with all required information. + * + * @param model + * We'll iterate over the content of this element to find Objects matching the first parameter + * of the template we need to call. + * @param targetFolder + * This will be used as the output folder for this generation : it will be the base path + * against which all file block URLs will be resolved. + * @param arguments + * If the template which will be called requires more than one argument taken from the model, + * pass them here. + * @throws IOException + * This can be thrown in two scenarios : the module cannot be found, or it cannot be loaded. + * @generated + */ + public Main(EObject model, File targetFolder, + List arguments) throws IOException { + initialize(model, targetFolder, arguments); + } + + /** + * This can be used to launch the generation from a standalone application. + * + * @param args + * Arguments of the generation. + * @generated + */ + public static void main(String[] args) { + try { + if (args.length < 2) { + System.out.println("Arguments not valid : {model, folder}."); + } else { + URI modelURI = URI.createFileURI(args[0]); + File folder = new File(args[1]); + + List arguments = new ArrayList(); + + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * Add in this list all the arguments used by the starting point of the generation + * If your main template is called on an element of your model and a String, you can + * add in "arguments" this "String" attribute. + */ + + Main generator = new Main(modelURI, folder, arguments); + + /* + * Add the properties from the launch arguments. + * If you want to programmatically add new properties, add them in "propertiesFiles" + * You can add the absolute path of a properties files, or even a project relative path. + * If you want to add another "protocol" for your properties files, please override + * "getPropertiesLoaderService(AcceleoService)" in order to return a new property loader. + * The behavior of the properties loader service is explained in the Acceleo documentation + * (Help -> Help Contents). + */ + + for (int i = 2; i < args.length; i++) { + generator.addPropertiesFile(args[i]); + } + + generator.doGenerate(new BasicMonitor()); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Launches the generation described by this instance. + * + * @param monitor + * This will be used to display progress information to the user. + * @throws IOException + * This will be thrown if any of the output files cannot be saved to disk. + * @generated + */ + @Override + public void doGenerate(Monitor monitor) throws IOException { + /* + * TODO if you wish to change the generation as a whole, override this. The default behavior should + * be sufficient in most cases. If you want to change the content of this method, do NOT forget to + * change the "@generated" tag in the Javadoc of this method to "@generated NOT". Without this new tag, + * any compilation of the Acceleo module with the main template that has caused the creation of this + * class will revert your modifications. If you encounter a problem with an unresolved proxy during the + * generation, you can remove the comments in the following instructions to check for problems. Please + * note that those instructions may have a significant impact on the performances. + */ + + //org.eclipse.emf.ecore.util.EcoreUtil.resolveAll(model); + + /* + * If you want to check for potential errors in your models before the launch of the generation, you + * use the code below. + */ + + //if (model != null && model.eResource() != null) { + // List errors = model.eResource().getErrors(); + // for (org.eclipse.emf.ecore.resource.Resource.Diagnostic diagnostic : errors) { + // System.err.println(diagnostic.toString()); + // } + //} + + super.doGenerate(monitor); + } + + /** + * If this generator needs to listen to text generation events, listeners can be returned from here. + * + * @return List of listeners that are to be notified when text is generated through this launch. + * @generated + */ + @Override + public List getGenerationListeners() { + List listeners = super.getGenerationListeners(); + /* + * TODO if you need to listen to generation event, add listeners to the list here. If you want to change + * the content of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method + * to "@generated NOT". Without this new tag, any compilation of the Acceleo module with the main template + * that has caused the creation of this class will revert your modifications. + */ + return listeners; + } + + /** + * If you need to change the way files are generated, this is your entry point. + *

+ * The default is {@link org.eclipse.acceleo.engine.generation.strategy.DefaultStrategy}; it generates + * files on the fly. If you only need to preview the results, return a new + * {@link org.eclipse.acceleo.engine.generation.strategy.PreviewStrategy}. Both of these aren't aware of + * the running Eclipse and can be used standalone. + *

+ *

+ * If you need the file generation to be aware of the workspace (A typical example is when you wanna + * override files that are under clear case or any other VCS that could forbid the overriding), then + * return a new {@link org.eclipse.acceleo.engine.generation.strategy.WorkspaceAwareStrategy}. + * Note, however, that this cannot be used standalone. + *

+ *

+ * All three of these default strategies support merging through JMerge. + *

+ * + * @return The generation strategy that is to be used for generations launched through this launcher. + * @generated + */ + @Override + public IAcceleoGenerationStrategy getGenerationStrategy() { + return super.getGenerationStrategy(); + } + + /** + * This will be called in order to find and load the module that will be launched through this launcher. + * We expect this name not to contain file extension, and the module to be located beside the launcher. + * + * @return The name of the module that is to be launched. + * @generated + */ + @Override + public String getModuleName() { + return MODULE_FILE_NAME; + } + + /** + * If the module(s) called by this launcher require properties files, return their qualified path from + * here.Take note that the first added properties files will take precedence over subsequent ones if they + * contain conflicting keys. + * + * @return The list of properties file we need to add to the generation context. + * @see java.util.ResourceBundle#getBundle(String) + * @generated + */ + @Override + public List getProperties() { + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * TODO if your generation module requires access to properties files, add their qualified path to the list here. + * + * Properties files can be located in an Eclipse plug-in or in the file system (all Acceleo projects are Eclipse + * plug-in). In order to use properties files located in an Eclipse plugin, you need to add the path of the properties + * files to the "propertiesFiles" list: + * + * final String prefix = "platform:/plugin/"; + * final String pluginName = "org.eclipse.acceleo.module.sample"; + * final String packagePath = "/org/eclipse/acceleo/module/sample/properties/"; + * final String fileName = "default.properties"; + * propertiesFiles.add(prefix + pluginName + packagePath + fileName); + * + * With this mechanism, you can load properties files from your plugin or from another plugin. + * + * You may want to load properties files from the file system, for that you need to add the absolute path of the file: + * + * propertiesFiles.add("C:\Users\MyName\MyFile.properties"); + * + * If you want to let your users add properties files located in the same folder as the model: + * + * if (EMFPlugin.IS_ECLIPSE_RUNNING && model != null && model.eResource() != null) { + * propertiesFiles.addAll(AcceleoEngineUtils.getPropertiesFilesNearModel(model.eResource())); + * } + * + * To learn more about Properties Files, have a look at the Acceleo documentation (Help -> Help Contents). + */ + return propertiesFiles; + } + + /** + * Adds a properties file in the list of properties files. + * + * @param propertiesFile + * The properties file to add. + * @generated + * @since 3.1 + */ + @Override + public void addPropertiesFile(String propertiesFile) { + this.propertiesFiles.add(propertiesFile); + } + + /** + * This will be used to get the list of templates that are to be launched by this launcher. + * + * @return The list of templates to call on the module {@link #getModuleName()}. + * @generated + */ + @Override + public String[] getTemplateNames() { + return TEMPLATE_NAMES; + } + + /** + * This can be used to update the resource set's package registry with all needed EPackages. + * + * @param resourceSet + * The resource set which registry has to be updated. + * @generated + */ + @Override + public void registerPackages(ResourceSet resourceSet) { + super.registerPackages(resourceSet); + if (!isInWorkspace(org.eclipse.uml2.uml.UMLPackage.class)) { + resourceSet.getPackageRegistry().put(org.eclipse.uml2.uml.UMLPackage.eINSTANCE.getNsURI(), org.eclipse.uml2.uml.UMLPackage.eINSTANCE); + } + + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * If you need additional package registrations, you can register them here. The following line + * (in comment) is an example of the package registration for UML. + * + * You can use the method "isInWorkspace(Class c)" to check if the package that you are about to + * register is in the workspace. + * + * To register a package properly, please follow the following conventions: + * + * If the package is located in another plug-in, already installed in Eclipse. The following content should + * have been generated at the beginning of this method. Do not register the package using this mechanism if + * the metamodel is located in the workspace. + * + * if (!isInWorkspace(UMLPackage.class)) { + * // The normal package registration if your metamodel is in a plugin. + * resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE); + * } + * + * If the package is located in another project in your workspace, the plugin containing the package has not + * been register by EMF and Acceleo should register it automatically. If you want to use the generator in + * stand alone, the regular registration (seen a couple lines before) is needed. + * + * To learn more about Package Registration, have a look at the Acceleo documentation (Help -> Help Contents). + */ + } + + /** + * This can be used to update the resource set's resource factory registry with all needed factories. + * + * @param resourceSet + * The resource set which registry has to be updated. + * @generated + */ + @Override + public void registerResourceFactories(ResourceSet resourceSet) { + super.registerResourceFactories(resourceSet); + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * TODO If you need additional resource factories registrations, you can register them here. the following line + * (in comment) is an example of the resource factory registration. + * + * If you want to use the generator in stand alone, the resource factory registration will be required. + * + * To learn more about the registration of Resource Factories, have a look at the Acceleo documentation (Help -> Help Contents). + */ + + // resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(XyzResource.FILE_EXTENSION, XyzResource.Factory.INSTANCE); + + /* + * Some metamodels require a very complex setup for standalone usage. For example, if you want to use a generator + * targetting UML models in standalone, you NEED to use the following: + */ + // UMLResourcesUtil.init(resourceSet) + } + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainFE.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainFE.java new file mode 100644 index 0000000000000000000000000000000000000000..4741cc2e395424bb5907a2e6c10f683c107bfe76 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainFE.java @@ -0,0 +1,415 @@ +/******************************************************************************* + * Copyright (c) 2008, 2012 Obeo. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package it.micegroup.gestioneferie.configurazionepf.model; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.acceleo.engine.event.IAcceleoTextGenerationListener; +import org.eclipse.acceleo.engine.generation.strategy.IAcceleoGenerationStrategy; +import org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator; +import org.eclipse.emf.common.util.BasicMonitor; +import org.eclipse.emf.common.util.Monitor; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.ResourceSet; + +/** + * Entry point of the 'MainFE' generation module. + * + * @generated + */ +public class MainFE extends AbstractAcceleoGenerator { + /** + * The name of the module. + * + * @generated + */ + public static final String MODULE_FILE_NAME = "/it/micegroup/gestioneferie/configurazionepf/model/mainFE"; + + /** + * The name of the templates that are to be generated. + * + * @generated + */ + public static final String[] TEMPLATE_NAMES = { "mainClassFE" }; + + /** + * The list of properties files from the launch parameters (Launch configuration). + * + * @generated + */ + private List propertiesFiles = new ArrayList(); + + /** + * Allows the public constructor to be used. Note that a generator created + * this way cannot be used to launch generations before one of + * {@link #initialize(EObject, File, List)} or + * {@link #initialize(URI, File, List)} is called. + *

+ * The main reason for this constructor is to allow clients of this + * generation to call it from another Java file, as it allows for the + * retrieval of {@link #getProperties()} and + * {@link #getGenerationListeners()}. + *

+ * + * @generated + */ + public MainFE() { + // Empty implementation + } + + /** + * This allows clients to instantiates a generator with all required information. + * + * @param modelURI + * URI where the model on which this generator will be used is located. + * @param targetFolder + * This will be used as the output folder for this generation : it will be the base path + * against which all file block URLs will be resolved. + * @param arguments + * If the template which will be called requires more than one argument taken from the model, + * pass them here. + * @throws IOException + * This can be thrown in three scenarios : the module cannot be found, it cannot be loaded, or + * the model cannot be loaded. + * @generated + */ + public MainFE(URI modelURI, File targetFolder, + List arguments) throws IOException { + initialize(modelURI, targetFolder, arguments); + } + + /** + * This allows clients to instantiates a generator with all required information. + * + * @param model + * We'll iterate over the content of this element to find Objects matching the first parameter + * of the template we need to call. + * @param targetFolder + * This will be used as the output folder for this generation : it will be the base path + * against which all file block URLs will be resolved. + * @param arguments + * If the template which will be called requires more than one argument taken from the model, + * pass them here. + * @throws IOException + * This can be thrown in two scenarios : the module cannot be found, or it cannot be loaded. + * @generated + */ + public MainFE(EObject model, File targetFolder, + List arguments) throws IOException { + initialize(model, targetFolder, arguments); + } + + /** + * This can be used to launch the generation from a standalone application. + * + * @param args + * Arguments of the generation. + * @generated + */ + public static void main(String[] args) { + try { + if (args.length < 2) { + System.out.println("Arguments not valid : {model, folder}."); + } else { + URI modelURI = URI.createFileURI(args[0]); + File folder = new File(args[1]); + + List arguments = new ArrayList(); + + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * Add in this list all the arguments used by the starting point of the generation + * If your main template is called on an element of your model and a String, you can + * add in "arguments" this "String" attribute. + */ + + MainFE generator = new MainFE(modelURI, folder, arguments); + + /* + * Add the properties from the launch arguments. + * If you want to programmatically add new properties, add them in "propertiesFiles" + * You can add the absolute path of a properties files, or even a project relative path. + * If you want to add another "protocol" for your properties files, please override + * "getPropertiesLoaderService(AcceleoService)" in order to return a new property loader. + * The behavior of the properties loader service is explained in the Acceleo documentation + * (Help -> Help Contents). + */ + + for (int i = 2; i < args.length; i++) { + generator.addPropertiesFile(args[i]); + } + + generator.doGenerate(new BasicMonitor()); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Launches the generation described by this instance. + * + * @param monitor + * This will be used to display progress information to the user. + * @throws IOException + * This will be thrown if any of the output files cannot be saved to disk. + * @generated + */ + @Override + public void doGenerate(Monitor monitor) throws IOException { + /* + * TODO if you wish to change the generation as a whole, override this. The default behavior should + * be sufficient in most cases. If you want to change the content of this method, do NOT forget to + * change the "@generated" tag in the Javadoc of this method to "@generated NOT". Without this new tag, + * any compilation of the Acceleo module with the main template that has caused the creation of this + * class will revert your modifications. If you encounter a problem with an unresolved proxy during the + * generation, you can remove the comments in the following instructions to check for problems. Please + * note that those instructions may have a significant impact on the performances. + */ + + //org.eclipse.emf.ecore.util.EcoreUtil.resolveAll(model); + + /* + * If you want to check for potential errors in your models before the launch of the generation, you + * use the code below. + */ + + //if (model != null && model.eResource() != null) { + // List errors = model.eResource().getErrors(); + // for (org.eclipse.emf.ecore.resource.Resource.Diagnostic diagnostic : errors) { + // System.err.println(diagnostic.toString()); + // } + //} + + super.doGenerate(monitor); + } + + /** + * If this generator needs to listen to text generation events, listeners can be returned from here. + * + * @return List of listeners that are to be notified when text is generated through this launch. + * @generated + */ + @Override + public List getGenerationListeners() { + List listeners = super.getGenerationListeners(); + /* + * TODO if you need to listen to generation event, add listeners to the list here. If you want to change + * the content of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method + * to "@generated NOT". Without this new tag, any compilation of the Acceleo module with the main template + * that has caused the creation of this class will revert your modifications. + */ + return listeners; + } + + /** + * If you need to change the way files are generated, this is your entry point. + *

+ * The default is {@link org.eclipse.acceleo.engine.generation.strategy.DefaultStrategy}; it generates + * files on the fly. If you only need to preview the results, return a new + * {@link org.eclipse.acceleo.engine.generation.strategy.PreviewStrategy}. Both of these aren't aware of + * the running Eclipse and can be used standalone. + *

+ *

+ * If you need the file generation to be aware of the workspace (A typical example is when you wanna + * override files that are under clear case or any other VCS that could forbid the overriding), then + * return a new {@link org.eclipse.acceleo.engine.generation.strategy.WorkspaceAwareStrategy}. + * Note, however, that this cannot be used standalone. + *

+ *

+ * All three of these default strategies support merging through JMerge. + *

+ * + * @return The generation strategy that is to be used for generations launched through this launcher. + * @generated + */ + @Override + public IAcceleoGenerationStrategy getGenerationStrategy() { + return super.getGenerationStrategy(); + } + + /** + * This will be called in order to find and load the module that will be launched through this launcher. + * We expect this name not to contain file extension, and the module to be located beside the launcher. + * + * @return The name of the module that is to be launched. + * @generated + */ + @Override + public String getModuleName() { + return MODULE_FILE_NAME; + } + + /** + * If the module(s) called by this launcher require properties files, return their qualified path from + * here.Take note that the first added properties files will take precedence over subsequent ones if they + * contain conflicting keys. + * + * @return The list of properties file we need to add to the generation context. + * @see java.util.ResourceBundle#getBundle(String) + * @generated + */ + @Override + public List getProperties() { + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * TODO if your generation module requires access to properties files, add their qualified path to the list here. + * + * Properties files can be located in an Eclipse plug-in or in the file system (all Acceleo projects are Eclipse + * plug-in). In order to use properties files located in an Eclipse plugin, you need to add the path of the properties + * files to the "propertiesFiles" list: + * + * final String prefix = "platform:/plugin/"; + * final String pluginName = "org.eclipse.acceleo.module.sample"; + * final String packagePath = "/org/eclipse/acceleo/module/sample/properties/"; + * final String fileName = "default.properties"; + * propertiesFiles.add(prefix + pluginName + packagePath + fileName); + * + * With this mechanism, you can load properties files from your plugin or from another plugin. + * + * You may want to load properties files from the file system, for that you need to add the absolute path of the file: + * + * propertiesFiles.add("C:\Users\MyName\MyFile.properties"); + * + * If you want to let your users add properties files located in the same folder as the model: + * + * if (EMFPlugin.IS_ECLIPSE_RUNNING && model != null && model.eResource() != null) { + * propertiesFiles.addAll(AcceleoEngineUtils.getPropertiesFilesNearModel(model.eResource())); + * } + * + * To learn more about Properties Files, have a look at the Acceleo documentation (Help -> Help Contents). + */ + return propertiesFiles; + } + + /** + * Adds a properties file in the list of properties files. + * + * @param propertiesFile + * The properties file to add. + * @generated + * @since 3.1 + */ + @Override + public void addPropertiesFile(String propertiesFile) { + this.propertiesFiles.add(propertiesFile); + } + + /** + * This will be used to get the list of templates that are to be launched by this launcher. + * + * @return The list of templates to call on the module {@link #getModuleName()}. + * @generated + */ + @Override + public String[] getTemplateNames() { + return TEMPLATE_NAMES; + } + + /** + * This can be used to update the resource set's package registry with all needed EPackages. + * + * @param resourceSet + * The resource set which registry has to be updated. + * @generated + */ + @Override + public void registerPackages(ResourceSet resourceSet) { + super.registerPackages(resourceSet); + if (!isInWorkspace(org.eclipse.uml2.uml.UMLPackage.class)) { + resourceSet.getPackageRegistry().put(org.eclipse.uml2.uml.UMLPackage.eINSTANCE.getNsURI(), org.eclipse.uml2.uml.UMLPackage.eINSTANCE); + } + + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * If you need additional package registrations, you can register them here. The following line + * (in comment) is an example of the package registration for UML. + * + * You can use the method "isInWorkspace(Class c)" to check if the package that you are about to + * register is in the workspace. + * + * To register a package properly, please follow the following conventions: + * + * If the package is located in another plug-in, already installed in Eclipse. The following content should + * have been generated at the beginning of this method. Do not register the package using this mechanism if + * the metamodel is located in the workspace. + * + * if (!isInWorkspace(UMLPackage.class)) { + * // The normal package registration if your metamodel is in a plugin. + * resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE); + * } + * + * If the package is located in another project in your workspace, the plugin containing the package has not + * been register by EMF and Acceleo should register it automatically. If you want to use the generator in + * stand alone, the regular registration (seen a couple lines before) is needed. + * + * To learn more about Package Registration, have a look at the Acceleo documentation (Help -> Help Contents). + */ + } + + /** + * This can be used to update the resource set's resource factory registry with all needed factories. + * + * @param resourceSet + * The resource set which registry has to be updated. + * @generated + */ + @Override + public void registerResourceFactories(ResourceSet resourceSet) { + super.registerResourceFactories(resourceSet); + /* + * If you want to change the content of this method, do NOT forget to change the "@generated" + * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation + * of the Acceleo module with the main template that has caused the creation of this class will + * revert your modifications. + */ + + /* + * TODO If you need additional resource factories registrations, you can register them here. the following line + * (in comment) is an example of the resource factory registration. + * + * If you want to use the generator in stand alone, the resource factory registration will be required. + * + * To learn more about the registration of Resource Factories, have a look at the Acceleo documentation (Help -> Help Contents). + */ + + // resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(XyzResource.FILE_EXTENSION, XyzResource.Factory.INSTANCE); + + /* + * Some metamodels require a very complex setup for standalone usage. For example, if you want to use a generator + * targetting UML models in standalone, you NEED to use the following: + */ + // UMLResourcesUtil.init(resourceSet) + } + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainGenerator.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..f1bea6ff79aa1a6bd3ffb22507824a2bb3a353b4 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainGenerator.java @@ -0,0 +1,184 @@ + +package it.micegroup.gestioneferie.configurazionepf.model; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; + +import it.mice.voila2.acceleogenerator.core.Main; + +/** + * Entry point of the 'Main' generation module. + * + * @generated + */ +public class MainGenerator extends Main { + /** + * The name of the module. + * + * @generated + */ + public static final String MODULE_FILE_NAME = "/it/micegroup/gestioneferie/configurazionepf/model/main"; + + /** + * The name of the templates that are to be generated. + * + * @generated + */ + public static final String[] TEMPLATE_NAMES = { "mainClass" }; + + /** + * The list of properties files from the launch parameters (Launch + * configuration). + * + * @generated + */ + private List propertiesFiles = new ArrayList(); + + /** + * Allows the public constructor to be used. Note that a generator created this + * way cannot be used to launch generations before one of + * {@link #initialize(EObject, File, List)} or + * {@link #initialize(URI, File, List)} is called. + *

+ * The main reason for this constructor is to allow clients of this generation + * to call it from another Java file, as it allows for the retrieval of + * {@link #getProperties()} and {@link #getGenerationListeners()}. + *

+ * + * @generated + */ + public MainGenerator() { + // Empty implementation + } + + /** + * This allows clients to instantiates a generator with all required + * information. + * + * @param modelURI URI where the model on which this generator will be used + * is located. + * @param targetFolder This will be used as the output folder for this + * generation : it will be the base path against which all + * file block URLs will be resolved. + * @param arguments If the template which will be called requires more than + * one argument taken from the model, pass them here. + * @throws IOException This can be thrown in three scenarios : the module cannot + * be found, it cannot be loaded, or the model cannot be + * loaded. + * @generated + */ + public MainGenerator(URI modelURI, File targetFolder, List arguments) throws IOException { + initialize(modelURI, targetFolder, arguments); + } + + /** + * This allows clients to instantiates a generator with all required + * information. + * + * @param model We'll iterate over the content of this element to find + * Objects matching the first parameter of the template we + * need to call. + * @param targetFolder This will be used as the output folder for this + * generation : it will be the base path against which all + * file block URLs will be resolved. + * @param arguments If the template which will be called requires more than + * one argument taken from the model, pass them here. + * @throws IOException This can be thrown in two scenarios : the module cannot + * be found, or it cannot be loaded. + * @generated + */ + public MainGenerator(EObject model, File targetFolder, List arguments) throws IOException { + initialize(model, targetFolder, arguments); + } + + /** + * This will be called in order to find and load the module that will be + * launched through this launcher. We expect this name not to contain file + * extension, and the module to be located beside the launcher. + * + * @return The name of the module that is to be launched. + * @generated + */ + @Override + public String getModuleName() { + return MODULE_FILE_NAME; + } + + /** + * If the module(s) called by this launcher require properties files, return + * their qualified path from here.Take note that the first added properties + * files will take precedence over subsequent ones if they contain conflicting + * keys. + * + * @return The list of properties file we need to add to the generation context. + * @see java.util.ResourceBundle#getBundle(String) + * @generated NOT + */ + @Override + public List getProperties() { + /* + * If you want to change the content of this method, do NOT forget to change the + * "@generated" tag in the Javadoc of this method to "@generated NOT". Without + * this new tag, any compilation of the Acceleo module with the main template + * that has caused the creation of this class will revert your modifications. + */ + + /* + * TODO if your generation module requires access to properties files, add their + * qualified path to the list here. + * + * Properties files can be located in an Eclipse plug-in or in the file system + * (all Acceleo projects are Eclipse plug-in). In order to use properties files + * located in an Eclipse plugin, you need to add the path of the properties + * files to the "propertiesFiles" list: + * + * final String prefix = "platform:/plugin/"; final String pluginName = + * "org.eclipse.acceleo.module.sample"; final String packagePath = + * "/org/eclipse/acceleo/module/sample/properties/"; final String fileName = + * "default.properties"; propertiesFiles.add(prefix + pluginName + packagePath + + * fileName); + * + * With this mechanism, you can load properties files from your plugin or from + * another plugin. + * + * You may want to load properties files from the file system, for that you need + * to add the absolute path of the file: + * + * propertiesFiles.add("C:\Users\MyName\MyFile.properties"); + * + * If you want to let your users add properties files located in the same folder + * as the model: + * + * if (EMFPlugin.IS_ECLIPSE_RUNNING && model != null && model.eResource() != + * null) { + * propertiesFiles.addAll(AcceleoEngineUtils.getPropertiesFilesNearModel(model. + * eResource())); } + * + * To learn more about Properties Files, have a look at the Acceleo + * documentation (Help -> Help Contents). + */ + URL uri = Thread.currentThread().getContextClassLoader().getResource("properties/voila2-default.properties"); + String resName = uri.toExternalForm().substring(6); + propertiesFiles.add(resName); + return propertiesFiles; + } + + /** + * This will be used to get the list of templates that are to be launched by + * this launcher. + * + * @return The list of templates to call on the module {@link #getModuleName()}. + * @generated + */ + @Override + public String[] getTemplateNames() { + return TEMPLATE_NAMES; + } +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainGeneratorFE.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainGeneratorFE.java new file mode 100644 index 0000000000000000000000000000000000000000..bec867aeed69093c37c249aee3cfa6dd8e4cf149 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/MainGeneratorFE.java @@ -0,0 +1,183 @@ +package it.micegroup.gestioneferie.configurazionepf.model; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; + +import it.mice.voila2.acceleogenerator.core.Main; + +/** + * Entry point of the 'Main' generation module. + * + * @generated + */ +public class MainGeneratorFE extends Main { + /** + * The name of the module. + * + * @generated + */ + public static final String MODULE_FILE_NAME = "/it/micegroup/gestioneferie/configurazionepf/model/mainFE"; + + /** + * The name of the templates that are to be generated. + * + * @generated + */ + public static final String[] TEMPLATE_NAMES = { "mainClassFE" }; + + /** + * The list of properties files from the launch parameters (Launch + * configuration). + * + * @generated + */ + private List propertiesFiles = new ArrayList(); + + /** + * Allows the public constructor to be used. Note that a generator created this + * way cannot be used to launch generations before one of + * {@link #initialize(EObject, File, List)} or + * {@link #initialize(URI, File, List)} is called. + *

+ * The main reason for this constructor is to allow clients of this generation + * to call it from another Java file, as it allows for the retrieval of + * {@link #getProperties()} and {@link #getGenerationListeners()}. + *

+ * + * @generated + */ + public MainGeneratorFE() { + // Empty implementation + } + + /** + * This allows clients to instantiates a generator with all required + * information. + * + * @param modelURI URI where the model on which this generator will be used + * is located. + * @param targetFolder This will be used as the output folder for this + * generation : it will be the base path against which all + * file block URLs will be resolved. + * @param arguments If the template which will be called requires more than + * one argument taken from the model, pass them here. + * @throws IOException This can be thrown in three scenarios : the module cannot + * be found, it cannot be loaded, or the model cannot be + * loaded. + * @generated + */ + public MainGeneratorFE(URI modelURI, File targetFolder, List arguments) throws IOException { + initialize(modelURI, targetFolder, arguments); + } + + /** + * This allows clients to instantiates a generator with all required + * information. + * + * @param model We'll iterate over the content of this element to find + * Objects matching the first parameter of the template we + * need to call. + * @param targetFolder This will be used as the output folder for this + * generation : it will be the base path against which all + * file block URLs will be resolved. + * @param arguments If the template which will be called requires more than + * one argument taken from the model, pass them here. + * @throws IOException This can be thrown in two scenarios : the module cannot + * be found, or it cannot be loaded. + * @generated + */ + public MainGeneratorFE(EObject model, File targetFolder, List arguments) throws IOException { + initialize(model, targetFolder, arguments); + } + + /** + * This will be called in order to find and load the module that will be + * launched through this launcher. We expect this name not to contain file + * extension, and the module to be located beside the launcher. + * + * @return The name of the module that is to be launched. + * @generated + */ + @Override + public String getModuleName() { + return MODULE_FILE_NAME; + } + + /** + * If the module(s) called by this launcher require properties files, return + * their qualified path from here.Take note that the first added properties + * files will take precedence over subsequent ones if they contain conflicting + * keys. + * + * @return The list of properties file we need to add to the generation context. + * @see java.util.ResourceBundle#getBundle(String) + * @generated NOT + */ + @Override + public List getProperties() { + /* + * If you want to change the content of this method, do NOT forget to change the + * "@generated" tag in the Javadoc of this method to "@generated NOT". Without + * this new tag, any compilation of the Acceleo module with the main template + * that has caused the creation of this class will revert your modifications. + */ + + /* + * TODO if your generation module requires access to properties files, add their + * qualified path to the list here. + * + * Properties files can be located in an Eclipse plug-in or in the file system + * (all Acceleo projects are Eclipse plug-in). In order to use properties files + * located in an Eclipse plugin, you need to add the path of the properties + * files to the "propertiesFiles" list: + * + * final String prefix = "platform:/plugin/"; final String pluginName = + * "org.eclipse.acceleo.module.sample"; final String packagePath = + * "/org/eclipse/acceleo/module/sample/properties/"; final String fileName = + * "default.properties"; propertiesFiles.add(prefix + pluginName + packagePath + + * fileName); + * + * With this mechanism, you can load properties files from your plugin or from + * another plugin. + * + * You may want to load properties files from the file system, for that you need + * to add the absolute path of the file: + * + * propertiesFiles.add("C:\Users\MyName\MyFile.properties"); + * + * If you want to let your users add properties files located in the same folder + * as the model: + * + * if (EMFPlugin.IS_ECLIPSE_RUNNING && model != null && model.eResource() != + * null) { + * propertiesFiles.addAll(AcceleoEngineUtils.getPropertiesFilesNearModel(model. + * eResource())); } + * + * To learn more about Properties Files, have a look at the Acceleo + * documentation (Help -> Help Contents). + */ + URL uri = Thread.currentThread().getContextClassLoader().getResource("properties/voila2-default.properties"); + String resName = uri.toExternalForm().substring(6); + propertiesFiles.add(resName); + return propertiesFiles; + } + + /** + * This will be used to get the list of templates that are to be launched by + * this launcher. + * + * @return The list of templates to call on the module {@link #getModuleName()}. + * @generated + */ + @Override + public String[] getTemplateNames() { + return TEMPLATE_NAMES; + } +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/main.mtl b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/main.mtl new file mode 100644 index 0000000000000000000000000000000000000000..c32372245fad65c4271b6d0ad4fd91a523a11184 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/main.mtl @@ -0,0 +1,84 @@ +[comment encoding = UTF-8 /] +[module main('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[comment]UTILS[/comment] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::exceptionHandlerUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtilsSandBox/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::pomUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::mice::voila2::acceleogenerator::core::microservice::pom::pom /] + +[import it::micegroup::voila2::cartridge::library::properties /] + +[comment]LOGGER[/comment] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[comment]JAVA SPRINGBOOT[/comment] +[import it::mice::voila2::acceleogenerator::core::springboot::main/] + +[comment]ECLIPSE[/comment] +[import it::mice::voila2::acceleogenerator::core::eclipse::main/] + +[comment]REPORTS[/comment] +[import it::mice::voila2::acceleogenerator::reports::main/] + +[template public mainClass(aModel : Model){cExceptions: Boolean = aModel.hasDiagramExceptions();}] +[comment @main /] + + +[comment]INITIALIZATION[/comment] +[consoleMessage(getInfoSeverity(), '***ENTITIES INITIALIZATION***')/] +[initializeEntities(aModel)/] + +[comment]JAVA SPRINGBOOT[/comment] +[consoleMessage(getInfoSeverity(), '***JAVA SPRINGBOOT***')/] +[genSpringBootMain(aModel)/] + +[comment]ECLIPSE[/comment] +[consoleMessage(getInfoSeverity(), '***ECLIPSE***')/] +[genEclipseMain(false,aModel)/] + +[comment]REPORTS[/comment] +[consoleMessage(getInfoSeverity(), '***REPORTS***')/] +[genReportsMain()/] + +[comment]Creazione Voila'  Proj Per microservice Web,Core,Impl [/comment] +[consoleMessage(getInfoSeverity(), '***Core Resources***')/] +[copyFolder('resources/projectFile/voilaProjForSandBox',getCoreModuleFolder(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] + +[consoleMessage(getInfoSeverity(), '***Web Resources***')/] +[copyFolder('resources/projectFile/voilaProjForSandBox',getWebModuleFolder(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] + +[consoleMessage(getInfoSeverity(), '***Impl Resources***')/] +[copyFolder('resources/projectFile/voilaProjForSandBox',getImplModuleFolder(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] + +[consoleMessage(getInfoSeverity(), '***Model Resources***')/] +[copyFolder('resources/projectFile/voilaProjForSandBox',getModelModuleFolder(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] + +[comment]Aggiorno il pom root del MS dopo aver generato i moduli[/comment] +[consoleMessage(getInfoSeverity(), '***Generazione Root Pom***')/] +[genPom(aModel,'', getArtifact(), 'pom', getGAVP(getGroupName(),getParentModuleForMs(),getVersion(),'../pom.xml'), getVersionForChild(), getArtifact(), getProjectDescription(), getMSGeneratedPomModules(getArtifact()),getMSDependencies(),'','','', getMSGeneratedPomFileName())/] + +[comment]creo cartella dummy src/main/resources per evitare build path errors ( nature java)[/comment] +[copyFolder('resources/dummyFolder', getImplResourcesFolder(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] + + +[consoleMessage(getInfoSeverity(), 'MAIN_MS_MODEL')/] +[/template] + +[template private antFilterList(dummy : OclAny)] +['*.json,*.project,*.properties,*.oaw,*.MF,*.uml,*.notation,*.xml,*.gitignore,*.mtl,*.java,*.classpath'/] +[/template] + +[template private tokenValuePairs(dummy : OclAny)] +['PROJECT_ID=' + getArtifact() + ',PROJECT_DESCRIPTION=' + getProjectDescription()/] +[/template] diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/mainFE.mtl b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/mainFE.mtl new file mode 100644 index 0000000000000000000000000000000000000000..3dbfa41c22e4c51607589287c00b84e3f2afcc78 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/java/it/micegroup/gestioneferie/configurazionepf/model/mainFE.mtl @@ -0,0 +1,22 @@ +[module mainFE('http://www.eclipse.org/uml2/5.0.0/UML')/] + + +[comment]LOGGER[/comment] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[comment]UTILS[/comment] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] + +[import it::micegroup::voila2::cartridge::angular::templates::mainAngularMS/] + +[template public mainClassFE(aModel : Model)] +[comment @main /] + +[comment]INITIALIZATION[/comment] +[initializeEntities(aModel)/] + +[consoleMessage(getInfoSeverity(), '***Front End Generation***')/] +[genMainAngularMs()/] + +[/template] \ No newline at end of file diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.di b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.di new file mode 100644 index 0000000000000000000000000000000000000000..cd1a7bd9502bd6ead7d17dc1ad9d137794f0b965 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.di @@ -0,0 +1,2 @@ + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.notation b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.notation new file mode 100644 index 0000000000000000000000000000000000000000..6dac330dc90ba83b1f36b8679ef76d9d9bdbb19d --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.notation @@ -0,0 +1,15971 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.uml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.uml new file mode 100644 index 0000000000000000000000000000000000000000..0afbb172a7cf085b6197424ded1f9e86a6f5078e --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/configurazionepf_model.uml @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.di b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.di new file mode 100644 index 0000000000000000000000000000000000000000..cd1a7bd9502bd6ead7d17dc1ad9d137794f0b965 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.di @@ -0,0 +1,2 @@ + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.notation b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.notation new file mode 100644 index 0000000000000000000000000000000000000000..6de4c5b0278c7b46b041db711773980eae874c02 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.notation @@ -0,0 +1,2678 @@ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.uml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.uml new file mode 100644 index 0000000000000000000000000000000000000000..55f37fb83cffb76191eb7dd990d40e9e6eef388a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/model/main_model.uml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + + +
+ + + + + + + +
+ + + + + + + +
+ + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/properties/voila2-default.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/properties/voila2-default.properties new file mode 100644 index 0000000000000000000000000000000000000000..ef84893a25782b448af1ae7d8aea985310d8eeda --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/properties/voila2-default.properties @@ -0,0 +1,16 @@ +id = 14 +sourcefolder = src +root.artifactId = gestioneferie +group.name = it.micegroup +base.package.name = it.micegroup.gestioneferie.configurazionepf +base.package.folder = it/micegroup/gestioneferie/configurazionepf +artifact = gestioneferie-ms-configurazionepf +project.name = gestioneferie-ms-configurazionepf +microservice.category = demo +project.description = configurazionepf rel 0.0.1 +version = 0.0.1-SNAPSHOT +port.number = 8014 +frontend.generation.enabled = false +gateway.generation.enabled = false +persistence.type = sql +fe.formatting = true diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/voila2.log4j.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/voila2.log4j.properties new file mode 100644 index 0000000000000000000000000000000000000000..b53419eaee80540044f809845762bc01a57fa27b --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-model/src/main/resources/voila2.log4j.properties @@ -0,0 +1,30 @@ +############################################################################### +# Copyright (c) 2005, 2006 committers of openArchitectureWare and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# committers of openArchitectureWare - initial API and implementation +############################################################################### +# Set root logger level to DEBUG and its only appender to A1. +log4j.rootLogger=WARN, VoilaConsole +log4j.logger.it.mice.voila.core.runnables.WorkflowRunner=INFO +#log4j.additivity.org.openarchitectureware=true + +# A1 is set to be a ConsoleAppender. +log4j.appender.VoilaConsole=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.VoilaConsole.layout=org.apache.log4j.PatternLayout +log4j.appender.VoilaConsole.layout.ConversionPattern=%d %-5p (%F:%L) - %m%n + +# file appender +#log4j.appender.FILE=org.apache.log4j.FileAppender +#log4j.appender.FILE.File=src/workflow.oaw.log +#log4j.appender.FILE.layout=org.apache.log4j.PatternLayout +#log4j.appender.FILE.layout.ConversionPattern=%-5c ///// %-5p ///// - %m%n + +# suppress jalopy logging +log4j.logger.de.hunsicker=ERROR diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.classpath b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..beffc7b54db7e440b8a9d7bb395780a9c274c1d6 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.classpath @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/MavenWrapperDownloader.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000000000000000000000000000000000..c32394f140a74ad74d1deb4a98bf2556fadf23da --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.5"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/maven-wrapper.jar b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..0d5e649888a4843c1520054d9672f80c62ebbb48 Binary files /dev/null and b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/maven-wrapper.jar differ diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/maven-wrapper.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..7d59a01f2594defa27705a493da0e4d57465aa2d --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.2/apache-maven-3.6.2-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.project b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.project new file mode 100644 index 0000000000000000000000000000000000000000..68b0abddacbf905f92d9d7bcd54e24d9fd0fb3c7 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.project @@ -0,0 +1,71 @@ + + + gestioneferie-ms-configurazionepf-web + + + gestioneferie-ms-configurazionepf + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.m2e.core.maven2Nature + + + + 1644425858953 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-modules + + + + 1644425858970 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.syncFolder + + + + 1644425859165 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.target + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.core.resources.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000000000000000000000000000000000..abdea9ac032d4655898933f93050f48bf9581d14 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.jdt.core.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..ea81b668205b42187d800803790cb71e28ca2e14 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,366 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false +org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false +org.eclipse.jdt.core.formatter.align_with_spaces=false +org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 +org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 +org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 +org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true +org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.indent_tag_description=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=80 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=4 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert +org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert +org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false +org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines +org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true +org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false +org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true +org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true +org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true +org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true +org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true +org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true +org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.m2e.core.prefs b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.voilaProject b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/.voilaProject new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/mvnw b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/mvnw new file mode 100644 index 0000000000000000000000000000000000000000..d2f0ea38081dce15746cffcec1f1e4151d1a1f0a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/mvnw.cmd b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/mvnw.cmd new file mode 100644 index 0000000000000000000000000000000000000000..b26ab24f039ea62cea44199665b23318f3cc5344 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/pom.xml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..e7cdf54d209f263e61f3214b33cfc87d6d3f6a3b --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/pom.xml @@ -0,0 +1,114 @@ + + + 4.0.0 + + gestioneferie-ms-configurazionepf-web + gestioneferie-ms-configurazionepf-web module + http://www.micegroup.it + + + it.micegroup + gestioneferie-ms-configurazionepf + 0.0.1-SNAPSHOT + ../../pom.xml + + + + + it.micegroup + gestioneferie-ms-configurazionepf-impl + ${project.parent.version} + + + it.micegroup + gestioneferie-libs-web + 0.0.1-SNAPSHOT + + + com.h2database + h2 + runtime + + + org.liquibase + liquibase-core + 4.3.5 + + + org.springframework.boot + spring-boot-starter-hateoas + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-registry-jmx + + + io.micrometer + micrometer-registry-prometheus + + + + + spring-boot:run + gestioneferie-ms-configurazionepf + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.5.RELEASE + + it.micegroup.gestioneferie.configurazionepf.GestioneferieMsConfigurazionepf + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + + + + + + dev + + true + + + + com.h2database + h2 + + + + + dev + + + + prod + + + prod + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/GestioneferieMsConfigurazionepf.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/GestioneferieMsConfigurazionepf.java new file mode 100644 index 0000000000000000000000000000000000000000..dfcc8db6aa0351935e055abec925a8aad5a4461a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/GestioneferieMsConfigurazionepf.java @@ -0,0 +1,14 @@ +package it.micegroup.gestioneferie.configurazionepf; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; + +@SpringBootApplication +@ComponentScan({ "it.micegroup.gestioneferie", "it.micegroup.voila2runtime" }) +public class GestioneferieMsConfigurazionepf { + + public static void main(String[] args) { + SpringApplication.run(GestioneferieMsConfigurazionepf.class, args); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/actuator/GestioneferieMsConfigurazionepfInterceptor.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/actuator/GestioneferieMsConfigurazionepfInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..952dcb63b3567aca433bff3bb1e323199f6f896f --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/actuator/GestioneferieMsConfigurazionepfInterceptor.java @@ -0,0 +1,35 @@ +package it.micegroup.gestioneferie.configurazionepf.actuator; + +import io.micrometer.core.instrument.MeterRegistry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class GestioneferieMsConfigurazionepfInterceptor implements HandlerInterceptor { + + private static Logger log = LoggerFactory.getLogger(GestioneferieMsConfigurazionepfInterceptor.class); + + private MeterRegistry registry; + private String URI, pathKey, METHOD; + + public GestioneferieMsConfigurazionepfInterceptor(MeterRegistry registry) { + this.registry = registry; + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + URI = request.getRequestURI(); + METHOD = request.getMethod(); + if (!URI.contains("prometheus")) { + log.info(" >> PATH: {}", URI); + log.info(" >> METHOD: {}", METHOD); + + pathKey = "api_".concat(METHOD.toLowerCase()).concat(URI.replaceAll("/", "_").toLowerCase()); + this.registry.counter(pathKey).increment(); + } + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/actuator/GestioneferieMsConfigurazionepfProperties.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/actuator/GestioneferieMsConfigurazionepfProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..0d6f911fe15f5d9b65375945b3af047935813647 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/actuator/GestioneferieMsConfigurazionepfProperties.java @@ -0,0 +1,10 @@ +package it.micegroup.gestioneferie.configurazionepf.actuator; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Data +@ConfigurationProperties(prefix = "gestioneferiemsconfigurazionepf") +public class GestioneferieMsConfigurazionepfProperties { + private String path; +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/advices/GlobalExceptionHandler.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/advices/GlobalExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..3c91c70c06cf774ffb07df6020807bec534367fb --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/advices/GlobalExceptionHandler.java @@ -0,0 +1,10 @@ +package it.micegroup.gestioneferie.configurazionepf.advices; + +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import it.micegroup.gestioneferie.libs.exception.BaseExceptionHandler; + +@RestControllerAdvice +public class GlobalExceptionHandler extends BaseExceptionHandler { + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DconfigPaPfUoHModelAssembler.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DconfigPaPfUoHModelAssembler.java new file mode 100644 index 0000000000000000000000000000000000000000..fcede20933211c509d146b10050fb961abbb9873 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DconfigPaPfUoHModelAssembler.java @@ -0,0 +1,59 @@ +package it.micegroup.gestioneferie.configurazionepf.assembler; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.Link; +import org.springframework.stereotype.Component; + +import it.micegroup.gestioneferie.libs.assembler.BaseModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.controller.DconfigPaPfUoHController; +import it.micegroup.gestioneferie.configurazionepf.dto.DconfigPaPfUoHDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH; + +import it.micegroup.gestioneferie.configurazionepf.controller.DconfigPaPianiFerieController; + +@Component +public class DconfigPaPfUoHModelAssembler + extends BaseModelAssembler { + + @Override + public DconfigPaPfUoHDto toModel(DconfigPaPfUoH dconfigPaPfUoH) { + DconfigPaPfUoHDto dconfigPaPfUoHDto = map(dconfigPaPfUoH, DconfigPaPfUoHDto.class, + DconfigPaPfUoHController.class); + + // SELF LINK + Link selfLink = convert( + linkTo(methodOn(DconfigPaPfUoHController.class).getByObjectKey(dconfigPaPfUoH.getObjectKey())) + .withSelfRel()); + dconfigPaPfUoHDto.add(selfLink); + + // PARENT LINKS + if (dconfigPaPfUoH.getTheDconfigPaPianiFerie() != null) { + Link dconfigPaPianiFerieLink = convert(linkTo(methodOn(DconfigPaPianiFerieController.class) + .getByObjectKey(dconfigPaPfUoH.getTheDconfigPaPianiFerieObjectKey())) + .withRel("theDconfigPaPianiFerie")); + dconfigPaPfUoHDto.add(dconfigPaPianiFerieLink); + } + + // CHILDREN LINKS + + // PARENTS LINKS FOR IMPORTED MS + + // CHILDREN LINKS FOR IMPORTED MS + + return dconfigPaPfUoHDto; + + } + + @Override + public CollectionModel toCollectionModel(Iterable entities) { + CollectionModel collectionEntities = super.toCollectionModel(entities); + // collectionEntities.add(linkTo(methodOn(OrdineController.class).findPaginated(null, + // null)).withSelfRel()); + + return collectionEntities; + } + +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DconfigPaPianiFerieModelAssembler.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DconfigPaPianiFerieModelAssembler.java new file mode 100644 index 0000000000000000000000000000000000000000..54086e5b6c964e8ced7f1c08ac1d926deedae3a9 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DconfigPaPianiFerieModelAssembler.java @@ -0,0 +1,65 @@ +package it.micegroup.gestioneferie.configurazionepf.assembler; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.Link; +import org.springframework.stereotype.Component; + +import it.micegroup.gestioneferie.libs.assembler.BaseModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.controller.DconfigPaPianiFerieController; +import it.micegroup.gestioneferie.configurazionepf.dto.DconfigPaPianiFerieDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; + +import it.micegroup.gestioneferie.configurazionepf.controller.DpercAutPianFerieHController; +import it.micegroup.gestioneferie.configurazionepf.controller.DconfigPaPfUoHController; + +@Component +public class DconfigPaPianiFerieModelAssembler + extends BaseModelAssembler { + + @Override + public DconfigPaPianiFerieDto toModel(DconfigPaPianiFerie dconfigPaPianiFerie) { + DconfigPaPianiFerieDto dconfigPaPianiFerieDto = map(dconfigPaPianiFerie, DconfigPaPianiFerieDto.class, + DconfigPaPianiFerieController.class); + + // SELF LINK + Link selfLink = convert( + linkTo(methodOn(DconfigPaPianiFerieController.class).getByObjectKey(dconfigPaPianiFerie.getObjectKey())) + .withSelfRel()); + dconfigPaPianiFerieDto.add(selfLink); + + // PARENT LINKS + + // CHILDREN LINKS + if (dconfigPaPianiFerie.getTheDpercAutPianFerieH() != null) { + Link dpercAutPianFerieHLink = convert(linkTo(methodOn(DpercAutPianFerieHController.class) + .findByDconfigPaPianiFerie(dconfigPaPianiFerie.getObjectKey(), null)) + .withRel("theDpercAutPianFerieH")); + dconfigPaPianiFerieDto.add(dpercAutPianFerieHLink); + } + if (dconfigPaPianiFerie.getTheDconfigPaPfUoH() != null) { + Link dconfigPaPfUoHLink = convert(linkTo(methodOn(DconfigPaPfUoHController.class) + .findByDconfigPaPianiFerie(dconfigPaPianiFerie.getObjectKey(), null)).withRel("theDconfigPaPfUoH")); + dconfigPaPianiFerieDto.add(dconfigPaPfUoHLink); + } + + // PARENTS LINKS FOR IMPORTED MS + + // CHILDREN LINKS FOR IMPORTED MS + + return dconfigPaPianiFerieDto; + + } + + @Override + public CollectionModel toCollectionModel(Iterable entities) { + CollectionModel collectionEntities = super.toCollectionModel(entities); + // collectionEntities.add(linkTo(methodOn(OrdineController.class).findPaginated(null, + // null)).withSelfRel()); + + return collectionEntities; + } + +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DpercAutPianFerieHModelAssembler.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DpercAutPianFerieHModelAssembler.java new file mode 100644 index 0000000000000000000000000000000000000000..7972098ca7fff6372138a8e47e43763dd2d5b29c --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DpercAutPianFerieHModelAssembler.java @@ -0,0 +1,66 @@ +package it.micegroup.gestioneferie.configurazionepf.assembler; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.Link; +import org.springframework.stereotype.Component; + +import it.micegroup.gestioneferie.libs.assembler.BaseModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.controller.DpercAutPianFerieHController; +import it.micegroup.gestioneferie.configurazionepf.dto.DpercAutPianFerieHDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; + +import it.micegroup.gestioneferie.configurazionepf.controller.DpercAutPianFeriePkController; +import it.micegroup.gestioneferie.configurazionepf.controller.DconfigPaPianiFerieController; + +@Component +public class DpercAutPianFerieHModelAssembler + extends BaseModelAssembler { + + @Override + public DpercAutPianFerieHDto toModel(DpercAutPianFerieH dpercAutPianFerieH) { + DpercAutPianFerieHDto dpercAutPianFerieHDto = map(dpercAutPianFerieH, DpercAutPianFerieHDto.class, + DpercAutPianFerieHController.class); + + // SELF LINK + Link selfLink = convert( + linkTo(methodOn(DpercAutPianFerieHController.class).getByObjectKey(dpercAutPianFerieH.getObjectKey())) + .withSelfRel()); + dpercAutPianFerieHDto.add(selfLink); + + // PARENT LINKS + if (dpercAutPianFerieH.getTheDpercAutPianFeriePk() != null) { + Link dpercAutPianFeriePkLink = convert(linkTo(methodOn(DpercAutPianFeriePkController.class) + .getByObjectKey(dpercAutPianFerieH.getTheDpercAutPianFeriePkObjectKey())) + .withRel("theDpercAutPianFeriePk")); + dpercAutPianFerieHDto.add(dpercAutPianFeriePkLink); + } + if (dpercAutPianFerieH.getTheDconfigPaPianiFerie() != null) { + Link dconfigPaPianiFerieLink = convert(linkTo(methodOn(DconfigPaPianiFerieController.class) + .getByObjectKey(dpercAutPianFerieH.getTheDconfigPaPianiFerieObjectKey())) + .withRel("theDconfigPaPianiFerie")); + dpercAutPianFerieHDto.add(dconfigPaPianiFerieLink); + } + + // CHILDREN LINKS + + // PARENTS LINKS FOR IMPORTED MS + + // CHILDREN LINKS FOR IMPORTED MS + + return dpercAutPianFerieHDto; + + } + + @Override + public CollectionModel toCollectionModel(Iterable entities) { + CollectionModel collectionEntities = super.toCollectionModel(entities); + // collectionEntities.add(linkTo(methodOn(OrdineController.class).findPaginated(null, + // null)).withSelfRel()); + + return collectionEntities; + } + +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DpercAutPianFeriePkModelAssembler.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DpercAutPianFeriePkModelAssembler.java new file mode 100644 index 0000000000000000000000000000000000000000..1f618ab61c1ec4f7688ee94afb33e7b90858f6e2 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DpercAutPianFeriePkModelAssembler.java @@ -0,0 +1,59 @@ +package it.micegroup.gestioneferie.configurazionepf.assembler; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.Link; +import org.springframework.stereotype.Component; + +import it.micegroup.gestioneferie.libs.assembler.BaseModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.controller.DpercAutPianFeriePkController; +import it.micegroup.gestioneferie.configurazionepf.dto.DpercAutPianFeriePkDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; + +import it.micegroup.gestioneferie.configurazionepf.controller.DpercAutPianFerieHController; + +@Component +public class DpercAutPianFeriePkModelAssembler + extends BaseModelAssembler { + + @Override + public DpercAutPianFeriePkDto toModel(DpercAutPianFeriePk dpercAutPianFeriePk) { + DpercAutPianFeriePkDto dpercAutPianFeriePkDto = map(dpercAutPianFeriePk, DpercAutPianFeriePkDto.class, + DpercAutPianFeriePkController.class); + + // SELF LINK + Link selfLink = convert( + linkTo(methodOn(DpercAutPianFeriePkController.class).getByObjectKey(dpercAutPianFeriePk.getObjectKey())) + .withSelfRel()); + dpercAutPianFeriePkDto.add(selfLink); + + // PARENT LINKS + + // CHILDREN LINKS + if (dpercAutPianFeriePk.getTheDpercAutPianFerieH() != null) { + Link dpercAutPianFerieHLink = convert(linkTo(methodOn(DpercAutPianFerieHController.class) + .findByDpercAutPianFeriePk(dpercAutPianFeriePk.getObjectKey(), null)) + .withRel("theDpercAutPianFerieH")); + dpercAutPianFeriePkDto.add(dpercAutPianFerieHLink); + } + + // PARENTS LINKS FOR IMPORTED MS + + // CHILDREN LINKS FOR IMPORTED MS + + return dpercAutPianFeriePkDto; + + } + + @Override + public CollectionModel toCollectionModel(Iterable entities) { + CollectionModel collectionEntities = super.toCollectionModel(entities); + // collectionEntities.add(linkTo(methodOn(OrdineController.class).findPaginated(null, + // null)).withSelfRel()); + + return collectionEntities; + } + +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DregolePianiFerieHModelAssembler.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DregolePianiFerieHModelAssembler.java new file mode 100644 index 0000000000000000000000000000000000000000..3ced417ea92d74adbcf75ad5a82c03fe4736b28a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DregolePianiFerieHModelAssembler.java @@ -0,0 +1,59 @@ +package it.micegroup.gestioneferie.configurazionepf.assembler; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.Link; +import org.springframework.stereotype.Component; + +import it.micegroup.gestioneferie.libs.assembler.BaseModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.controller.DregolePianiFerieHController; +import it.micegroup.gestioneferie.configurazionepf.dto.DregolePianiFerieHDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH; + +import it.micegroup.gestioneferie.configurazionepf.controller.DregolePianiFeriePkController; + +@Component +public class DregolePianiFerieHModelAssembler + extends BaseModelAssembler { + + @Override + public DregolePianiFerieHDto toModel(DregolePianiFerieH dregolePianiFerieH) { + DregolePianiFerieHDto dregolePianiFerieHDto = map(dregolePianiFerieH, DregolePianiFerieHDto.class, + DregolePianiFerieHController.class); + + // SELF LINK + Link selfLink = convert( + linkTo(methodOn(DregolePianiFerieHController.class).getByObjectKey(dregolePianiFerieH.getObjectKey())) + .withSelfRel()); + dregolePianiFerieHDto.add(selfLink); + + // PARENT LINKS + if (dregolePianiFerieH.getTheDregolePianiFeriePk() != null) { + Link dregolePianiFeriePkLink = convert(linkTo(methodOn(DregolePianiFeriePkController.class) + .getByObjectKey(dregolePianiFerieH.getTheDregolePianiFeriePkObjectKey())) + .withRel("theDregolePianiFeriePk")); + dregolePianiFerieHDto.add(dregolePianiFeriePkLink); + } + + // CHILDREN LINKS + + // PARENTS LINKS FOR IMPORTED MS + + // CHILDREN LINKS FOR IMPORTED MS + + return dregolePianiFerieHDto; + + } + + @Override + public CollectionModel toCollectionModel(Iterable entities) { + CollectionModel collectionEntities = super.toCollectionModel(entities); + // collectionEntities.add(linkTo(methodOn(OrdineController.class).findPaginated(null, + // null)).withSelfRel()); + + return collectionEntities; + } + +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DregolePianiFeriePkModelAssembler.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DregolePianiFeriePkModelAssembler.java new file mode 100644 index 0000000000000000000000000000000000000000..b0f9807a18d15a9fe0d6839bc549a0322e388620 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/assembler/DregolePianiFeriePkModelAssembler.java @@ -0,0 +1,59 @@ +package it.micegroup.gestioneferie.configurazionepf.assembler; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.Link; +import org.springframework.stereotype.Component; + +import it.micegroup.gestioneferie.libs.assembler.BaseModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.controller.DregolePianiFeriePkController; +import it.micegroup.gestioneferie.configurazionepf.dto.DregolePianiFeriePkDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; + +import it.micegroup.gestioneferie.configurazionepf.controller.DregolePianiFerieHController; + +@Component +public class DregolePianiFeriePkModelAssembler + extends BaseModelAssembler { + + @Override + public DregolePianiFeriePkDto toModel(DregolePianiFeriePk dregolePianiFeriePk) { + DregolePianiFeriePkDto dregolePianiFeriePkDto = map(dregolePianiFeriePk, DregolePianiFeriePkDto.class, + DregolePianiFeriePkController.class); + + // SELF LINK + Link selfLink = convert( + linkTo(methodOn(DregolePianiFeriePkController.class).getByObjectKey(dregolePianiFeriePk.getObjectKey())) + .withSelfRel()); + dregolePianiFeriePkDto.add(selfLink); + + // PARENT LINKS + + // CHILDREN LINKS + if (dregolePianiFeriePk.getTheDregolePianiFerieH() != null) { + Link dregolePianiFerieHLink = convert(linkTo(methodOn(DregolePianiFerieHController.class) + .findByDregolePianiFeriePk(dregolePianiFeriePk.getObjectKey(), null)) + .withRel("theDregolePianiFerieH")); + dregolePianiFeriePkDto.add(dregolePianiFerieHLink); + } + + // PARENTS LINKS FOR IMPORTED MS + + // CHILDREN LINKS FOR IMPORTED MS + + return dregolePianiFeriePkDto; + + } + + @Override + public CollectionModel toCollectionModel(Iterable entities) { + CollectionModel collectionEntities = super.toCollectionModel(entities); + // collectionEntities.add(linkTo(methodOn(OrdineController.class).findPaginated(null, + // null)).withSelfRel()); + + return collectionEntities; + } + +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/CustomSpringLiquibase.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/CustomSpringLiquibase.java new file mode 100644 index 0000000000000000000000000000000000000000..b8a1b0259f60ea27abeaec0568503f9de32a7f21 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/CustomSpringLiquibase.java @@ -0,0 +1,40 @@ +package it.micegroup.gestioneferie.configurazionepf.config; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.BeanNameAware; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ResourceLoaderAware; +import org.springframework.core.io.ResourceLoader; + +import liquibase.exception.LiquibaseException; +import liquibase.integration.spring.SpringLiquibase; + +public class CustomSpringLiquibase implements InitializingBean, BeanNameAware, ResourceLoaderAware { + + private static final Logger LOGGER = LogManager.getLogger(CustomSpringLiquibase.class); + private SpringLiquibase springLiquibase; + + public CustomSpringLiquibase(SpringLiquibase liquibase) { + springLiquibase = liquibase; + } + + @Override + public void afterPropertiesSet() { + try { + springLiquibase.afterPropertiesSet(); + } catch (LiquibaseException e) { + LOGGER.error("LiquibaseConfig ", e); + } + } + + @Override + public void setBeanName(String name) { + springLiquibase.setBeanName(name); + } + + @Override + public void setResourceLoader(ResourceLoader resourceLoader) { + springLiquibase.setResourceLoader(resourceLoader); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/GestioneferieMsConfigurazionepfConfig.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/GestioneferieMsConfigurazionepfConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..483ae2adc0f11b97f2e65bdb92452913d9b773a0 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/GestioneferieMsConfigurazionepfConfig.java @@ -0,0 +1,18 @@ +package it.micegroup.gestioneferie.configurazionepf.config; + +import it.micegroup.gestioneferie.configurazionepf.actuator.GestioneferieMsConfigurazionepfInterceptor; +import it.micegroup.gestioneferie.configurazionepf.actuator.GestioneferieMsConfigurazionepfProperties; +import io.micrometer.core.instrument.MeterRegistry; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.handler.MappedInterceptor; + +@EnableConfigurationProperties(GestioneferieMsConfigurazionepfProperties.class) +@Configuration +public class GestioneferieMsConfigurazionepfConfig { + @Bean + public MappedInterceptor metricInterceptor(MeterRegistry registry) { + return new MappedInterceptor(new String[] { "/**" }, new GestioneferieMsConfigurazionepfInterceptor(registry)); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/LiquibaseConfigurationBean.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/LiquibaseConfigurationBean.java new file mode 100644 index 0000000000000000000000000000000000000000..e76b851e79cb079e87ced061aeb0188a3370db75 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/LiquibaseConfigurationBean.java @@ -0,0 +1,46 @@ +package it.micegroup.gestioneferie.configurazionepf.config; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import liquibase.integration.spring.SpringLiquibase; + +@Configuration +public class LiquibaseConfigurationBean { + + @Autowired + private DataSource dataSource; + + @Bean + public LiquibaseProperties liquibaseProperties() { + return new LiquibaseProperties(); + } + + @Bean + public CustomSpringLiquibase liquibase() { + LiquibaseProperties liquibaseProperties = liquibaseProperties(); + SpringLiquibase liquibase = new SpringLiquibase(); + liquibase.setChangeLog("classpath:db/liquibase/update.xml"); + liquibase.setContexts(liquibaseProperties.getContexts()); + liquibase.setDataSource(getDataSource(liquibaseProperties)); + liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema()); + liquibase.setDropFirst(liquibaseProperties.isDropFirst()); + liquibase.setShouldRun(true); + liquibase.setLabels(liquibaseProperties.getLabels()); + liquibase.setChangeLogParameters(liquibaseProperties.getParameters()); + return new CustomSpringLiquibase(liquibase); + } + + private DataSource getDataSource(LiquibaseProperties liquibaseProperties) { + if (liquibaseProperties.getUrl() == null) { + return this.dataSource; + } + return DataSourceBuilder.create().url(liquibaseProperties.getUrl()).username(liquibaseProperties.getUser()) + .password(liquibaseProperties.getPassword()).build(); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/MapperConfig.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/MapperConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..208e252c24aaa1014be556b7c1a95de8a37ffa86 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/config/MapperConfig.java @@ -0,0 +1,43 @@ +package it.micegroup.gestioneferie.configurazionepf.config; + +import org.modelmapper.ModelMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.modelmapper.convention.MatchingStrategies; + +import it.micegroup.gestioneferie.libs.converter.BeanConverter; +import it.micegroup.gestioneferie.configurazionepf.dto.DregolePianiFeriePkDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; +import it.micegroup.gestioneferie.configurazionepf.dto.DregolePianiFerieHDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH; +import it.micegroup.gestioneferie.configurazionepf.dto.DpercAutPianFeriePkDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; +import it.micegroup.gestioneferie.configurazionepf.dto.DpercAutPianFerieHDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; +import it.micegroup.gestioneferie.configurazionepf.dto.DconfigPaPianiFerieDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; +import it.micegroup.gestioneferie.configurazionepf.dto.DconfigPaPfUoHDto; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH; + +@Configuration +public class MapperConfig { + @Bean + public ModelMapper modelMapper() { + ModelMapper result = new ModelMapper(); + result.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + result.addConverter(new BeanConverter()); + return result; + } +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DconfigPaPfUoHController.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DconfigPaPfUoHController.java new file mode 100644 index 0000000000000000000000000000000000000000..fd2d8bf07f270ba6c2a51e5a5d9c374aa748297f --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DconfigPaPfUoHController.java @@ -0,0 +1,188 @@ +package it.micegroup.gestioneferie.configurazionepf.controller; + +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH; +import it.micegroup.gestioneferie.configurazionepf.assembler.DconfigPaPfUoHModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.criteria.DconfigPaPfUoHCriteria; +import it.micegroup.gestioneferie.configurazionepf.service.DconfigPaPfUoHService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; + +import it.micegroup.voila2runtime.exception.*; +import it.micegroup.gestioneferie.libs.controller.BaseController; +import it.micegroup.gestioneferie.configurazionepf.dto.DconfigPaPfUoHDto; +import it.micegroup.gestioneferie.configurazionepf.dto.DconfigPaPfUoHWriteDto; +import it.micegroup.gestioneferie.libs.response.BaseResponse; +import it.micegroup.gestioneferie.libs.request.BaseRequest; +import javax.annotation.PostConstruct; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.PagedModel; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import javax.validation.Valid; +import java.net.URI; +import java.util.Locale; +import java.util.Optional; + +import java.util.Collection; +import org.modelmapper.PropertyMap; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/dconfig-pa-pf-uo-h", produces = MediaType.APPLICATION_JSON_VALUE) +public class DconfigPaPfUoHController extends BaseController> { + + /// ENTITY SERVICE + private final DconfigPaPfUoHService dconfigPaPfUoHService; + private final DconfigPaPfUoHModelAssembler dconfigPaPfUoHModelAssembler; + private final PagedResourcesAssembler pagedResourcesAssembler; + private final ModelMapper modelMapper; + // CHILD SERVICES + + // CONSTRUCTOR + @PostConstruct + public void postConstruct() { + } + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DconfigPaPfUoHController.class); + + // API + @GetMapping + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PF_UO_H_FIND_PAGINATED.toString())") + public ResponseEntity>> findPaginated(DconfigPaPfUoHCriteria criteria, + Pageable pageable) { + Page page = dconfigPaPfUoHService.findByCriteria(criteria, pageable); + return toResponseEntityPaged(page, null); + } + + /** + * {@code GET /dconfig-pa-pf-uo-h/:objectKey} : get the dconfig-pa-pf-uo-h with + * given objectKey. + * + * @param objectKey the objectKey of the dconfig-pa-pf-uo-h to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the dconfig-pa-pf-uo-h, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PF_UO_H_FIND_BY_ID.toString())") + public ResponseEntity> getByObjectKey(@PathVariable String objectKey) { + return toResponseEntity(dconfigPaPfUoHService.findByObjectKey(objectKey), null, HttpStatus.OK); + } + + /** + * {@code PUT /dconfig-pa-pf-uo-h} : Updates an existing DconfigPaPfUoH. + * + * @param DconfigPaPfUoH the DconfigPaPfUoH to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the updated DconfigPaPfUoH, or with status {@code 400 (Bad Request)} + * if the DconfigPaPfUoH is not valid, or with status + * {@code 500 (Internal Server Error)} if the DconfigPaPfUoH couldn't be + * updated. + */ + @PutMapping + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PF_UO_H_UPDATE.toString())") + public ResponseEntity update(@Valid @RequestBody BaseRequest request) { + return toResponseEntity( + Optional.of(dconfigPaPfUoHService.bulkUpdate(modelMapper.map(request.getData(), DconfigPaPfUoH.class))), + null, HttpStatus.OK); + } + + /** + * {@code POST /dconfig-pa-pf-uo-h} : Create a new DconfigPaPfUoH. + * + * @param DconfigPaPfUoH the DconfigPaPfUoH to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with + * body the new DconfigPaPfUoH, or with status {@code 400 (Bad Request)} + * if the DconfigPaPfUoH has already an ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PF_UO_H_CREATE.toString())") + public ResponseEntity save(@Valid @RequestBody BaseRequest request) { + ResponseEntity response = null; + DconfigPaPfUoH dconfigPaPfUoHToInsert = childMap(request.getData()); + try { + DconfigPaPfUoH newDconfigPaPfUoH = dconfigPaPfUoHService + .insert(modelMapper.map(dconfigPaPfUoHToInsert, DconfigPaPfUoH.class)); + URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}") + .buildAndExpand(newDconfigPaPfUoH.getSequIdConfigPaPfUoH()).toUri(); + HttpHeaders headers = new HttpHeaders(); + headers.setLocation(location); + response = toResponseEntity(Optional.of(newDconfigPaPfUoH), headers, HttpStatus.CREATED); + } catch (Exception exception) { + LOGGER.error("Exception:", exception); + } + return response; + } + + private DconfigPaPfUoH childMap(DconfigPaPfUoHWriteDto data) { + DconfigPaPfUoH dconfigPaPfUoHToInsert = modelMapper.map(data, DconfigPaPfUoH.class); + return dconfigPaPfUoHToInsert; + } + + /** + * {@code DELETE /dconfig-pa-pf-uo-h/:objectKey} : delete the + * dconfig-pa-pf-uo-h with given objectKey. + * + * @param objectKey the objectKey of the DconfigPaPfUoH to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PF_UO_H_DELETE.toString())") + public ResponseEntity delete(@PathVariable String objectKey) { + dconfigPaPfUoHService + .deleteById(dconfigPaPfUoHService.findByObjectKey(objectKey).get().getSequIdConfigPaPfUoH()); + return new ResponseEntity<>(new BaseResponse<>(objectKey), HttpStatus.OK); + } + + /** + * GET /the-dconfig-pa-piani-ferie_id: Search all DconfigPaPfUoH for the given + * DconfigPaPianiFerie (parent) + * + * @param OK of DconfigPaPianiFerie + * @param pageable + * @return Page of DconfigPaPfUoH for the given DconfigPaPianiFerie (parent) + */ + @GetMapping("/findByTheDconfigPaPianiFerie/{dconfigPaPianiFerieObjectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PF_UO_H_FIND_BY_DCONFIG_PA_PIANI_FERIE.toString())") + public ResponseEntity>> findByDconfigPaPianiFerie( + @PathVariable String dconfigPaPianiFerieObjectKey, Pageable pageable) { + DconfigPaPianiFerie key = new DconfigPaPianiFerie(dconfigPaPianiFerieObjectKey); + return toResponseEntityPaged(dconfigPaPfUoHService.findByTheDconfigPaPianiFerie(key, pageable), null); + } + + private ResponseEntity> toResponseEntity(Optional maybeResponse, + HttpHeaders header, HttpStatus status) { + return maybeResponse + .map(response -> new ResponseEntity<>( + new BaseResponse<>(dconfigPaPfUoHModelAssembler.toModel(response)), header, status)) + .orElseThrow(() -> new NotFoundException(DconfigPaPfUoH.class, new Locale("it"))); + } + + private ResponseEntity>> toResponseEntityPaged(Page list, + HttpHeaders header) { + BaseResponse> collModel = new BaseResponse<>( + pagedResourcesAssembler.toModel(list, dconfigPaPfUoHModelAssembler)); + return ResponseEntity.ok().headers(header).body(collModel); + } + + @SuppressWarnings("unused") + private DconfigPaPfUoH dtoToEntity(DconfigPaPfUoHDto dto) { + return new ModelMapper().map(dto, DconfigPaPfUoH.class); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DconfigPaPianiFerieController.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DconfigPaPianiFerieController.java new file mode 100644 index 0000000000000000000000000000000000000000..362fcef224a1c3457528eea46ada601e662acb34 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DconfigPaPianiFerieController.java @@ -0,0 +1,232 @@ +package it.micegroup.gestioneferie.configurazionepf.controller; + +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; +import it.micegroup.gestioneferie.configurazionepf.assembler.DconfigPaPianiFerieModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.criteria.DconfigPaPianiFerieCriteria; +import it.micegroup.gestioneferie.configurazionepf.service.DconfigPaPianiFerieService; +import it.micegroup.gestioneferie.configurazionepf.service.DpercAutPianFerieHService; +import it.micegroup.gestioneferie.configurazionepf.service.DconfigPaPfUoHService; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPfUoH; + +import it.micegroup.voila2runtime.exception.*; +import it.micegroup.gestioneferie.libs.controller.BaseController; +import it.micegroup.gestioneferie.configurazionepf.dto.DconfigPaPianiFerieDto; +import it.micegroup.gestioneferie.configurazionepf.dto.DconfigPaPianiFerieWriteDto; +import it.micegroup.gestioneferie.libs.response.BaseResponse; +import it.micegroup.gestioneferie.libs.request.BaseRequest; +import javax.annotation.PostConstruct; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.PagedModel; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import javax.validation.Valid; +import java.net.URI; +import java.util.Locale; +import java.util.Optional; + +import java.util.Collection; +import org.modelmapper.PropertyMap; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/dconfig-pa-piani-ferie", produces = MediaType.APPLICATION_JSON_VALUE) +public class DconfigPaPianiFerieController extends BaseController> { + + /// ENTITY SERVICE + private final DconfigPaPianiFerieService dconfigPaPianiFerieService; + private final DconfigPaPianiFerieModelAssembler dconfigPaPianiFerieModelAssembler; + private final PagedResourcesAssembler pagedResourcesAssembler; + private final ModelMapper modelMapper; + // CHILD SERVICES + private final DpercAutPianFerieHService dpercAutPianFerieHService; + private final DconfigPaPfUoHService dconfigPaPfUoHService; + + // CONSTRUCTOR + @PostConstruct + public void postConstruct() { + modelMapper.addMappings(new PropertyMap() { + @Override + protected void configure() { + skip(destination.getTheDpercAutPianFerieH()); + skip(destination.getTheDconfigPaPfUoH()); + } + }); + } + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DconfigPaPianiFerieController.class); + + // API + @GetMapping + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PIANI_FERIE_FIND_PAGINATED.toString())") + public ResponseEntity>> findPaginated( + DconfigPaPianiFerieCriteria criteria, Pageable pageable) { + Page page = dconfigPaPianiFerieService.findByCriteria(criteria, pageable); + return toResponseEntityPaged(page, null); + } + + /** + * {@code GET /dconfig-pa-piani-ferie/:objectKey} : get the + * dconfig-pa-piani-ferie with given objectKey. + * + * @param objectKey the objectKey of the dconfig-pa-piani-ferie to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the dconfig-pa-piani-ferie, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PIANI_FERIE_FIND_BY_ID.toString())") + public ResponseEntity> getByObjectKey(@PathVariable String objectKey) { + return toResponseEntity(dconfigPaPianiFerieService.findByObjectKey(objectKey), null, HttpStatus.OK); + } + + /** + * {@code PUT /dconfig-pa-piani-ferie} : Updates an existing + * DconfigPaPianiFerie. + * + * @param DconfigPaPianiFerie the DconfigPaPianiFerie to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the updated DconfigPaPianiFerie, or with status + * {@code 400 (Bad Request)} if the DconfigPaPianiFerie is not valid, or + * with status {@code 500 (Internal Server Error)} if the + * DconfigPaPianiFerie couldn't be updated. + */ + @PutMapping + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PIANI_FERIE_UPDATE.toString())") + public ResponseEntity update(@Valid @RequestBody BaseRequest request) { + return toResponseEntity( + Optional.of(dconfigPaPianiFerieService + .bulkUpdate(modelMapper.map(request.getData(), DconfigPaPianiFerie.class))), + null, HttpStatus.OK); + } + + /** + * {@code POST /dconfig-pa-piani-ferie} : Create a new DconfigPaPianiFerie. + * + * @param DconfigPaPianiFerie the DconfigPaPianiFerie to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with + * body the new DconfigPaPianiFerie, or with status + * {@code 400 (Bad Request)} if the DconfigPaPianiFerie has already an + * ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PIANI_FERIE_CREATE.toString())") + public ResponseEntity save(@Valid @RequestBody BaseRequest request) { + ResponseEntity response = null; + DconfigPaPianiFerie dconfigPaPianiFerieToInsert = childMap(request.getData()); + try { + DconfigPaPianiFerie newDconfigPaPianiFerie = dconfigPaPianiFerieService + .insert(modelMapper.map(dconfigPaPianiFerieToInsert, DconfigPaPianiFerie.class)); + URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}") + .buildAndExpand(newDconfigPaPianiFerie.getSequIdConfigPaPianoFerie()).toUri(); + HttpHeaders headers = new HttpHeaders(); + headers.setLocation(location); + response = toResponseEntity(Optional.of(newDconfigPaPianiFerie), headers, HttpStatus.CREATED); + } catch (Exception exception) { + LOGGER.error("Exception:", exception); + } + return response; + } + + private DconfigPaPianiFerie childMap(DconfigPaPianiFerieWriteDto data) { + DconfigPaPianiFerie dconfigPaPianiFerieToInsert = modelMapper.map(data, DconfigPaPianiFerie.class); + Collection theDpercAutPianFerieHs = data.getTheDpercAutPianFerieH().stream() + .map(element -> modelMapper.map(element, DpercAutPianFerieH.class)) + .peek(element -> element.setTheDconfigPaPianiFerie(dconfigPaPianiFerieToInsert)) + .collect(Collectors.toList()); + dconfigPaPianiFerieToInsert.setTheDpercAutPianFerieH(theDpercAutPianFerieHs); + Collection theDconfigPaPfUoHs = data.getTheDconfigPaPfUoH().stream() + .map(element -> modelMapper.map(element, DconfigPaPfUoH.class)) + .peek(element -> element.setTheDconfigPaPianiFerie(dconfigPaPianiFerieToInsert)) + .collect(Collectors.toList()); + dconfigPaPianiFerieToInsert.setTheDconfigPaPfUoH(theDconfigPaPfUoHs); + return dconfigPaPianiFerieToInsert; + } + + /** + * {@code DELETE /dconfig-pa-piani-ferie/:objectKey} : delete the + * dconfig-pa-piani-ferie with given objectKey. + * + * @param objectKey the objectKey of the DconfigPaPianiFerie to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PIANI_FERIE_DELETE.toString())") + public ResponseEntity delete(@PathVariable String objectKey) { + dconfigPaPianiFerieService + .deleteById(dconfigPaPianiFerieService.findByObjectKey(objectKey).get().getSequIdConfigPaPianoFerie()); + return new ResponseEntity<>(new BaseResponse<>(objectKey), HttpStatus.OK); + } + + /** + * GET /id/dperc-aut-pian-ferie-h: Search all DpercAutPianFerieH (childs) for + * the given DconfigPaPianiFerie + * + * @param objectKey ObjectKey of DconfigPaPianiFerie + * @param pageable + * @return Page of DpercAutPianFerieH for the given DconfigPaPianiFerie + */ + @GetMapping("/{objectKey:.+}/dperc-aut-pian-ferie-h") + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PIANI_FERIE_FIND_BY_THE_DPERC_AUT_PIAN_FERIE_H_OBJECT_KEY.toString())") + public ResponseEntity> getTheDpercAutPianFerieHByObjectKey(@PathVariable String objectKey, + Pageable pageable) { + DconfigPaPianiFerie dconfigPaPianiFerie = new DconfigPaPianiFerie(); + dconfigPaPianiFerie.setObjectKey(objectKey); + return ResponseEntity.ok() + .body(dpercAutPianFerieHService.findByTheDconfigPaPianiFerie(dconfigPaPianiFerie, pageable)); + } + + /** + * GET /id/dconfig-pa-pf-uo-h: Search all DconfigPaPfUoH (childs) for the given + * DconfigPaPianiFerie + * + * @param objectKey ObjectKey of DconfigPaPianiFerie + * @param pageable + * @return Page of DconfigPaPfUoH for the given DconfigPaPianiFerie + */ + @GetMapping("/{objectKey:.+}/dconfig-pa-pf-uo-h") + @PreAuthorize("hasRole(@permissionHolder.DCONFIG_PA_PIANI_FERIE_FIND_BY_THE_DCONFIG_PA_PF_UO_H_OBJECT_KEY.toString())") + public ResponseEntity> getTheDconfigPaPfUoHByObjectKey(@PathVariable String objectKey, + Pageable pageable) { + DconfigPaPianiFerie dconfigPaPianiFerie = new DconfigPaPianiFerie(); + dconfigPaPianiFerie.setObjectKey(objectKey); + return ResponseEntity.ok() + .body(dconfigPaPfUoHService.findByTheDconfigPaPianiFerie(dconfigPaPianiFerie, pageable)); + } + + private ResponseEntity> toResponseEntity( + Optional maybeResponse, HttpHeaders header, HttpStatus status) { + return maybeResponse + .map(response -> new ResponseEntity<>( + new BaseResponse<>(dconfigPaPianiFerieModelAssembler.toModel(response)), header, status)) + .orElseThrow(() -> new NotFoundException(DconfigPaPianiFerie.class, new Locale("it"))); + } + + private ResponseEntity>> toResponseEntityPaged( + Page list, HttpHeaders header) { + BaseResponse> collModel = new BaseResponse<>( + pagedResourcesAssembler.toModel(list, dconfigPaPianiFerieModelAssembler)); + return ResponseEntity.ok().headers(header).body(collModel); + } + + @SuppressWarnings("unused") + private DconfigPaPianiFerie dtoToEntity(DconfigPaPianiFerieDto dto) { + return new ModelMapper().map(dto, DconfigPaPianiFerie.class); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DpercAutPianFerieHController.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DpercAutPianFerieHController.java new file mode 100644 index 0000000000000000000000000000000000000000..a718827a008c310cdd2d141fe76a46fdc1731b33 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DpercAutPianFerieHController.java @@ -0,0 +1,208 @@ +package it.micegroup.gestioneferie.configurazionepf.controller; + +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; +import it.micegroup.gestioneferie.configurazionepf.assembler.DpercAutPianFerieHModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.criteria.DpercAutPianFerieHCriteria; +import it.micegroup.gestioneferie.configurazionepf.service.DpercAutPianFerieHService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; +import it.micegroup.gestioneferie.configurazionepf.entity.DconfigPaPianiFerie; + +import it.micegroup.voila2runtime.exception.*; +import it.micegroup.gestioneferie.libs.controller.BaseController; +import it.micegroup.gestioneferie.configurazionepf.dto.DpercAutPianFerieHDto; +import it.micegroup.gestioneferie.configurazionepf.dto.DpercAutPianFerieHWriteDto; +import it.micegroup.gestioneferie.libs.response.BaseResponse; +import it.micegroup.gestioneferie.libs.request.BaseRequest; +import javax.annotation.PostConstruct; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.PagedModel; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import javax.validation.Valid; +import java.net.URI; +import java.util.Locale; +import java.util.Optional; + +import java.util.Collection; +import org.modelmapper.PropertyMap; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/dperc-aut-pian-ferie-h", produces = MediaType.APPLICATION_JSON_VALUE) +public class DpercAutPianFerieHController extends BaseController> { + + /// ENTITY SERVICE + private final DpercAutPianFerieHService dpercAutPianFerieHService; + private final DpercAutPianFerieHModelAssembler dpercAutPianFerieHModelAssembler; + private final PagedResourcesAssembler pagedResourcesAssembler; + private final ModelMapper modelMapper; + // CHILD SERVICES + + // CONSTRUCTOR + @PostConstruct + public void postConstruct() { + } + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DpercAutPianFerieHController.class); + + // API + @GetMapping + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_H_FIND_PAGINATED.toString())") + public ResponseEntity>> findPaginated( + DpercAutPianFerieHCriteria criteria, Pageable pageable) { + Page page = dpercAutPianFerieHService.findByCriteria(criteria, pageable); + return toResponseEntityPaged(page, null); + } + + /** + * {@code GET /dperc-aut-pian-ferie-h/:objectKey} : get the + * dperc-aut-pian-ferie-h with given objectKey. + * + * @param objectKey the objectKey of the dperc-aut-pian-ferie-h to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the dperc-aut-pian-ferie-h, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_H_FIND_BY_ID.toString())") + public ResponseEntity> getByObjectKey(@PathVariable String objectKey) { + return toResponseEntity(dpercAutPianFerieHService.findByObjectKey(objectKey), null, HttpStatus.OK); + } + + /** + * {@code PUT /dperc-aut-pian-ferie-h} : Updates an existing + * DpercAutPianFerieH. + * + * @param DpercAutPianFerieH the DpercAutPianFerieH to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the updated DpercAutPianFerieH, or with status + * {@code 400 (Bad Request)} if the DpercAutPianFerieH is not valid, or + * with status {@code 500 (Internal Server Error)} if the + * DpercAutPianFerieH couldn't be updated. + */ + @PutMapping + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_H_UPDATE.toString())") + public ResponseEntity update(@Valid @RequestBody BaseRequest request) { + return toResponseEntity( + Optional.of(dpercAutPianFerieHService + .bulkUpdate(modelMapper.map(request.getData(), DpercAutPianFerieH.class))), + null, HttpStatus.OK); + } + + /** + * {@code POST /dperc-aut-pian-ferie-h} : Create a new DpercAutPianFerieH. + * + * @param DpercAutPianFerieH the DpercAutPianFerieH to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with + * body the new DpercAutPianFerieH, or with status + * {@code 400 (Bad Request)} if the DpercAutPianFerieH has already an + * ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_H_CREATE.toString())") + public ResponseEntity save(@Valid @RequestBody BaseRequest request) { + ResponseEntity response = null; + DpercAutPianFerieH dpercAutPianFerieHToInsert = childMap(request.getData()); + try { + DpercAutPianFerieH newDpercAutPianFerieH = dpercAutPianFerieHService + .insert(modelMapper.map(dpercAutPianFerieHToInsert, DpercAutPianFerieH.class)); + URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}") + .buildAndExpand(newDpercAutPianFerieH.getSequIdPercAutPianFerieH()).toUri(); + HttpHeaders headers = new HttpHeaders(); + headers.setLocation(location); + response = toResponseEntity(Optional.of(newDpercAutPianFerieH), headers, HttpStatus.CREATED); + } catch (Exception exception) { + LOGGER.error("Exception:", exception); + } + return response; + } + + private DpercAutPianFerieH childMap(DpercAutPianFerieHWriteDto data) { + DpercAutPianFerieH dpercAutPianFerieHToInsert = modelMapper.map(data, DpercAutPianFerieH.class); + return dpercAutPianFerieHToInsert; + } + + /** + * {@code DELETE /dperc-aut-pian-ferie-h/:objectKey} : delete the + * dperc-aut-pian-ferie-h with given objectKey. + * + * @param objectKey the objectKey of the DpercAutPianFerieH to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_H_DELETE.toString())") + public ResponseEntity delete(@PathVariable String objectKey) { + dpercAutPianFerieHService + .deleteById(dpercAutPianFerieHService.findByObjectKey(objectKey).get().getSequIdPercAutPianFerieH()); + return new ResponseEntity<>(new BaseResponse<>(objectKey), HttpStatus.OK); + } + + /** + * GET /the-dperc-aut-pian-ferie-pk_id: Search all DpercAutPianFerieH for the + * given DpercAutPianFeriePk (parent) + * + * @param OK of DpercAutPianFeriePk + * @param pageable + * @return Page of DpercAutPianFerieH for the given DpercAutPianFeriePk (parent) + */ + @GetMapping("/findByTheDpercAutPianFeriePk/{dpercAutPianFeriePkObjectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_H_FIND_BY_DPERC_AUT_PIAN_FERIE_PK.toString())") + public ResponseEntity>> findByDpercAutPianFeriePk( + @PathVariable String dpercAutPianFeriePkObjectKey, Pageable pageable) { + DpercAutPianFeriePk key = new DpercAutPianFeriePk(dpercAutPianFeriePkObjectKey); + return toResponseEntityPaged(dpercAutPianFerieHService.findByTheDpercAutPianFeriePk(key, pageable), null); + } + + /** + * GET /the-dconfig-pa-piani-ferie_id: Search all DpercAutPianFerieH for the + * given DconfigPaPianiFerie (parent) + * + * @param OK of DconfigPaPianiFerie + * @param pageable + * @return Page of DpercAutPianFerieH for the given DconfigPaPianiFerie (parent) + */ + @GetMapping("/findByTheDconfigPaPianiFerie/{dconfigPaPianiFerieObjectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_H_FIND_BY_DCONFIG_PA_PIANI_FERIE.toString())") + public ResponseEntity>> findByDconfigPaPianiFerie( + @PathVariable String dconfigPaPianiFerieObjectKey, Pageable pageable) { + DconfigPaPianiFerie key = new DconfigPaPianiFerie(dconfigPaPianiFerieObjectKey); + return toResponseEntityPaged(dpercAutPianFerieHService.findByTheDconfigPaPianiFerie(key, pageable), null); + } + + private ResponseEntity> toResponseEntity( + Optional maybeResponse, HttpHeaders header, HttpStatus status) { + return maybeResponse + .map(response -> new ResponseEntity<>( + new BaseResponse<>(dpercAutPianFerieHModelAssembler.toModel(response)), header, status)) + .orElseThrow(() -> new NotFoundException(DpercAutPianFerieH.class, new Locale("it"))); + } + + private ResponseEntity>> toResponseEntityPaged( + Page list, HttpHeaders header) { + BaseResponse> collModel = new BaseResponse<>( + pagedResourcesAssembler.toModel(list, dpercAutPianFerieHModelAssembler)); + return ResponseEntity.ok().headers(header).body(collModel); + } + + @SuppressWarnings("unused") + private DpercAutPianFerieH dtoToEntity(DpercAutPianFerieHDto dto) { + return new ModelMapper().map(dto, DpercAutPianFerieH.class); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DpercAutPianFeriePkController.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DpercAutPianFeriePkController.java new file mode 100644 index 0000000000000000000000000000000000000000..6ae6b84b181cb8615975446d57223caa96549a6a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DpercAutPianFeriePkController.java @@ -0,0 +1,205 @@ +package it.micegroup.gestioneferie.configurazionepf.controller; + +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFeriePk; +import it.micegroup.gestioneferie.configurazionepf.assembler.DpercAutPianFeriePkModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.criteria.DpercAutPianFeriePkCriteria; +import it.micegroup.gestioneferie.configurazionepf.service.DpercAutPianFeriePkService; +import it.micegroup.gestioneferie.configurazionepf.service.DpercAutPianFerieHService; +import it.micegroup.gestioneferie.configurazionepf.entity.DpercAutPianFerieH; + +import it.micegroup.voila2runtime.exception.*; +import it.micegroup.gestioneferie.libs.controller.BaseController; +import it.micegroup.gestioneferie.configurazionepf.dto.DpercAutPianFeriePkDto; +import it.micegroup.gestioneferie.configurazionepf.dto.DpercAutPianFeriePkWriteDto; +import it.micegroup.gestioneferie.libs.response.BaseResponse; +import it.micegroup.gestioneferie.libs.request.BaseRequest; +import javax.annotation.PostConstruct; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.PagedModel; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import javax.validation.Valid; +import java.net.URI; +import java.util.Locale; +import java.util.Optional; + +import java.util.Collection; +import org.modelmapper.PropertyMap; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/dperc-aut-pian-ferie-pk", produces = MediaType.APPLICATION_JSON_VALUE) +public class DpercAutPianFeriePkController extends BaseController> { + + /// ENTITY SERVICE + private final DpercAutPianFeriePkService dpercAutPianFeriePkService; + private final DpercAutPianFeriePkModelAssembler dpercAutPianFeriePkModelAssembler; + private final PagedResourcesAssembler pagedResourcesAssembler; + private final ModelMapper modelMapper; + // CHILD SERVICES + private final DpercAutPianFerieHService dpercAutPianFerieHService; + + // CONSTRUCTOR + @PostConstruct + public void postConstruct() { + modelMapper.addMappings(new PropertyMap() { + @Override + protected void configure() { + skip(destination.getTheDpercAutPianFerieH()); + } + }); + } + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DpercAutPianFeriePkController.class); + + // API + @GetMapping + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_PK_FIND_PAGINATED.toString())") + public ResponseEntity>> findPaginated( + DpercAutPianFeriePkCriteria criteria, Pageable pageable) { + Page page = dpercAutPianFeriePkService.findByCriteria(criteria, pageable); + return toResponseEntityPaged(page, null); + } + + /** + * {@code GET /dperc-aut-pian-ferie-pk/:objectKey} : get the + * dperc-aut-pian-ferie-pk with given objectKey. + * + * @param objectKey the objectKey of the dperc-aut-pian-ferie-pk to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the dperc-aut-pian-ferie-pk, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_PK_FIND_BY_ID.toString())") + public ResponseEntity> getByObjectKey(@PathVariable String objectKey) { + return toResponseEntity(dpercAutPianFeriePkService.findByObjectKey(objectKey), null, HttpStatus.OK); + } + + /** + * {@code PUT /dperc-aut-pian-ferie-pk} : Updates an existing + * DpercAutPianFeriePk. + * + * @param DpercAutPianFeriePk the DpercAutPianFeriePk to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the updated DpercAutPianFeriePk, or with status + * {@code 400 (Bad Request)} if the DpercAutPianFeriePk is not valid, or + * with status {@code 500 (Internal Server Error)} if the + * DpercAutPianFeriePk couldn't be updated. + */ + @PutMapping + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_PK_UPDATE.toString())") + public ResponseEntity update(@Valid @RequestBody BaseRequest request) { + return toResponseEntity( + Optional.of(dpercAutPianFeriePkService + .bulkUpdate(modelMapper.map(request.getData(), DpercAutPianFeriePk.class))), + null, HttpStatus.OK); + } + + /** + * {@code POST /dperc-aut-pian-ferie-pk} : Create a new DpercAutPianFeriePk. + * + * @param DpercAutPianFeriePk the DpercAutPianFeriePk to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with + * body the new DpercAutPianFeriePk, or with status + * {@code 400 (Bad Request)} if the DpercAutPianFeriePk has already an + * ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_PK_CREATE.toString())") + public ResponseEntity save(@Valid @RequestBody BaseRequest request) { + ResponseEntity response = null; + DpercAutPianFeriePk dpercAutPianFeriePkToInsert = childMap(request.getData()); + try { + DpercAutPianFeriePk newDpercAutPianFeriePk = dpercAutPianFeriePkService + .insert(modelMapper.map(dpercAutPianFeriePkToInsert, DpercAutPianFeriePk.class)); + URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}") + .buildAndExpand(newDpercAutPianFeriePk.getSequIdPercAutPianFeriePk()).toUri(); + HttpHeaders headers = new HttpHeaders(); + headers.setLocation(location); + response = toResponseEntity(Optional.of(newDpercAutPianFeriePk), headers, HttpStatus.CREATED); + } catch (Exception exception) { + LOGGER.error("Exception:", exception); + } + return response; + } + + private DpercAutPianFeriePk childMap(DpercAutPianFeriePkWriteDto data) { + DpercAutPianFeriePk dpercAutPianFeriePkToInsert = modelMapper.map(data, DpercAutPianFeriePk.class); + Collection theDpercAutPianFerieHs = data.getTheDpercAutPianFerieH().stream() + .map(element -> modelMapper.map(element, DpercAutPianFerieH.class)) + .peek(element -> element.setTheDpercAutPianFeriePk(dpercAutPianFeriePkToInsert)) + .collect(Collectors.toList()); + dpercAutPianFeriePkToInsert.setTheDpercAutPianFerieH(theDpercAutPianFerieHs); + return dpercAutPianFeriePkToInsert; + } + + /** + * {@code DELETE /dperc-aut-pian-ferie-pk/:objectKey} : delete the + * dperc-aut-pian-ferie-pk with given objectKey. + * + * @param objectKey the objectKey of the DpercAutPianFeriePk to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_PK_DELETE.toString())") + public ResponseEntity delete(@PathVariable String objectKey) { + dpercAutPianFeriePkService + .deleteById(dpercAutPianFeriePkService.findByObjectKey(objectKey).get().getSequIdPercAutPianFeriePk()); + return new ResponseEntity<>(new BaseResponse<>(objectKey), HttpStatus.OK); + } + + /** + * GET /id/dperc-aut-pian-ferie-h: Search all DpercAutPianFerieH (childs) for + * the given DpercAutPianFeriePk + * + * @param objectKey ObjectKey of DpercAutPianFeriePk + * @param pageable + * @return Page of DpercAutPianFerieH for the given DpercAutPianFeriePk + */ + @GetMapping("/{objectKey:.+}/dperc-aut-pian-ferie-h") + @PreAuthorize("hasRole(@permissionHolder.DPERC_AUT_PIAN_FERIE_PK_FIND_BY_THE_DPERC_AUT_PIAN_FERIE_H_OBJECT_KEY.toString())") + public ResponseEntity> getTheDpercAutPianFerieHByObjectKey(@PathVariable String objectKey, + Pageable pageable) { + DpercAutPianFeriePk dpercAutPianFeriePk = new DpercAutPianFeriePk(); + dpercAutPianFeriePk.setObjectKey(objectKey); + return ResponseEntity.ok() + .body(dpercAutPianFerieHService.findByTheDpercAutPianFeriePk(dpercAutPianFeriePk, pageable)); + } + + private ResponseEntity> toResponseEntity( + Optional maybeResponse, HttpHeaders header, HttpStatus status) { + return maybeResponse + .map(response -> new ResponseEntity<>( + new BaseResponse<>(dpercAutPianFeriePkModelAssembler.toModel(response)), header, status)) + .orElseThrow(() -> new NotFoundException(DpercAutPianFeriePk.class, new Locale("it"))); + } + + private ResponseEntity>> toResponseEntityPaged( + Page list, HttpHeaders header) { + BaseResponse> collModel = new BaseResponse<>( + pagedResourcesAssembler.toModel(list, dpercAutPianFeriePkModelAssembler)); + return ResponseEntity.ok().headers(header).body(collModel); + } + + @SuppressWarnings("unused") + private DpercAutPianFeriePk dtoToEntity(DpercAutPianFeriePkDto dto) { + return new ModelMapper().map(dto, DpercAutPianFeriePk.class); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DregolePianiFerieHController.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DregolePianiFerieHController.java new file mode 100644 index 0000000000000000000000000000000000000000..001200c3db6b9dbefd6c8a7b20b29a0925967a1c --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DregolePianiFerieHController.java @@ -0,0 +1,190 @@ +package it.micegroup.gestioneferie.configurazionepf.controller; + +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH; +import it.micegroup.gestioneferie.configurazionepf.assembler.DregolePianiFerieHModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.criteria.DregolePianiFerieHCriteria; +import it.micegroup.gestioneferie.configurazionepf.service.DregolePianiFerieHService; + +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; + +import it.micegroup.voila2runtime.exception.*; +import it.micegroup.gestioneferie.libs.controller.BaseController; +import it.micegroup.gestioneferie.configurazionepf.dto.DregolePianiFerieHDto; +import it.micegroup.gestioneferie.configurazionepf.dto.DregolePianiFerieHWriteDto; +import it.micegroup.gestioneferie.libs.response.BaseResponse; +import it.micegroup.gestioneferie.libs.request.BaseRequest; +import javax.annotation.PostConstruct; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.PagedModel; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import javax.validation.Valid; +import java.net.URI; +import java.util.Locale; +import java.util.Optional; + +import java.util.Collection; +import org.modelmapper.PropertyMap; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/dregole-piani-ferie-h", produces = MediaType.APPLICATION_JSON_VALUE) +public class DregolePianiFerieHController extends BaseController> { + + /// ENTITY SERVICE + private final DregolePianiFerieHService dregolePianiFerieHService; + private final DregolePianiFerieHModelAssembler dregolePianiFerieHModelAssembler; + private final PagedResourcesAssembler pagedResourcesAssembler; + private final ModelMapper modelMapper; + // CHILD SERVICES + + // CONSTRUCTOR + @PostConstruct + public void postConstruct() { + } + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DregolePianiFerieHController.class); + + // API + @GetMapping + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_H_FIND_PAGINATED.toString())") + public ResponseEntity>> findPaginated( + DregolePianiFerieHCriteria criteria, Pageable pageable) { + Page page = dregolePianiFerieHService.findByCriteria(criteria, pageable); + return toResponseEntityPaged(page, null); + } + + /** + * {@code GET /dregole-piani-ferie-h/:objectKey} : get the + * dregole-piani-ferie-h with given objectKey. + * + * @param objectKey the objectKey of the dregole-piani-ferie-h to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the dregole-piani-ferie-h, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_H_FIND_BY_ID.toString())") + public ResponseEntity> getByObjectKey(@PathVariable String objectKey) { + return toResponseEntity(dregolePianiFerieHService.findByObjectKey(objectKey), null, HttpStatus.OK); + } + + /** + * {@code PUT /dregole-piani-ferie-h} : Updates an existing DregolePianiFerieH. + * + * @param DregolePianiFerieH the DregolePianiFerieH to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the updated DregolePianiFerieH, or with status + * {@code 400 (Bad Request)} if the DregolePianiFerieH is not valid, or + * with status {@code 500 (Internal Server Error)} if the + * DregolePianiFerieH couldn't be updated. + */ + @PutMapping + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_H_UPDATE.toString())") + public ResponseEntity update(@Valid @RequestBody BaseRequest request) { + return toResponseEntity( + Optional.of(dregolePianiFerieHService + .bulkUpdate(modelMapper.map(request.getData(), DregolePianiFerieH.class))), + null, HttpStatus.OK); + } + + /** + * {@code POST /dregole-piani-ferie-h} : Create a new DregolePianiFerieH. + * + * @param DregolePianiFerieH the DregolePianiFerieH to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with + * body the new DregolePianiFerieH, or with status + * {@code 400 (Bad Request)} if the DregolePianiFerieH has already an + * ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_H_CREATE.toString())") + public ResponseEntity save(@Valid @RequestBody BaseRequest request) { + ResponseEntity response = null; + DregolePianiFerieH dregolePianiFerieHToInsert = childMap(request.getData()); + try { + DregolePianiFerieH newDregolePianiFerieH = dregolePianiFerieHService + .insert(modelMapper.map(dregolePianiFerieHToInsert, DregolePianiFerieH.class)); + URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}") + .buildAndExpand(newDregolePianiFerieH.getSequIdRegolePianiFerieH()).toUri(); + HttpHeaders headers = new HttpHeaders(); + headers.setLocation(location); + response = toResponseEntity(Optional.of(newDregolePianiFerieH), headers, HttpStatus.CREATED); + } catch (Exception exception) { + LOGGER.error("Exception:", exception); + } + return response; + } + + private DregolePianiFerieH childMap(DregolePianiFerieHWriteDto data) { + DregolePianiFerieH dregolePianiFerieHToInsert = modelMapper.map(data, DregolePianiFerieH.class); + return dregolePianiFerieHToInsert; + } + + /** + * {@code DELETE /dregole-piani-ferie-h/:objectKey} : delete the + * dregole-piani-ferie-h with given objectKey. + * + * @param objectKey the objectKey of the DregolePianiFerieH to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_H_DELETE.toString())") + public ResponseEntity delete(@PathVariable String objectKey) { + dregolePianiFerieHService + .deleteById(dregolePianiFerieHService.findByObjectKey(objectKey).get().getSequIdRegolePianiFerieH()); + return new ResponseEntity<>(new BaseResponse<>(objectKey), HttpStatus.OK); + } + + /** + * GET /the-dregole-piani-ferie-pk_id: Search all DregolePianiFerieH for the + * given DregolePianiFeriePk (parent) + * + * @param OK of DregolePianiFeriePk + * @param pageable + * @return Page of DregolePianiFerieH for the given DregolePianiFeriePk (parent) + */ + @GetMapping("/findByTheDregolePianiFeriePk/{dregolePianiFeriePkObjectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_H_FIND_BY_DREGOLE_PIANI_FERIE_PK.toString())") + public ResponseEntity>> findByDregolePianiFeriePk( + @PathVariable String dregolePianiFeriePkObjectKey, Pageable pageable) { + DregolePianiFeriePk key = new DregolePianiFeriePk(dregolePianiFeriePkObjectKey); + return toResponseEntityPaged(dregolePianiFerieHService.findByTheDregolePianiFeriePk(key, pageable), null); + } + + private ResponseEntity> toResponseEntity( + Optional maybeResponse, HttpHeaders header, HttpStatus status) { + return maybeResponse + .map(response -> new ResponseEntity<>( + new BaseResponse<>(dregolePianiFerieHModelAssembler.toModel(response)), header, status)) + .orElseThrow(() -> new NotFoundException(DregolePianiFerieH.class, new Locale("it"))); + } + + private ResponseEntity>> toResponseEntityPaged( + Page list, HttpHeaders header) { + BaseResponse> collModel = new BaseResponse<>( + pagedResourcesAssembler.toModel(list, dregolePianiFerieHModelAssembler)); + return ResponseEntity.ok().headers(header).body(collModel); + } + + @SuppressWarnings("unused") + private DregolePianiFerieH dtoToEntity(DregolePianiFerieHDto dto) { + return new ModelMapper().map(dto, DregolePianiFerieH.class); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DregolePianiFeriePkController.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DregolePianiFeriePkController.java new file mode 100644 index 0000000000000000000000000000000000000000..93a15c5bedf1ed39b3fb3e6a9d5a093146a66014 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/controller/DregolePianiFeriePkController.java @@ -0,0 +1,205 @@ +package it.micegroup.gestioneferie.configurazionepf.controller; + +import lombok.RequiredArgsConstructor; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFeriePk; +import it.micegroup.gestioneferie.configurazionepf.assembler.DregolePianiFeriePkModelAssembler; +import it.micegroup.gestioneferie.configurazionepf.criteria.DregolePianiFeriePkCriteria; +import it.micegroup.gestioneferie.configurazionepf.service.DregolePianiFeriePkService; +import it.micegroup.gestioneferie.configurazionepf.service.DregolePianiFerieHService; +import it.micegroup.gestioneferie.configurazionepf.entity.DregolePianiFerieH; + +import it.micegroup.voila2runtime.exception.*; +import it.micegroup.gestioneferie.libs.controller.BaseController; +import it.micegroup.gestioneferie.configurazionepf.dto.DregolePianiFeriePkDto; +import it.micegroup.gestioneferie.configurazionepf.dto.DregolePianiFeriePkWriteDto; +import it.micegroup.gestioneferie.libs.response.BaseResponse; +import it.micegroup.gestioneferie.libs.request.BaseRequest; +import javax.annotation.PostConstruct; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.PagedModel; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import javax.validation.Valid; +import java.net.URI; +import java.util.Locale; +import java.util.Optional; + +import java.util.Collection; +import org.modelmapper.PropertyMap; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/dregole-piani-ferie-pk", produces = MediaType.APPLICATION_JSON_VALUE) +public class DregolePianiFeriePkController extends BaseController> { + + /// ENTITY SERVICE + private final DregolePianiFeriePkService dregolePianiFeriePkService; + private final DregolePianiFeriePkModelAssembler dregolePianiFeriePkModelAssembler; + private final PagedResourcesAssembler pagedResourcesAssembler; + private final ModelMapper modelMapper; + // CHILD SERVICES + private final DregolePianiFerieHService dregolePianiFerieHService; + + // CONSTRUCTOR + @PostConstruct + public void postConstruct() { + modelMapper.addMappings(new PropertyMap() { + @Override + protected void configure() { + skip(destination.getTheDregolePianiFerieH()); + } + }); + } + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(DregolePianiFeriePkController.class); + + // API + @GetMapping + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_PK_FIND_PAGINATED.toString())") + public ResponseEntity>> findPaginated( + DregolePianiFeriePkCriteria criteria, Pageable pageable) { + Page page = dregolePianiFeriePkService.findByCriteria(criteria, pageable); + return toResponseEntityPaged(page, null); + } + + /** + * {@code GET /dregole-piani-ferie-pk/:objectKey} : get the + * dregole-piani-ferie-pk with given objectKey. + * + * @param objectKey the objectKey of the dregole-piani-ferie-pk to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the dregole-piani-ferie-pk, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_PK_FIND_BY_ID.toString())") + public ResponseEntity> getByObjectKey(@PathVariable String objectKey) { + return toResponseEntity(dregolePianiFeriePkService.findByObjectKey(objectKey), null, HttpStatus.OK); + } + + /** + * {@code PUT /dregole-piani-ferie-pk} : Updates an existing + * DregolePianiFeriePk. + * + * @param DregolePianiFeriePk the DregolePianiFeriePk to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body + * the updated DregolePianiFeriePk, or with status + * {@code 400 (Bad Request)} if the DregolePianiFeriePk is not valid, or + * with status {@code 500 (Internal Server Error)} if the + * DregolePianiFeriePk couldn't be updated. + */ + @PutMapping + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_PK_UPDATE.toString())") + public ResponseEntity update(@Valid @RequestBody BaseRequest request) { + return toResponseEntity( + Optional.of(dregolePianiFeriePkService + .bulkUpdate(modelMapper.map(request.getData(), DregolePianiFeriePk.class))), + null, HttpStatus.OK); + } + + /** + * {@code POST /dregole-piani-ferie-pk} : Create a new DregolePianiFeriePk. + * + * @param DregolePianiFeriePk the DregolePianiFeriePk to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with + * body the new DregolePianiFeriePk, or with status + * {@code 400 (Bad Request)} if the DregolePianiFeriePk has already an + * ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_PK_CREATE.toString())") + public ResponseEntity save(@Valid @RequestBody BaseRequest request) { + ResponseEntity response = null; + DregolePianiFeriePk dregolePianiFeriePkToInsert = childMap(request.getData()); + try { + DregolePianiFeriePk newDregolePianiFeriePk = dregolePianiFeriePkService + .insert(modelMapper.map(dregolePianiFeriePkToInsert, DregolePianiFeriePk.class)); + URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}") + .buildAndExpand(newDregolePianiFeriePk.getSequIdRegolePianiFeriePk()).toUri(); + HttpHeaders headers = new HttpHeaders(); + headers.setLocation(location); + response = toResponseEntity(Optional.of(newDregolePianiFeriePk), headers, HttpStatus.CREATED); + } catch (Exception exception) { + LOGGER.error("Exception:", exception); + } + return response; + } + + private DregolePianiFeriePk childMap(DregolePianiFeriePkWriteDto data) { + DregolePianiFeriePk dregolePianiFeriePkToInsert = modelMapper.map(data, DregolePianiFeriePk.class); + Collection theDregolePianiFerieHs = data.getTheDregolePianiFerieH().stream() + .map(element -> modelMapper.map(element, DregolePianiFerieH.class)) + .peek(element -> element.setTheDregolePianiFeriePk(dregolePianiFeriePkToInsert)) + .collect(Collectors.toList()); + dregolePianiFeriePkToInsert.setTheDregolePianiFerieH(theDregolePianiFerieHs); + return dregolePianiFeriePkToInsert; + } + + /** + * {@code DELETE /dregole-piani-ferie-pk/:objectKey} : delete the + * dregole-piani-ferie-pk with given objectKey. + * + * @param objectKey the objectKey of the DregolePianiFeriePk to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/{objectKey:.+}") + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_PK_DELETE.toString())") + public ResponseEntity delete(@PathVariable String objectKey) { + dregolePianiFeriePkService + .deleteById(dregolePianiFeriePkService.findByObjectKey(objectKey).get().getSequIdRegolePianiFeriePk()); + return new ResponseEntity<>(new BaseResponse<>(objectKey), HttpStatus.OK); + } + + /** + * GET /id/dregole-piani-ferie-h: Search all DregolePianiFerieH (childs) for the + * given DregolePianiFeriePk + * + * @param objectKey ObjectKey of DregolePianiFeriePk + * @param pageable + * @return Page of DregolePianiFerieH for the given DregolePianiFeriePk + */ + @GetMapping("/{objectKey:.+}/dregole-piani-ferie-h") + @PreAuthorize("hasRole(@permissionHolder.DREGOLE_PIANI_FERIE_PK_FIND_BY_THE_DREGOLE_PIANI_FERIE_H_OBJECT_KEY.toString())") + public ResponseEntity> getTheDregolePianiFerieHByObjectKey(@PathVariable String objectKey, + Pageable pageable) { + DregolePianiFeriePk dregolePianiFeriePk = new DregolePianiFeriePk(); + dregolePianiFeriePk.setObjectKey(objectKey); + return ResponseEntity.ok() + .body(dregolePianiFerieHService.findByTheDregolePianiFeriePk(dregolePianiFeriePk, pageable)); + } + + private ResponseEntity> toResponseEntity( + Optional maybeResponse, HttpHeaders header, HttpStatus status) { + return maybeResponse + .map(response -> new ResponseEntity<>( + new BaseResponse<>(dregolePianiFeriePkModelAssembler.toModel(response)), header, status)) + .orElseThrow(() -> new NotFoundException(DregolePianiFeriePk.class, new Locale("it"))); + } + + private ResponseEntity>> toResponseEntityPaged( + Page list, HttpHeaders header) { + BaseResponse> collModel = new BaseResponse<>( + pagedResourcesAssembler.toModel(list, dregolePianiFeriePkModelAssembler)); + return ResponseEntity.ok().headers(header).body(collModel); + } + + @SuppressWarnings("unused") + private DregolePianiFeriePk dtoToEntity(DregolePianiFeriePkDto dto) { + return new ModelMapper().map(dto, DregolePianiFeriePk.class); + } +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPfUoHDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPfUoHDto.java new file mode 100644 index 0000000000000000000000000000000000000000..218ea3274a0bb977476e6e12dbdf313499040c4a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPfUoHDto.java @@ -0,0 +1,53 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.gestioneferie.libs.dto.BaseDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DconfigPaPfUoHDto extends BaseDto { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 2107839351L; + + @JsonProperty + private String objectKey; + @JsonProperty + private String objectTitle; + private Long sequIdConfigPaPfUoH; + + private String flagValidoUoSubordinate; + + private Long fkConfigPaPianoFerie; + + private Long fkUnitaFunzionale; + + private Long fkUnitaOrganizzativaPk; + + private String utenteUltimaModifica; + + private String flagEliminato; + + private Date dataInizioValidita; + + private Date dataFineValidita; + + private Date dataUltimaModifica; + + private Long sequIdConfigPaPianoFerie; + @JsonProperty + private String theDconfigPaPianiFerieObjectTitle; + @JsonProperty + private String theDconfigPaPianiFerieObjectKey; + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPfUoHWriteDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPfUoHWriteDto.java new file mode 100644 index 0000000000000000000000000000000000000000..c35feec82f02e8766de4f2fbfa502a267506780f --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPfUoHWriteDto.java @@ -0,0 +1,48 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.voila2runtime.dto.GenericDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DconfigPaPfUoHWriteDto extends GenericDto { + + /** + * + * ObjectKey + * + */ + @JsonProperty + private String objectKey; + + private Long sequIdConfigPaPfUoH; + + private String flagValidoUoSubordinate; + + private Long fkConfigPaPianoFerie; + + private Long fkUnitaFunzionale; + + private Long fkUnitaOrganizzativaPk; + + private String utenteUltimaModifica; + + private String flagEliminato; + + private Date dataInizioValidita; + + private Date dataFineValidita; + + private Date dataUltimaModifica; + private String theDconfigPaPianiFerieObjectKey; +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPianiFerieDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPianiFerieDto.java new file mode 100644 index 0000000000000000000000000000000000000000..adc6edf0aa67597a0b27d897320d27a57b18e0d0 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPianiFerieDto.java @@ -0,0 +1,49 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Collection; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.gestioneferie.libs.dto.BaseDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DconfigPaPianiFerieDto extends BaseDto { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 1237557078L; + + @JsonProperty + private String objectKey; + @JsonProperty + private String objectTitle; + private Long sequIdConfigPaPianoFerie; + + private String codiConfigPaPianoFerie; + + private String descConfigPaPianoFerie; + + private Long fkAmministrazionePk; + + private Long fkTipoOrganigramma; + + private Date dataUltimaModifica; + + private String utenteUltimaModifica; + + private String flagEliminato; + + private Date dataInizioRecord; + + private Date dataFineRecord; + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPianiFerieWriteDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPianiFerieWriteDto.java new file mode 100644 index 0000000000000000000000000000000000000000..2b97ad9922e37b223295ce09c208e65aad9e914f --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DconfigPaPianiFerieWriteDto.java @@ -0,0 +1,54 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Collection; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.voila2runtime.dto.GenericDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DconfigPaPianiFerieWriteDto extends GenericDto { + + /** + * + * ObjectKey + * + */ + @JsonProperty + private String objectKey; + + private Long sequIdConfigPaPianoFerie; + + private String codiConfigPaPianoFerie; + + private String descConfigPaPianoFerie; + + private Long fkAmministrazionePk; + + private Long fkTipoOrganigramma; + + private Date dataUltimaModifica; + + private String utenteUltimaModifica; + + private String flagEliminato; + + private Date dataInizioRecord; + + private Date dataFineRecord; + + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private Collection theDpercAutPianFerieH; + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private Collection theDconfigPaPfUoH; +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFerieHDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFerieHDto.java new file mode 100644 index 0000000000000000000000000000000000000000..9bd3355380ec3e0f061d5c8dd0a72cd938b82dd7 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFerieHDto.java @@ -0,0 +1,56 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.gestioneferie.libs.dto.BaseDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DpercAutPianFerieHDto extends BaseDto { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 2997153128L; + + @JsonProperty + private String objectKey; + @JsonProperty + private String objectTitle; + private Long sequIdPercAutPianFerieH; + + private Long fkConfigPaPianoFerie; + + private Long fkPercorso; + + private Long fkPercAutPianFeriePk; + + private Date dataUltimaModifica; + + private Date dataFineValidita; + + private Date dataInizioValidita; + + private String utenteUltimaModifica; + + private String flagEliminato; + + private Long sequIdPercAutPianFeriePk; + private Long sequIdConfigPaPianoFerie; + @JsonProperty + private String theDpercAutPianFeriePkObjectTitle; + @JsonProperty + private String theDpercAutPianFeriePkObjectKey; + @JsonProperty + private String theDconfigPaPianiFerieObjectTitle; + @JsonProperty + private String theDconfigPaPianiFerieObjectKey; + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFerieHWriteDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFerieHWriteDto.java new file mode 100644 index 0000000000000000000000000000000000000000..a258534fffb2803a7a4834ab929ad377194cac88 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFerieHWriteDto.java @@ -0,0 +1,47 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.voila2runtime.dto.GenericDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DpercAutPianFerieHWriteDto extends GenericDto { + + /** + * + * ObjectKey + * + */ + @JsonProperty + private String objectKey; + + private Long sequIdPercAutPianFerieH; + + private Long fkConfigPaPianoFerie; + + private Long fkPercorso; + + private Long fkPercAutPianFeriePk; + + private Date dataUltimaModifica; + + private Date dataFineValidita; + + private Date dataInizioValidita; + + private String utenteUltimaModifica; + + private String flagEliminato; + private String theDpercAutPianFeriePkObjectKey; + private String theDconfigPaPianiFerieObjectKey; +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFeriePkDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFeriePkDto.java new file mode 100644 index 0000000000000000000000000000000000000000..345e47ee29ed0d5d69db15245437c555469a6f1a --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFeriePkDto.java @@ -0,0 +1,37 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Collection; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.gestioneferie.libs.dto.BaseDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DpercAutPianFeriePkDto extends BaseDto { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 887071405L; + + @JsonProperty + private String objectKey; + @JsonProperty + private String objectTitle; + private Long sequIdPercAutPianFeriePk; + + private String flagEliminato; + + private String utenteUltimaModifica; + + private Date dataUltimaModifica; + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFeriePkWriteDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFeriePkWriteDto.java new file mode 100644 index 0000000000000000000000000000000000000000..10ef574930faaebce0c1fe7c56fb03e11d013032 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DpercAutPianFeriePkWriteDto.java @@ -0,0 +1,40 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Collection; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.voila2runtime.dto.GenericDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DpercAutPianFeriePkWriteDto extends GenericDto { + + /** + * + * ObjectKey + * + */ + @JsonProperty + private String objectKey; + + private Long sequIdPercAutPianFeriePk; + + private String flagEliminato; + + private String utenteUltimaModifica; + + private Date dataUltimaModifica; + + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private Collection theDpercAutPianFerieH; +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFerieHDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFerieHDto.java new file mode 100644 index 0000000000000000000000000000000000000000..2db66b0060baa44b46fbd3740132d4eaf3ef938e --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFerieHDto.java @@ -0,0 +1,63 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.gestioneferie.libs.dto.BaseDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DregolePianiFerieHDto extends BaseDto { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 976188501L; + + @JsonProperty + private String objectKey; + @JsonProperty + private String objectTitle; + private Long sequIdRegolePianiFerieH; + + private Long numMinGgDaPianificare; + + private Long numMaxGgDaPianificare; + + private Long numePercMinGiorniPresenza; + + private String flagValidoUoSubordinate; + + private Long fkAmministrazione; + + private Long fkRegolaPianoFeriePk; + + private Long fkTipoOrganigramma; + + private Long fkUnitaFunzionale; + + private Long fkUnitaOrganizzativaPk; + + private String flagEliminato; + + private String utenteUltimaModifica; + + private Date dataUltimaModifica; + + private Date dataInizioValidita; + + private Date dataFineValidita; + + private Long sequIdRegolePianiFeriePk; + @JsonProperty + private String theDregolePianiFeriePkObjectTitle; + @JsonProperty + private String theDregolePianiFeriePkObjectKey; + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFerieHWriteDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFerieHWriteDto.java new file mode 100644 index 0000000000000000000000000000000000000000..6f95617b112b3622ca35d15c2363c312bde100f3 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFerieHWriteDto.java @@ -0,0 +1,58 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.voila2runtime.dto.GenericDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DregolePianiFerieHWriteDto extends GenericDto { + + /** + * + * ObjectKey + * + */ + @JsonProperty + private String objectKey; + + private Long sequIdRegolePianiFerieH; + + private Long numMinGgDaPianificare; + + private Long numMaxGgDaPianificare; + + private Long numePercMinGiorniPresenza; + + private String flagValidoUoSubordinate; + + private Long fkAmministrazione; + + private Long fkRegolaPianoFeriePk; + + private Long fkTipoOrganigramma; + + private Long fkUnitaFunzionale; + + private Long fkUnitaOrganizzativaPk; + + private String flagEliminato; + + private String utenteUltimaModifica; + + private Date dataUltimaModifica; + + private Date dataInizioValidita; + + private Date dataFineValidita; + private String theDregolePianiFeriePkObjectKey; +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFeriePkDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFeriePkDto.java new file mode 100644 index 0000000000000000000000000000000000000000..fa675a38de603b1e907519f8dee2559c803897ee --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFeriePkDto.java @@ -0,0 +1,45 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Collection; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.gestioneferie.libs.dto.BaseDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DregolePianiFeriePkDto extends BaseDto { + + // Generated SERIAL VERSION UID + private static final long serialVersionUID = 3289577936L; + + @JsonProperty + private String objectKey; + @JsonProperty + private String objectTitle; + private Long sequIdRegolePianiFeriePk; + + private String codiRegola; + + private String descRegola; + + private String flagEliminato; + + private String utenteUltimaModifica; + + private Date dataUltimaModifica; + + private Date dataInizioValidita; + + private Date dataFineValidita; + +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFeriePkWriteDto.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFeriePkWriteDto.java new file mode 100644 index 0000000000000000000000000000000000000000..d8aa39c8db8ee7e32c4a1f6615cc4294f3b1cef6 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/dto/DregolePianiFeriePkWriteDto.java @@ -0,0 +1,48 @@ +package it.micegroup.gestioneferie.configurazionepf.dto; + +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Collection; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; + +import it.micegroup.voila2runtime.dto.GenericDto; + +@Data +@EqualsAndHashCode(callSuper = false) +public class DregolePianiFeriePkWriteDto extends GenericDto { + + /** + * + * ObjectKey + * + */ + @JsonProperty + private String objectKey; + + private Long sequIdRegolePianiFeriePk; + + private String codiRegola; + + private String descRegola; + + private String flagEliminato; + + private String utenteUltimaModifica; + + private Date dataUltimaModifica; + + private Date dataInizioValidita; + + private Date dataFineValidita; + + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private Collection theDregolePianiFerieH; +} diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/security/Permission.java b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/security/Permission.java new file mode 100644 index 0000000000000000000000000000000000000000..f523de104dcfc7bade2e57ff19e500145249ecb7 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/java/it/micegroup/gestioneferie/configurazionepf/security/Permission.java @@ -0,0 +1,70 @@ +package it.micegroup.gestioneferie.configurazionepf.security; + +import org.springframework.stereotype.Component; + +@Component("permissionHolder") +public final class Permission { + /// DregolePianiFeriePk + public static final int DREGOLE_PIANI_FERIE_PK_FIND_PAGINATED = 8014100; + public static final int DREGOLE_PIANI_FERIE_PK_FIND_BY_ID = 8014101; + public static final int DREGOLE_PIANI_FERIE_PK_CREATE = 8014102; + public static final int DREGOLE_PIANI_FERIE_PK_UPDATE = 8014103; + public static final int DREGOLE_PIANI_FERIE_PK_DELETE = 8014104; + public static final int DREGOLE_PIANI_FERIE_PK_PDF_REPORT = 8014105; + + public static final int DREGOLE_PIANI_FERIE_PK_FIND_BY_THE_DREGOLE_PIANI_FERIE_H_OBJECT_KEY = 8014106; + + /// DregolePianiFerieH + public static final int DREGOLE_PIANI_FERIE_H_FIND_PAGINATED = 8014200; + public static final int DREGOLE_PIANI_FERIE_H_FIND_BY_ID = 8014201; + public static final int DREGOLE_PIANI_FERIE_H_CREATE = 8014202; + public static final int DREGOLE_PIANI_FERIE_H_UPDATE = 8014203; + public static final int DREGOLE_PIANI_FERIE_H_DELETE = 8014204; + public static final int DREGOLE_PIANI_FERIE_H_PDF_REPORT = 8014205; + + public static final int DREGOLE_PIANI_FERIE_H_FIND_BY_DREGOLE_PIANI_FERIE_PK = 8014206; + + /// DpercAutPianFeriePk + public static final int DPERC_AUT_PIAN_FERIE_PK_FIND_PAGINATED = 8014300; + public static final int DPERC_AUT_PIAN_FERIE_PK_FIND_BY_ID = 8014301; + public static final int DPERC_AUT_PIAN_FERIE_PK_CREATE = 8014302; + public static final int DPERC_AUT_PIAN_FERIE_PK_UPDATE = 8014303; + public static final int DPERC_AUT_PIAN_FERIE_PK_DELETE = 8014304; + public static final int DPERC_AUT_PIAN_FERIE_PK_PDF_REPORT = 8014305; + + public static final int DPERC_AUT_PIAN_FERIE_PK_FIND_BY_THE_DPERC_AUT_PIAN_FERIE_H_OBJECT_KEY = 8014306; + + /// DpercAutPianFerieH + public static final int DPERC_AUT_PIAN_FERIE_H_FIND_PAGINATED = 8014400; + public static final int DPERC_AUT_PIAN_FERIE_H_FIND_BY_ID = 8014401; + public static final int DPERC_AUT_PIAN_FERIE_H_CREATE = 8014402; + public static final int DPERC_AUT_PIAN_FERIE_H_UPDATE = 8014403; + public static final int DPERC_AUT_PIAN_FERIE_H_DELETE = 8014404; + public static final int DPERC_AUT_PIAN_FERIE_H_PDF_REPORT = 8014405; + + public static final int DPERC_AUT_PIAN_FERIE_H_FIND_BY_DPERC_AUT_PIAN_FERIE_PK = 8014406; + public static final int DPERC_AUT_PIAN_FERIE_H_FIND_BY_DCONFIG_PA_PIANI_FERIE = 8014407; + + /// DconfigPaPianiFerie + public static final int DCONFIG_PA_PIANI_FERIE_FIND_PAGINATED = 8014500; + public static final int DCONFIG_PA_PIANI_FERIE_FIND_BY_ID = 8014501; + public static final int DCONFIG_PA_PIANI_FERIE_CREATE = 8014502; + public static final int DCONFIG_PA_PIANI_FERIE_UPDATE = 8014503; + public static final int DCONFIG_PA_PIANI_FERIE_DELETE = 8014504; + public static final int DCONFIG_PA_PIANI_FERIE_PDF_REPORT = 8014505; + + public static final int DCONFIG_PA_PIANI_FERIE_FIND_BY_THE_DPERC_AUT_PIAN_FERIE_H_OBJECT_KEY = 8014506; + public static final int DCONFIG_PA_PIANI_FERIE_FIND_BY_THE_DCONFIG_PA_PF_UO_H_OBJECT_KEY = 8014507; + + /// DconfigPaPfUoH + public static final int DCONFIG_PA_PF_UO_H_FIND_PAGINATED = 8014600; + public static final int DCONFIG_PA_PF_UO_H_FIND_BY_ID = 8014601; + public static final int DCONFIG_PA_PF_UO_H_CREATE = 8014602; + public static final int DCONFIG_PA_PF_UO_H_UPDATE = 8014603; + public static final int DCONFIG_PA_PF_UO_H_DELETE = 8014604; + public static final int DCONFIG_PA_PF_UO_H_PDF_REPORT = 8014605; + + public static final int DCONFIG_PA_PF_UO_H_FIND_BY_DCONFIG_PA_PIANI_FERIE = 8014606; + +} + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/.h2.server.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/.h2.server.properties new file mode 100644 index 0000000000000000000000000000000000000000..1de0761b335a3cc3ea450e9fbecb2461481efe8c --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/.h2.server.properties @@ -0,0 +1,4 @@ +#H2 Server Properties +0=Voila' 2 H2 (Memory)|org.h2.Driver|jdbc\:h2\:mem\:gestioneferie-ms-configurazionepf +webAllowOthers=true +webSSL=false diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/application-integration-test.yaml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/application-integration-test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9583c5f1a7e47c21b4a47d2bcad3c3f8ebd091cb --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/application-integration-test.yaml @@ -0,0 +1,7 @@ +spring: + datasource: + url: jdbc:h2:mem:test + jpa: + properties: + hibernate: + dialect: org.hibernate.dialect.H2Dialect \ No newline at end of file diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/application.yml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..c832b082b1b4984cfc7bfcea68684733c731f554 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/application.yml @@ -0,0 +1,63 @@ +server: + port: ${PORT:8014} + servlet: + context-path: /configurazionepf + +spring: + application: + name: gestioneferie-configurazionepf-service + liquibase: + enabled: false + security: + oauth2: + resourceserver: + jwt: + issuer-uri: http://${KK_URL:localhost}:${KK_PORT:8282}/auth/realms/gestioneferie + jwk-set-uri: http://${KK_URL:localhost}:${KK_PORT:8282}/auth/realms/gestioneferie/protocol/openid-connect/certs + +# data: +# rest: +# basePath: /configurazionepf + jpa: + hibernate: + show-sql: true + ddl-auto: create + naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy + database-platform: org.hibernate.dialect.H2Dialect + datasource: + driverClassName: org.h2.Driver + url: jdbc:h2:mem:configurazionepf;MODE=MYSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + username: configurazionepf + password: + + h2: + console: + enabled: true + settings: + web-allow-others: true + path: /h2-console + devtools: + livereload: + port: 35830 + +logging: + level: + root: INFO + org.hibernate.SQL: TRACE + org.springframework: DEBUG + +gateway: + baseuri: http://localhost:8090 + +jasperreports: + dir: reports + debug: true + +management: + endpoints: + web: + exposure: + include: "*" + endpoint: + health: + show-details: always diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources.properties new file mode 100644 index 0000000000000000000000000000000000000000..bf22c415dc82dff5c4fe9ec04eba7f6f50bdbaa0 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources.properties @@ -0,0 +1,332 @@ +## Login +login.login=Accedi +login.button=Accedi +login.validation.username=Username è obbligatorio +login.validation.password=La password è obbligatoria +login.label=Effettua l'accesso + +## Pagination +pagination.Showing=Mostra +pagination.ElementsOf=Elementi di +pagination.All=Tutti" + +## Buttons +buttons.new=Nuovo +buttons.save=Salva +buttons.edit=Modifica +buttons.delete=Cancella +buttons.goBack=Indietro +buttons.search=Cerca +buttons.next=Avanti +buttons.export.pdf=Crea PDF + +## Panel +dregolePianiFeriePk.panelTitle.new=Inserisci Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.edit=Modifica Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.view=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.delete=Cancella Dregole Piani Ferie Pk +dregolePianiFerieH.panelTitle.new=Inserisci Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.edit=Modifica Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.view=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.delete=Cancella Dregole Piani Ferie H +dpercAutPianFeriePk.panelTitle.new=Inserisci Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.edit=Modifica Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.view=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.delete=Cancella Dperc Aut Pian Ferie Pk +dpercAutPianFerieH.panelTitle.new=Inserisci Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.edit=Modifica Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.view=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.delete=Cancella Dperc Aut Pian Ferie H +dconfigPaPianiFerie.panelTitle.new=Inserisci Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.edit=Modifica Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.view=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.delete=Cancella Dconfig Pa Piani Ferie +dconfigPaPfUoH.panelTitle.new=Inserisci Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.edit=Modifica Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.view=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.delete=Cancella Dconfig Pa Pf Uo H + +## Detail +dregolePianiFeriePk.label=Dregole Piani Ferie Pk +dregolePianiFeriePk.tooltip=Dregole Piani Ferie Pk +dregolePianiFeriePk.insert=Inserisci Dregole Piani Ferie Pk +dregolePianiFeriePk.detail=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.edit=Modifica Dregole Piani Ferie Pk +dregolePianiFeriePk.delete=Cancella Dregole Piani Ferie Pk +dregolePianiFeriePk.objectTitle=Dregole Piani Ferie Pk +dregolePianiFeriePk.objectKey=ID Dregole Piani Ferie Pk +dregolePianiFeriePk.jasperReports.title=Dregole Piani Ferie Pk Report +dregolePianiFeriePk.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dregolePianiFeriePk.jasperReports.tableHeader=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk +dregolePianiFeriePk.tooltip.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk +dregolePianiFeriePk.validation.required.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk è obbligatorio", +dregolePianiFeriePk.codiRegola=Codi Regola +dregolePianiFeriePk.tooltip.codiRegola=Codi Regola +dregolePianiFeriePk.validation.required.codiRegola=Codi Regola è obbligatorio", +dregolePianiFeriePk.descRegola=Desc Regola +dregolePianiFeriePk.tooltip.descRegola=Desc Regola +dregolePianiFeriePk.validation.required.descRegola=Desc Regola è obbligatorio", +dregolePianiFeriePk.flagEliminato=Flag Eliminato +dregolePianiFeriePk.tooltip.flagEliminato=Flag Eliminato +dregolePianiFeriePk.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dregolePianiFeriePk.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFeriePk.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFeriePk.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dregolePianiFeriePk.dataUltimaModifica=Data Ultima Modifica +dregolePianiFeriePk.tooltip.dataUltimaModifica=Data Ultima Modifica +dregolePianiFeriePk.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dregolePianiFeriePk.dataInizioValidita=Data Inizio Validita +dregolePianiFeriePk.tooltip.dataInizioValidita=Data Inizio Validita +dregolePianiFeriePk.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dregolePianiFeriePk.dataFineValidita=Data Fine Validita +dregolePianiFeriePk.tooltip.dataFineValidita=Data Fine Validita +dregolePianiFeriePk.validation.required.dataFineValidita=Data Fine Validita è obbligatorio" +dregolePianiFerieH.label=Dregole Piani Ferie H +dregolePianiFerieH.tooltip=Dregole Piani Ferie H +dregolePianiFerieH.insert=Inserisci Dregole Piani Ferie H +dregolePianiFerieH.detail=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.edit=Modifica Dregole Piani Ferie H +dregolePianiFerieH.delete=Cancella Dregole Piani Ferie H +dregolePianiFerieH.objectTitle=Dregole Piani Ferie H +dregolePianiFerieH.objectKey=ID Dregole Piani Ferie H +dregolePianiFerieH.jasperReports.title=Dregole Piani Ferie H Report +dregolePianiFerieH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dregolePianiFerieH.jasperReports.tableHeader=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H +dregolePianiFerieH.tooltip.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H +dregolePianiFerieH.validation.required.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H è obbligatorio", +dregolePianiFerieH.numMinGgDaPianificare=Num Min Gg Da Pianificare +dregolePianiFerieH.tooltip.numMinGgDaPianificare=Num Min Gg Da Pianificare +dregolePianiFerieH.validation.required.numMinGgDaPianificare=Num Min Gg Da Pianificare è obbligatorio", +dregolePianiFerieH.numMaxGgDaPianificare=Num Max Gg Da Pianificare +dregolePianiFerieH.tooltip.numMaxGgDaPianificare=Num Max Gg Da Pianificare +dregolePianiFerieH.validation.required.numMaxGgDaPianificare=Num Max Gg Da Pianificare è obbligatorio", +dregolePianiFerieH.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza +dregolePianiFerieH.tooltip.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza +dregolePianiFerieH.validation.required.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza è obbligatorio", +dregolePianiFerieH.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dregolePianiFerieH.tooltip.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dregolePianiFerieH.validation.required.flagValidoUoSubordinate=Flag Valido Uo Subordinate è obbligatorio", +dregolePianiFerieH.fkAmministrazione=Fk Amministrazione +dregolePianiFerieH.tooltip.fkAmministrazione=Fk Amministrazione +dregolePianiFerieH.validation.required.fkAmministrazione=Fk Amministrazione è obbligatorio", +dregolePianiFerieH.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk +dregolePianiFerieH.tooltip.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk +dregolePianiFerieH.validation.required.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk è obbligatorio", +dregolePianiFerieH.fkTipoOrganigramma=Fk Tipo Organigramma +dregolePianiFerieH.tooltip.fkTipoOrganigramma=Fk Tipo Organigramma +dregolePianiFerieH.validation.required.fkTipoOrganigramma=Fk Tipo Organigramma è obbligatorio", +dregolePianiFerieH.fkUnitaFunzionale=Fk Unita Funzionale +dregolePianiFerieH.tooltip.fkUnitaFunzionale=Fk Unita Funzionale +dregolePianiFerieH.validation.required.fkUnitaFunzionale=Fk Unita Funzionale è obbligatorio", +dregolePianiFerieH.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dregolePianiFerieH.tooltip.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dregolePianiFerieH.validation.required.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk è obbligatorio", +dregolePianiFerieH.flagEliminato=Flag Eliminato +dregolePianiFerieH.tooltip.flagEliminato=Flag Eliminato +dregolePianiFerieH.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dregolePianiFerieH.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFerieH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFerieH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dregolePianiFerieH.dataUltimaModifica=Data Ultima Modifica +dregolePianiFerieH.tooltip.dataUltimaModifica=Data Ultima Modifica +dregolePianiFerieH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dregolePianiFerieH.dataInizioValidita=Data Inizio Validita +dregolePianiFerieH.tooltip.dataInizioValidita=Data Inizio Validita +dregolePianiFerieH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dregolePianiFerieH.dataFineValidita=Data Fine Validita +dregolePianiFerieH.tooltip.dataFineValidita=Data Fine Validita +dregolePianiFerieH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio" +dregolePianiFerieH.theDregolePianiFeriePk=Dregole Piani Ferie Pk +dregolePianiFerieH.validation.required.theDregolePianiFeriePk=Dregole Piani Ferie Pk è obbligatorio +dpercAutPianFeriePk.label=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.tooltip=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.insert=Inserisci Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.detail=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.edit=Modifica Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.delete=Cancella Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.objectTitle=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.objectKey=ID Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.jasperReports.title=Dperc Aut Pian Ferie Pk Report +dpercAutPianFeriePk.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dpercAutPianFeriePk.jasperReports.tableHeader=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk +dpercAutPianFeriePk.tooltip.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk +dpercAutPianFeriePk.validation.required.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk è obbligatorio", +dpercAutPianFeriePk.flagEliminato=Flag Eliminato +dpercAutPianFeriePk.tooltip.flagEliminato=Flag Eliminato +dpercAutPianFeriePk.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dpercAutPianFeriePk.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFeriePk.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFeriePk.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dpercAutPianFeriePk.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFeriePk.tooltip.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFeriePk.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio" +dpercAutPianFerieH.label=Dperc Aut Pian Ferie H +dpercAutPianFerieH.tooltip=Dperc Aut Pian Ferie H +dpercAutPianFerieH.insert=Inserisci Dperc Aut Pian Ferie H +dpercAutPianFerieH.detail=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.edit=Modifica Dperc Aut Pian Ferie H +dpercAutPianFerieH.delete=Cancella Dperc Aut Pian Ferie H +dpercAutPianFerieH.objectTitle=Dperc Aut Pian Ferie H +dpercAutPianFerieH.objectKey=ID Dperc Aut Pian Ferie H +dpercAutPianFerieH.jasperReports.title=Dperc Aut Pian Ferie H Report +dpercAutPianFerieH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dpercAutPianFerieH.jasperReports.tableHeader=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H +dpercAutPianFerieH.tooltip.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H +dpercAutPianFerieH.validation.required.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H è obbligatorio", +dpercAutPianFerieH.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dpercAutPianFerieH.tooltip.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dpercAutPianFerieH.validation.required.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie è obbligatorio", +dpercAutPianFerieH.fkPercorso=Fk Percorso +dpercAutPianFerieH.tooltip.fkPercorso=Fk Percorso +dpercAutPianFerieH.validation.required.fkPercorso=Fk Percorso è obbligatorio", +dpercAutPianFerieH.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk +dpercAutPianFerieH.tooltip.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk +dpercAutPianFerieH.validation.required.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk è obbligatorio", +dpercAutPianFerieH.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFerieH.tooltip.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFerieH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dpercAutPianFerieH.dataFineValidita=Data Fine Validita +dpercAutPianFerieH.tooltip.dataFineValidita=Data Fine Validita +dpercAutPianFerieH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio", +dpercAutPianFerieH.dataInizioValidita=Data Inizio Validita +dpercAutPianFerieH.tooltip.dataInizioValidita=Data Inizio Validita +dpercAutPianFerieH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dpercAutPianFerieH.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFerieH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFerieH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dpercAutPianFerieH.flagEliminato=Flag Eliminato +dpercAutPianFerieH.tooltip.flagEliminato=Flag Eliminato +dpercAutPianFerieH.validation.required.flagEliminato=Flag Eliminato è obbligatorio" +dpercAutPianFerieH.theDpercAutPianFeriePk=Dperc Aut Pian Ferie Pk +dpercAutPianFerieH.validation.required.theDpercAutPianFeriePk=Dperc Aut Pian Ferie Pk è obbligatorio, +dpercAutPianFerieH.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie +dpercAutPianFerieH.validation.required.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie è obbligatorio +dconfigPaPianiFerie.label=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.tooltip=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.insert=Inserisci Dconfig Pa Piani Ferie +dconfigPaPianiFerie.detail=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.edit=Modifica Dconfig Pa Piani Ferie +dconfigPaPianiFerie.delete=Cancella Dconfig Pa Piani Ferie +dconfigPaPianiFerie.objectTitle=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.objectKey=ID Dconfig Pa Piani Ferie +dconfigPaPianiFerie.jasperReports.title=Dconfig Pa Piani Ferie Report +dconfigPaPianiFerie.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dconfigPaPianiFerie.jasperReports.tableHeader=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.descConfigPaPianoFerie=Desc Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.descConfigPaPianoFerie=Desc Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.descConfigPaPianoFerie=Desc Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.fkAmministrazionePk=Fk Amministrazione Pk +dconfigPaPianiFerie.tooltip.fkAmministrazionePk=Fk Amministrazione Pk +dconfigPaPianiFerie.validation.required.fkAmministrazionePk=Fk Amministrazione Pk è obbligatorio", +dconfigPaPianiFerie.fkTipoOrganigramma=Fk Tipo Organigramma +dconfigPaPianiFerie.tooltip.fkTipoOrganigramma=Fk Tipo Organigramma +dconfigPaPianiFerie.validation.required.fkTipoOrganigramma=Fk Tipo Organigramma è obbligatorio", +dconfigPaPianiFerie.dataUltimaModifica=Data Ultima Modifica +dconfigPaPianiFerie.tooltip.dataUltimaModifica=Data Ultima Modifica +dconfigPaPianiFerie.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dconfigPaPianiFerie.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPianiFerie.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPianiFerie.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dconfigPaPianiFerie.flagEliminato=Flag Eliminato +dconfigPaPianiFerie.tooltip.flagEliminato=Flag Eliminato +dconfigPaPianiFerie.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dconfigPaPianiFerie.dataInizioRecord=Data Inizio Record +dconfigPaPianiFerie.tooltip.dataInizioRecord=Data Inizio Record +dconfigPaPianiFerie.validation.required.dataInizioRecord=Data Inizio Record è obbligatorio", +dconfigPaPianiFerie.dataFineRecord=Data Fine Record +dconfigPaPianiFerie.tooltip.dataFineRecord=Data Fine Record +dconfigPaPianiFerie.validation.required.dataFineRecord=Data Fine Record è obbligatorio" +dconfigPaPfUoH.label=Dconfig Pa Pf Uo H +dconfigPaPfUoH.tooltip=Dconfig Pa Pf Uo H +dconfigPaPfUoH.insert=Inserisci Dconfig Pa Pf Uo H +dconfigPaPfUoH.detail=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.edit=Modifica Dconfig Pa Pf Uo H +dconfigPaPfUoH.delete=Cancella Dconfig Pa Pf Uo H +dconfigPaPfUoH.objectTitle=Dconfig Pa Pf Uo H +dconfigPaPfUoH.objectKey=ID Dconfig Pa Pf Uo H +dconfigPaPfUoH.jasperReports.title=Dconfig Pa Pf Uo H Report +dconfigPaPfUoH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dconfigPaPfUoH.jasperReports.tableHeader=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H +dconfigPaPfUoH.tooltip.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H +dconfigPaPfUoH.validation.required.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H è obbligatorio", +dconfigPaPfUoH.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dconfigPaPfUoH.tooltip.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dconfigPaPfUoH.validation.required.flagValidoUoSubordinate=Flag Valido Uo Subordinate è obbligatorio", +dconfigPaPfUoH.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dconfigPaPfUoH.tooltip.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dconfigPaPfUoH.validation.required.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie è obbligatorio", +dconfigPaPfUoH.fkUnitaFunzionale=Fk Unita Funzionale +dconfigPaPfUoH.tooltip.fkUnitaFunzionale=Fk Unita Funzionale +dconfigPaPfUoH.validation.required.fkUnitaFunzionale=Fk Unita Funzionale è obbligatorio", +dconfigPaPfUoH.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dconfigPaPfUoH.tooltip.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dconfigPaPfUoH.validation.required.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk è obbligatorio", +dconfigPaPfUoH.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPfUoH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPfUoH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dconfigPaPfUoH.flagEliminato=Flag Eliminato +dconfigPaPfUoH.tooltip.flagEliminato=Flag Eliminato +dconfigPaPfUoH.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dconfigPaPfUoH.dataInizioValidita=Data Inizio Validita +dconfigPaPfUoH.tooltip.dataInizioValidita=Data Inizio Validita +dconfigPaPfUoH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dconfigPaPfUoH.dataFineValidita=Data Fine Validita +dconfigPaPfUoH.tooltip.dataFineValidita=Data Fine Validita +dconfigPaPfUoH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio", +dconfigPaPfUoH.dataUltimaModifica=Data Ultima Modifica +dconfigPaPfUoH.tooltip.dataUltimaModifica=Data Ultima Modifica +dconfigPaPfUoH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio" +dconfigPaPfUoH.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie +dconfigPaPfUoH.validation.required.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie è obbligatorio + +## App +app.dregolePianiFeriePk.new=Inserisci Dregole Piani Ferie Pk +app.dregolePianiFeriePk.list=Lista Dregole Piani Ferie Pk +app.dregolePianiFeriePk.edit=Modifica Dregole Piani Ferie Pk +app.dregolePianiFeriePk.view=Dettaglio Dregole Piani Ferie Pk +app.dregolePianiFeriePk.delete=Cancella Dregole Piani Ferie Pk +app.dregolePianiFerieH.new=Inserisci Dregole Piani Ferie H +app.dregolePianiFerieH.list=Lista Dregole Piani Ferie H +app.dregolePianiFerieH.edit=Modifica Dregole Piani Ferie H +app.dregolePianiFerieH.view=Dettaglio Dregole Piani Ferie H +app.dregolePianiFerieH.delete=Cancella Dregole Piani Ferie H +app.dpercAutPianFeriePk.new=Inserisci Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.list=Lista Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.edit=Modifica Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.view=Dettaglio Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.delete=Cancella Dperc Aut Pian Ferie Pk +app.dpercAutPianFerieH.new=Inserisci Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.list=Lista Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.edit=Modifica Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.view=Dettaglio Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.delete=Cancella Dperc Aut Pian Ferie H +app.dconfigPaPianiFerie.new=Inserisci Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.list=Lista Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.edit=Modifica Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.view=Dettaglio Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.delete=Cancella Dconfig Pa Piani Ferie +app.dconfigPaPfUoH.new=Inserisci Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.list=Lista Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.edit=Modifica Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.view=Dettaglio Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.delete=Cancella Dconfig Pa Pf Uo H + +## JasperReports +jasperReports.logo=mice.png +jasperReports.date.format=dd/MM/yyyy +jasperReports.datetime.format=dd/MM/yyyy HH:mm:ss +jasperReports.pageNumber.label=Pag. +jasperReports.pageNumber.separator=di +jasperReports.footer.text=Copyright \u00a9 2020 MICE srl. Tutti i diritti riservati. + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources_en.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources_en.properties new file mode 100644 index 0000000000000000000000000000000000000000..bf22c415dc82dff5c4fe9ec04eba7f6f50bdbaa0 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources_en.properties @@ -0,0 +1,332 @@ +## Login +login.login=Accedi +login.button=Accedi +login.validation.username=Username è obbligatorio +login.validation.password=La password è obbligatoria +login.label=Effettua l'accesso + +## Pagination +pagination.Showing=Mostra +pagination.ElementsOf=Elementi di +pagination.All=Tutti" + +## Buttons +buttons.new=Nuovo +buttons.save=Salva +buttons.edit=Modifica +buttons.delete=Cancella +buttons.goBack=Indietro +buttons.search=Cerca +buttons.next=Avanti +buttons.export.pdf=Crea PDF + +## Panel +dregolePianiFeriePk.panelTitle.new=Inserisci Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.edit=Modifica Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.view=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.delete=Cancella Dregole Piani Ferie Pk +dregolePianiFerieH.panelTitle.new=Inserisci Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.edit=Modifica Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.view=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.delete=Cancella Dregole Piani Ferie H +dpercAutPianFeriePk.panelTitle.new=Inserisci Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.edit=Modifica Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.view=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.delete=Cancella Dperc Aut Pian Ferie Pk +dpercAutPianFerieH.panelTitle.new=Inserisci Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.edit=Modifica Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.view=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.delete=Cancella Dperc Aut Pian Ferie H +dconfigPaPianiFerie.panelTitle.new=Inserisci Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.edit=Modifica Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.view=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.delete=Cancella Dconfig Pa Piani Ferie +dconfigPaPfUoH.panelTitle.new=Inserisci Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.edit=Modifica Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.view=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.delete=Cancella Dconfig Pa Pf Uo H + +## Detail +dregolePianiFeriePk.label=Dregole Piani Ferie Pk +dregolePianiFeriePk.tooltip=Dregole Piani Ferie Pk +dregolePianiFeriePk.insert=Inserisci Dregole Piani Ferie Pk +dregolePianiFeriePk.detail=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.edit=Modifica Dregole Piani Ferie Pk +dregolePianiFeriePk.delete=Cancella Dregole Piani Ferie Pk +dregolePianiFeriePk.objectTitle=Dregole Piani Ferie Pk +dregolePianiFeriePk.objectKey=ID Dregole Piani Ferie Pk +dregolePianiFeriePk.jasperReports.title=Dregole Piani Ferie Pk Report +dregolePianiFeriePk.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dregolePianiFeriePk.jasperReports.tableHeader=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk +dregolePianiFeriePk.tooltip.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk +dregolePianiFeriePk.validation.required.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk è obbligatorio", +dregolePianiFeriePk.codiRegola=Codi Regola +dregolePianiFeriePk.tooltip.codiRegola=Codi Regola +dregolePianiFeriePk.validation.required.codiRegola=Codi Regola è obbligatorio", +dregolePianiFeriePk.descRegola=Desc Regola +dregolePianiFeriePk.tooltip.descRegola=Desc Regola +dregolePianiFeriePk.validation.required.descRegola=Desc Regola è obbligatorio", +dregolePianiFeriePk.flagEliminato=Flag Eliminato +dregolePianiFeriePk.tooltip.flagEliminato=Flag Eliminato +dregolePianiFeriePk.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dregolePianiFeriePk.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFeriePk.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFeriePk.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dregolePianiFeriePk.dataUltimaModifica=Data Ultima Modifica +dregolePianiFeriePk.tooltip.dataUltimaModifica=Data Ultima Modifica +dregolePianiFeriePk.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dregolePianiFeriePk.dataInizioValidita=Data Inizio Validita +dregolePianiFeriePk.tooltip.dataInizioValidita=Data Inizio Validita +dregolePianiFeriePk.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dregolePianiFeriePk.dataFineValidita=Data Fine Validita +dregolePianiFeriePk.tooltip.dataFineValidita=Data Fine Validita +dregolePianiFeriePk.validation.required.dataFineValidita=Data Fine Validita è obbligatorio" +dregolePianiFerieH.label=Dregole Piani Ferie H +dregolePianiFerieH.tooltip=Dregole Piani Ferie H +dregolePianiFerieH.insert=Inserisci Dregole Piani Ferie H +dregolePianiFerieH.detail=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.edit=Modifica Dregole Piani Ferie H +dregolePianiFerieH.delete=Cancella Dregole Piani Ferie H +dregolePianiFerieH.objectTitle=Dregole Piani Ferie H +dregolePianiFerieH.objectKey=ID Dregole Piani Ferie H +dregolePianiFerieH.jasperReports.title=Dregole Piani Ferie H Report +dregolePianiFerieH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dregolePianiFerieH.jasperReports.tableHeader=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H +dregolePianiFerieH.tooltip.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H +dregolePianiFerieH.validation.required.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H è obbligatorio", +dregolePianiFerieH.numMinGgDaPianificare=Num Min Gg Da Pianificare +dregolePianiFerieH.tooltip.numMinGgDaPianificare=Num Min Gg Da Pianificare +dregolePianiFerieH.validation.required.numMinGgDaPianificare=Num Min Gg Da Pianificare è obbligatorio", +dregolePianiFerieH.numMaxGgDaPianificare=Num Max Gg Da Pianificare +dregolePianiFerieH.tooltip.numMaxGgDaPianificare=Num Max Gg Da Pianificare +dregolePianiFerieH.validation.required.numMaxGgDaPianificare=Num Max Gg Da Pianificare è obbligatorio", +dregolePianiFerieH.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza +dregolePianiFerieH.tooltip.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza +dregolePianiFerieH.validation.required.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza è obbligatorio", +dregolePianiFerieH.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dregolePianiFerieH.tooltip.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dregolePianiFerieH.validation.required.flagValidoUoSubordinate=Flag Valido Uo Subordinate è obbligatorio", +dregolePianiFerieH.fkAmministrazione=Fk Amministrazione +dregolePianiFerieH.tooltip.fkAmministrazione=Fk Amministrazione +dregolePianiFerieH.validation.required.fkAmministrazione=Fk Amministrazione è obbligatorio", +dregolePianiFerieH.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk +dregolePianiFerieH.tooltip.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk +dregolePianiFerieH.validation.required.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk è obbligatorio", +dregolePianiFerieH.fkTipoOrganigramma=Fk Tipo Organigramma +dregolePianiFerieH.tooltip.fkTipoOrganigramma=Fk Tipo Organigramma +dregolePianiFerieH.validation.required.fkTipoOrganigramma=Fk Tipo Organigramma è obbligatorio", +dregolePianiFerieH.fkUnitaFunzionale=Fk Unita Funzionale +dregolePianiFerieH.tooltip.fkUnitaFunzionale=Fk Unita Funzionale +dregolePianiFerieH.validation.required.fkUnitaFunzionale=Fk Unita Funzionale è obbligatorio", +dregolePianiFerieH.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dregolePianiFerieH.tooltip.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dregolePianiFerieH.validation.required.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk è obbligatorio", +dregolePianiFerieH.flagEliminato=Flag Eliminato +dregolePianiFerieH.tooltip.flagEliminato=Flag Eliminato +dregolePianiFerieH.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dregolePianiFerieH.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFerieH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFerieH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dregolePianiFerieH.dataUltimaModifica=Data Ultima Modifica +dregolePianiFerieH.tooltip.dataUltimaModifica=Data Ultima Modifica +dregolePianiFerieH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dregolePianiFerieH.dataInizioValidita=Data Inizio Validita +dregolePianiFerieH.tooltip.dataInizioValidita=Data Inizio Validita +dregolePianiFerieH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dregolePianiFerieH.dataFineValidita=Data Fine Validita +dregolePianiFerieH.tooltip.dataFineValidita=Data Fine Validita +dregolePianiFerieH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio" +dregolePianiFerieH.theDregolePianiFeriePk=Dregole Piani Ferie Pk +dregolePianiFerieH.validation.required.theDregolePianiFeriePk=Dregole Piani Ferie Pk è obbligatorio +dpercAutPianFeriePk.label=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.tooltip=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.insert=Inserisci Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.detail=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.edit=Modifica Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.delete=Cancella Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.objectTitle=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.objectKey=ID Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.jasperReports.title=Dperc Aut Pian Ferie Pk Report +dpercAutPianFeriePk.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dpercAutPianFeriePk.jasperReports.tableHeader=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk +dpercAutPianFeriePk.tooltip.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk +dpercAutPianFeriePk.validation.required.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk è obbligatorio", +dpercAutPianFeriePk.flagEliminato=Flag Eliminato +dpercAutPianFeriePk.tooltip.flagEliminato=Flag Eliminato +dpercAutPianFeriePk.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dpercAutPianFeriePk.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFeriePk.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFeriePk.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dpercAutPianFeriePk.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFeriePk.tooltip.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFeriePk.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio" +dpercAutPianFerieH.label=Dperc Aut Pian Ferie H +dpercAutPianFerieH.tooltip=Dperc Aut Pian Ferie H +dpercAutPianFerieH.insert=Inserisci Dperc Aut Pian Ferie H +dpercAutPianFerieH.detail=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.edit=Modifica Dperc Aut Pian Ferie H +dpercAutPianFerieH.delete=Cancella Dperc Aut Pian Ferie H +dpercAutPianFerieH.objectTitle=Dperc Aut Pian Ferie H +dpercAutPianFerieH.objectKey=ID Dperc Aut Pian Ferie H +dpercAutPianFerieH.jasperReports.title=Dperc Aut Pian Ferie H Report +dpercAutPianFerieH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dpercAutPianFerieH.jasperReports.tableHeader=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H +dpercAutPianFerieH.tooltip.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H +dpercAutPianFerieH.validation.required.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H è obbligatorio", +dpercAutPianFerieH.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dpercAutPianFerieH.tooltip.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dpercAutPianFerieH.validation.required.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie è obbligatorio", +dpercAutPianFerieH.fkPercorso=Fk Percorso +dpercAutPianFerieH.tooltip.fkPercorso=Fk Percorso +dpercAutPianFerieH.validation.required.fkPercorso=Fk Percorso è obbligatorio", +dpercAutPianFerieH.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk +dpercAutPianFerieH.tooltip.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk +dpercAutPianFerieH.validation.required.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk è obbligatorio", +dpercAutPianFerieH.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFerieH.tooltip.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFerieH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dpercAutPianFerieH.dataFineValidita=Data Fine Validita +dpercAutPianFerieH.tooltip.dataFineValidita=Data Fine Validita +dpercAutPianFerieH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio", +dpercAutPianFerieH.dataInizioValidita=Data Inizio Validita +dpercAutPianFerieH.tooltip.dataInizioValidita=Data Inizio Validita +dpercAutPianFerieH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dpercAutPianFerieH.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFerieH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFerieH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dpercAutPianFerieH.flagEliminato=Flag Eliminato +dpercAutPianFerieH.tooltip.flagEliminato=Flag Eliminato +dpercAutPianFerieH.validation.required.flagEliminato=Flag Eliminato è obbligatorio" +dpercAutPianFerieH.theDpercAutPianFeriePk=Dperc Aut Pian Ferie Pk +dpercAutPianFerieH.validation.required.theDpercAutPianFeriePk=Dperc Aut Pian Ferie Pk è obbligatorio, +dpercAutPianFerieH.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie +dpercAutPianFerieH.validation.required.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie è obbligatorio +dconfigPaPianiFerie.label=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.tooltip=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.insert=Inserisci Dconfig Pa Piani Ferie +dconfigPaPianiFerie.detail=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.edit=Modifica Dconfig Pa Piani Ferie +dconfigPaPianiFerie.delete=Cancella Dconfig Pa Piani Ferie +dconfigPaPianiFerie.objectTitle=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.objectKey=ID Dconfig Pa Piani Ferie +dconfigPaPianiFerie.jasperReports.title=Dconfig Pa Piani Ferie Report +dconfigPaPianiFerie.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dconfigPaPianiFerie.jasperReports.tableHeader=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.descConfigPaPianoFerie=Desc Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.descConfigPaPianoFerie=Desc Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.descConfigPaPianoFerie=Desc Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.fkAmministrazionePk=Fk Amministrazione Pk +dconfigPaPianiFerie.tooltip.fkAmministrazionePk=Fk Amministrazione Pk +dconfigPaPianiFerie.validation.required.fkAmministrazionePk=Fk Amministrazione Pk è obbligatorio", +dconfigPaPianiFerie.fkTipoOrganigramma=Fk Tipo Organigramma +dconfigPaPianiFerie.tooltip.fkTipoOrganigramma=Fk Tipo Organigramma +dconfigPaPianiFerie.validation.required.fkTipoOrganigramma=Fk Tipo Organigramma è obbligatorio", +dconfigPaPianiFerie.dataUltimaModifica=Data Ultima Modifica +dconfigPaPianiFerie.tooltip.dataUltimaModifica=Data Ultima Modifica +dconfigPaPianiFerie.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dconfigPaPianiFerie.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPianiFerie.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPianiFerie.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dconfigPaPianiFerie.flagEliminato=Flag Eliminato +dconfigPaPianiFerie.tooltip.flagEliminato=Flag Eliminato +dconfigPaPianiFerie.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dconfigPaPianiFerie.dataInizioRecord=Data Inizio Record +dconfigPaPianiFerie.tooltip.dataInizioRecord=Data Inizio Record +dconfigPaPianiFerie.validation.required.dataInizioRecord=Data Inizio Record è obbligatorio", +dconfigPaPianiFerie.dataFineRecord=Data Fine Record +dconfigPaPianiFerie.tooltip.dataFineRecord=Data Fine Record +dconfigPaPianiFerie.validation.required.dataFineRecord=Data Fine Record è obbligatorio" +dconfigPaPfUoH.label=Dconfig Pa Pf Uo H +dconfigPaPfUoH.tooltip=Dconfig Pa Pf Uo H +dconfigPaPfUoH.insert=Inserisci Dconfig Pa Pf Uo H +dconfigPaPfUoH.detail=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.edit=Modifica Dconfig Pa Pf Uo H +dconfigPaPfUoH.delete=Cancella Dconfig Pa Pf Uo H +dconfigPaPfUoH.objectTitle=Dconfig Pa Pf Uo H +dconfigPaPfUoH.objectKey=ID Dconfig Pa Pf Uo H +dconfigPaPfUoH.jasperReports.title=Dconfig Pa Pf Uo H Report +dconfigPaPfUoH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dconfigPaPfUoH.jasperReports.tableHeader=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H +dconfigPaPfUoH.tooltip.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H +dconfigPaPfUoH.validation.required.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H è obbligatorio", +dconfigPaPfUoH.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dconfigPaPfUoH.tooltip.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dconfigPaPfUoH.validation.required.flagValidoUoSubordinate=Flag Valido Uo Subordinate è obbligatorio", +dconfigPaPfUoH.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dconfigPaPfUoH.tooltip.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dconfigPaPfUoH.validation.required.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie è obbligatorio", +dconfigPaPfUoH.fkUnitaFunzionale=Fk Unita Funzionale +dconfigPaPfUoH.tooltip.fkUnitaFunzionale=Fk Unita Funzionale +dconfigPaPfUoH.validation.required.fkUnitaFunzionale=Fk Unita Funzionale è obbligatorio", +dconfigPaPfUoH.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dconfigPaPfUoH.tooltip.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dconfigPaPfUoH.validation.required.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk è obbligatorio", +dconfigPaPfUoH.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPfUoH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPfUoH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dconfigPaPfUoH.flagEliminato=Flag Eliminato +dconfigPaPfUoH.tooltip.flagEliminato=Flag Eliminato +dconfigPaPfUoH.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dconfigPaPfUoH.dataInizioValidita=Data Inizio Validita +dconfigPaPfUoH.tooltip.dataInizioValidita=Data Inizio Validita +dconfigPaPfUoH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dconfigPaPfUoH.dataFineValidita=Data Fine Validita +dconfigPaPfUoH.tooltip.dataFineValidita=Data Fine Validita +dconfigPaPfUoH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio", +dconfigPaPfUoH.dataUltimaModifica=Data Ultima Modifica +dconfigPaPfUoH.tooltip.dataUltimaModifica=Data Ultima Modifica +dconfigPaPfUoH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio" +dconfigPaPfUoH.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie +dconfigPaPfUoH.validation.required.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie è obbligatorio + +## App +app.dregolePianiFeriePk.new=Inserisci Dregole Piani Ferie Pk +app.dregolePianiFeriePk.list=Lista Dregole Piani Ferie Pk +app.dregolePianiFeriePk.edit=Modifica Dregole Piani Ferie Pk +app.dregolePianiFeriePk.view=Dettaglio Dregole Piani Ferie Pk +app.dregolePianiFeriePk.delete=Cancella Dregole Piani Ferie Pk +app.dregolePianiFerieH.new=Inserisci Dregole Piani Ferie H +app.dregolePianiFerieH.list=Lista Dregole Piani Ferie H +app.dregolePianiFerieH.edit=Modifica Dregole Piani Ferie H +app.dregolePianiFerieH.view=Dettaglio Dregole Piani Ferie H +app.dregolePianiFerieH.delete=Cancella Dregole Piani Ferie H +app.dpercAutPianFeriePk.new=Inserisci Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.list=Lista Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.edit=Modifica Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.view=Dettaglio Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.delete=Cancella Dperc Aut Pian Ferie Pk +app.dpercAutPianFerieH.new=Inserisci Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.list=Lista Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.edit=Modifica Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.view=Dettaglio Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.delete=Cancella Dperc Aut Pian Ferie H +app.dconfigPaPianiFerie.new=Inserisci Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.list=Lista Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.edit=Modifica Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.view=Dettaglio Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.delete=Cancella Dconfig Pa Piani Ferie +app.dconfigPaPfUoH.new=Inserisci Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.list=Lista Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.edit=Modifica Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.view=Dettaglio Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.delete=Cancella Dconfig Pa Pf Uo H + +## JasperReports +jasperReports.logo=mice.png +jasperReports.date.format=dd/MM/yyyy +jasperReports.datetime.format=dd/MM/yyyy HH:mm:ss +jasperReports.pageNumber.label=Pag. +jasperReports.pageNumber.separator=di +jasperReports.footer.text=Copyright \u00a9 2020 MICE srl. Tutti i diritti riservati. + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources_it.properties b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..bf22c415dc82dff5c4fe9ec04eba7f6f50bdbaa0 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/applicationResources_it.properties @@ -0,0 +1,332 @@ +## Login +login.login=Accedi +login.button=Accedi +login.validation.username=Username è obbligatorio +login.validation.password=La password è obbligatoria +login.label=Effettua l'accesso + +## Pagination +pagination.Showing=Mostra +pagination.ElementsOf=Elementi di +pagination.All=Tutti" + +## Buttons +buttons.new=Nuovo +buttons.save=Salva +buttons.edit=Modifica +buttons.delete=Cancella +buttons.goBack=Indietro +buttons.search=Cerca +buttons.next=Avanti +buttons.export.pdf=Crea PDF + +## Panel +dregolePianiFeriePk.panelTitle.new=Inserisci Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.edit=Modifica Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.view=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.panelTitle.delete=Cancella Dregole Piani Ferie Pk +dregolePianiFerieH.panelTitle.new=Inserisci Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.edit=Modifica Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.view=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.panelTitle.delete=Cancella Dregole Piani Ferie H +dpercAutPianFeriePk.panelTitle.new=Inserisci Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.edit=Modifica Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.view=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.panelTitle.delete=Cancella Dperc Aut Pian Ferie Pk +dpercAutPianFerieH.panelTitle.new=Inserisci Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.edit=Modifica Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.view=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.panelTitle.delete=Cancella Dperc Aut Pian Ferie H +dconfigPaPianiFerie.panelTitle.new=Inserisci Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.edit=Modifica Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.view=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.panelTitle.delete=Cancella Dconfig Pa Piani Ferie +dconfigPaPfUoH.panelTitle.new=Inserisci Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.edit=Modifica Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.view=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.panelTitle.delete=Cancella Dconfig Pa Pf Uo H + +## Detail +dregolePianiFeriePk.label=Dregole Piani Ferie Pk +dregolePianiFeriePk.tooltip=Dregole Piani Ferie Pk +dregolePianiFeriePk.insert=Inserisci Dregole Piani Ferie Pk +dregolePianiFeriePk.detail=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.edit=Modifica Dregole Piani Ferie Pk +dregolePianiFeriePk.delete=Cancella Dregole Piani Ferie Pk +dregolePianiFeriePk.objectTitle=Dregole Piani Ferie Pk +dregolePianiFeriePk.objectKey=ID Dregole Piani Ferie Pk +dregolePianiFeriePk.jasperReports.title=Dregole Piani Ferie Pk Report +dregolePianiFeriePk.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dregolePianiFeriePk.jasperReports.tableHeader=Dettaglio Dregole Piani Ferie Pk +dregolePianiFeriePk.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk +dregolePianiFeriePk.tooltip.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk +dregolePianiFeriePk.validation.required.sequIdRegolePianiFeriePk=Sequ Id Regole Piani Ferie Pk è obbligatorio", +dregolePianiFeriePk.codiRegola=Codi Regola +dregolePianiFeriePk.tooltip.codiRegola=Codi Regola +dregolePianiFeriePk.validation.required.codiRegola=Codi Regola è obbligatorio", +dregolePianiFeriePk.descRegola=Desc Regola +dregolePianiFeriePk.tooltip.descRegola=Desc Regola +dregolePianiFeriePk.validation.required.descRegola=Desc Regola è obbligatorio", +dregolePianiFeriePk.flagEliminato=Flag Eliminato +dregolePianiFeriePk.tooltip.flagEliminato=Flag Eliminato +dregolePianiFeriePk.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dregolePianiFeriePk.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFeriePk.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFeriePk.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dregolePianiFeriePk.dataUltimaModifica=Data Ultima Modifica +dregolePianiFeriePk.tooltip.dataUltimaModifica=Data Ultima Modifica +dregolePianiFeriePk.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dregolePianiFeriePk.dataInizioValidita=Data Inizio Validita +dregolePianiFeriePk.tooltip.dataInizioValidita=Data Inizio Validita +dregolePianiFeriePk.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dregolePianiFeriePk.dataFineValidita=Data Fine Validita +dregolePianiFeriePk.tooltip.dataFineValidita=Data Fine Validita +dregolePianiFeriePk.validation.required.dataFineValidita=Data Fine Validita è obbligatorio" +dregolePianiFerieH.label=Dregole Piani Ferie H +dregolePianiFerieH.tooltip=Dregole Piani Ferie H +dregolePianiFerieH.insert=Inserisci Dregole Piani Ferie H +dregolePianiFerieH.detail=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.edit=Modifica Dregole Piani Ferie H +dregolePianiFerieH.delete=Cancella Dregole Piani Ferie H +dregolePianiFerieH.objectTitle=Dregole Piani Ferie H +dregolePianiFerieH.objectKey=ID Dregole Piani Ferie H +dregolePianiFerieH.jasperReports.title=Dregole Piani Ferie H Report +dregolePianiFerieH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dregolePianiFerieH.jasperReports.tableHeader=Dettaglio Dregole Piani Ferie H +dregolePianiFerieH.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H +dregolePianiFerieH.tooltip.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H +dregolePianiFerieH.validation.required.sequIdRegolePianiFerieH=Sequ Id Regole Piani Ferie H è obbligatorio", +dregolePianiFerieH.numMinGgDaPianificare=Num Min Gg Da Pianificare +dregolePianiFerieH.tooltip.numMinGgDaPianificare=Num Min Gg Da Pianificare +dregolePianiFerieH.validation.required.numMinGgDaPianificare=Num Min Gg Da Pianificare è obbligatorio", +dregolePianiFerieH.numMaxGgDaPianificare=Num Max Gg Da Pianificare +dregolePianiFerieH.tooltip.numMaxGgDaPianificare=Num Max Gg Da Pianificare +dregolePianiFerieH.validation.required.numMaxGgDaPianificare=Num Max Gg Da Pianificare è obbligatorio", +dregolePianiFerieH.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza +dregolePianiFerieH.tooltip.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza +dregolePianiFerieH.validation.required.numePercMinGiorniPresenza=Nume Perc Min Giorni Presenza è obbligatorio", +dregolePianiFerieH.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dregolePianiFerieH.tooltip.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dregolePianiFerieH.validation.required.flagValidoUoSubordinate=Flag Valido Uo Subordinate è obbligatorio", +dregolePianiFerieH.fkAmministrazione=Fk Amministrazione +dregolePianiFerieH.tooltip.fkAmministrazione=Fk Amministrazione +dregolePianiFerieH.validation.required.fkAmministrazione=Fk Amministrazione è obbligatorio", +dregolePianiFerieH.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk +dregolePianiFerieH.tooltip.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk +dregolePianiFerieH.validation.required.fkRegolaPianoFeriePk=Fk Regola Piano Ferie Pk è obbligatorio", +dregolePianiFerieH.fkTipoOrganigramma=Fk Tipo Organigramma +dregolePianiFerieH.tooltip.fkTipoOrganigramma=Fk Tipo Organigramma +dregolePianiFerieH.validation.required.fkTipoOrganigramma=Fk Tipo Organigramma è obbligatorio", +dregolePianiFerieH.fkUnitaFunzionale=Fk Unita Funzionale +dregolePianiFerieH.tooltip.fkUnitaFunzionale=Fk Unita Funzionale +dregolePianiFerieH.validation.required.fkUnitaFunzionale=Fk Unita Funzionale è obbligatorio", +dregolePianiFerieH.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dregolePianiFerieH.tooltip.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dregolePianiFerieH.validation.required.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk è obbligatorio", +dregolePianiFerieH.flagEliminato=Flag Eliminato +dregolePianiFerieH.tooltip.flagEliminato=Flag Eliminato +dregolePianiFerieH.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dregolePianiFerieH.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFerieH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dregolePianiFerieH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dregolePianiFerieH.dataUltimaModifica=Data Ultima Modifica +dregolePianiFerieH.tooltip.dataUltimaModifica=Data Ultima Modifica +dregolePianiFerieH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dregolePianiFerieH.dataInizioValidita=Data Inizio Validita +dregolePianiFerieH.tooltip.dataInizioValidita=Data Inizio Validita +dregolePianiFerieH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dregolePianiFerieH.dataFineValidita=Data Fine Validita +dregolePianiFerieH.tooltip.dataFineValidita=Data Fine Validita +dregolePianiFerieH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio" +dregolePianiFerieH.theDregolePianiFeriePk=Dregole Piani Ferie Pk +dregolePianiFerieH.validation.required.theDregolePianiFeriePk=Dregole Piani Ferie Pk è obbligatorio +dpercAutPianFeriePk.label=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.tooltip=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.insert=Inserisci Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.detail=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.edit=Modifica Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.delete=Cancella Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.objectTitle=Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.objectKey=ID Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.jasperReports.title=Dperc Aut Pian Ferie Pk Report +dpercAutPianFeriePk.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dpercAutPianFeriePk.jasperReports.tableHeader=Dettaglio Dperc Aut Pian Ferie Pk +dpercAutPianFeriePk.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk +dpercAutPianFeriePk.tooltip.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk +dpercAutPianFeriePk.validation.required.sequIdPercAutPianFeriePk=Sequ Id Perc Aut Pian Ferie Pk è obbligatorio", +dpercAutPianFeriePk.flagEliminato=Flag Eliminato +dpercAutPianFeriePk.tooltip.flagEliminato=Flag Eliminato +dpercAutPianFeriePk.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dpercAutPianFeriePk.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFeriePk.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFeriePk.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dpercAutPianFeriePk.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFeriePk.tooltip.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFeriePk.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio" +dpercAutPianFerieH.label=Dperc Aut Pian Ferie H +dpercAutPianFerieH.tooltip=Dperc Aut Pian Ferie H +dpercAutPianFerieH.insert=Inserisci Dperc Aut Pian Ferie H +dpercAutPianFerieH.detail=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.edit=Modifica Dperc Aut Pian Ferie H +dpercAutPianFerieH.delete=Cancella Dperc Aut Pian Ferie H +dpercAutPianFerieH.objectTitle=Dperc Aut Pian Ferie H +dpercAutPianFerieH.objectKey=ID Dperc Aut Pian Ferie H +dpercAutPianFerieH.jasperReports.title=Dperc Aut Pian Ferie H Report +dpercAutPianFerieH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dpercAutPianFerieH.jasperReports.tableHeader=Dettaglio Dperc Aut Pian Ferie H +dpercAutPianFerieH.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H +dpercAutPianFerieH.tooltip.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H +dpercAutPianFerieH.validation.required.sequIdPercAutPianFerieH=Sequ Id Perc Aut Pian Ferie H è obbligatorio", +dpercAutPianFerieH.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dpercAutPianFerieH.tooltip.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dpercAutPianFerieH.validation.required.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie è obbligatorio", +dpercAutPianFerieH.fkPercorso=Fk Percorso +dpercAutPianFerieH.tooltip.fkPercorso=Fk Percorso +dpercAutPianFerieH.validation.required.fkPercorso=Fk Percorso è obbligatorio", +dpercAutPianFerieH.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk +dpercAutPianFerieH.tooltip.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk +dpercAutPianFerieH.validation.required.fkPercAutPianFeriePk=Fk Perc Aut Pian Ferie Pk è obbligatorio", +dpercAutPianFerieH.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFerieH.tooltip.dataUltimaModifica=Data Ultima Modifica +dpercAutPianFerieH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dpercAutPianFerieH.dataFineValidita=Data Fine Validita +dpercAutPianFerieH.tooltip.dataFineValidita=Data Fine Validita +dpercAutPianFerieH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio", +dpercAutPianFerieH.dataInizioValidita=Data Inizio Validita +dpercAutPianFerieH.tooltip.dataInizioValidita=Data Inizio Validita +dpercAutPianFerieH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dpercAutPianFerieH.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFerieH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dpercAutPianFerieH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dpercAutPianFerieH.flagEliminato=Flag Eliminato +dpercAutPianFerieH.tooltip.flagEliminato=Flag Eliminato +dpercAutPianFerieH.validation.required.flagEliminato=Flag Eliminato è obbligatorio" +dpercAutPianFerieH.theDpercAutPianFeriePk=Dperc Aut Pian Ferie Pk +dpercAutPianFerieH.validation.required.theDpercAutPianFeriePk=Dperc Aut Pian Ferie Pk è obbligatorio, +dpercAutPianFerieH.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie +dpercAutPianFerieH.validation.required.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie è obbligatorio +dconfigPaPianiFerie.label=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.tooltip=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.insert=Inserisci Dconfig Pa Piani Ferie +dconfigPaPianiFerie.detail=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.edit=Modifica Dconfig Pa Piani Ferie +dconfigPaPianiFerie.delete=Cancella Dconfig Pa Piani Ferie +dconfigPaPianiFerie.objectTitle=Dconfig Pa Piani Ferie +dconfigPaPianiFerie.objectKey=ID Dconfig Pa Piani Ferie +dconfigPaPianiFerie.jasperReports.title=Dconfig Pa Piani Ferie Report +dconfigPaPianiFerie.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dconfigPaPianiFerie.jasperReports.tableHeader=Dettaglio Dconfig Pa Piani Ferie +dconfigPaPianiFerie.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.sequIdConfigPaPianoFerie=Sequ Id Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.codiConfigPaPianoFerie=Codi Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.descConfigPaPianoFerie=Desc Config Pa Piano Ferie +dconfigPaPianiFerie.tooltip.descConfigPaPianoFerie=Desc Config Pa Piano Ferie +dconfigPaPianiFerie.validation.required.descConfigPaPianoFerie=Desc Config Pa Piano Ferie è obbligatorio", +dconfigPaPianiFerie.fkAmministrazionePk=Fk Amministrazione Pk +dconfigPaPianiFerie.tooltip.fkAmministrazionePk=Fk Amministrazione Pk +dconfigPaPianiFerie.validation.required.fkAmministrazionePk=Fk Amministrazione Pk è obbligatorio", +dconfigPaPianiFerie.fkTipoOrganigramma=Fk Tipo Organigramma +dconfigPaPianiFerie.tooltip.fkTipoOrganigramma=Fk Tipo Organigramma +dconfigPaPianiFerie.validation.required.fkTipoOrganigramma=Fk Tipo Organigramma è obbligatorio", +dconfigPaPianiFerie.dataUltimaModifica=Data Ultima Modifica +dconfigPaPianiFerie.tooltip.dataUltimaModifica=Data Ultima Modifica +dconfigPaPianiFerie.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio", +dconfigPaPianiFerie.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPianiFerie.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPianiFerie.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dconfigPaPianiFerie.flagEliminato=Flag Eliminato +dconfigPaPianiFerie.tooltip.flagEliminato=Flag Eliminato +dconfigPaPianiFerie.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dconfigPaPianiFerie.dataInizioRecord=Data Inizio Record +dconfigPaPianiFerie.tooltip.dataInizioRecord=Data Inizio Record +dconfigPaPianiFerie.validation.required.dataInizioRecord=Data Inizio Record è obbligatorio", +dconfigPaPianiFerie.dataFineRecord=Data Fine Record +dconfigPaPianiFerie.tooltip.dataFineRecord=Data Fine Record +dconfigPaPianiFerie.validation.required.dataFineRecord=Data Fine Record è obbligatorio" +dconfigPaPfUoH.label=Dconfig Pa Pf Uo H +dconfigPaPfUoH.tooltip=Dconfig Pa Pf Uo H +dconfigPaPfUoH.insert=Inserisci Dconfig Pa Pf Uo H +dconfigPaPfUoH.detail=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.edit=Modifica Dconfig Pa Pf Uo H +dconfigPaPfUoH.delete=Cancella Dconfig Pa Pf Uo H +dconfigPaPfUoH.objectTitle=Dconfig Pa Pf Uo H +dconfigPaPfUoH.objectKey=ID Dconfig Pa Pf Uo H +dconfigPaPfUoH.jasperReports.title=Dconfig Pa Pf Uo H Report +dconfigPaPfUoH.jasperReports.subTitle=Gestioneferie-ms-configurazionepf, v0.0.1-SNAPSHOT +dconfigPaPfUoH.jasperReports.tableHeader=Dettaglio Dconfig Pa Pf Uo H +dconfigPaPfUoH.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H +dconfigPaPfUoH.tooltip.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H +dconfigPaPfUoH.validation.required.sequIdConfigPaPfUoH=Sequ Id Config Pa Pf Uo H è obbligatorio", +dconfigPaPfUoH.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dconfigPaPfUoH.tooltip.flagValidoUoSubordinate=Flag Valido Uo Subordinate +dconfigPaPfUoH.validation.required.flagValidoUoSubordinate=Flag Valido Uo Subordinate è obbligatorio", +dconfigPaPfUoH.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dconfigPaPfUoH.tooltip.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie +dconfigPaPfUoH.validation.required.fkConfigPaPianoFerie=Fk Config Pa Piano Ferie è obbligatorio", +dconfigPaPfUoH.fkUnitaFunzionale=Fk Unita Funzionale +dconfigPaPfUoH.tooltip.fkUnitaFunzionale=Fk Unita Funzionale +dconfigPaPfUoH.validation.required.fkUnitaFunzionale=Fk Unita Funzionale è obbligatorio", +dconfigPaPfUoH.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dconfigPaPfUoH.tooltip.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk +dconfigPaPfUoH.validation.required.fkUnitaOrganizzativaPk=Fk Unita Organizzativa Pk è obbligatorio", +dconfigPaPfUoH.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPfUoH.tooltip.utenteUltimaModifica=Utente Ultima Modifica +dconfigPaPfUoH.validation.required.utenteUltimaModifica=Utente Ultima Modifica è obbligatorio", +dconfigPaPfUoH.flagEliminato=Flag Eliminato +dconfigPaPfUoH.tooltip.flagEliminato=Flag Eliminato +dconfigPaPfUoH.validation.required.flagEliminato=Flag Eliminato è obbligatorio", +dconfigPaPfUoH.dataInizioValidita=Data Inizio Validita +dconfigPaPfUoH.tooltip.dataInizioValidita=Data Inizio Validita +dconfigPaPfUoH.validation.required.dataInizioValidita=Data Inizio Validita è obbligatorio", +dconfigPaPfUoH.dataFineValidita=Data Fine Validita +dconfigPaPfUoH.tooltip.dataFineValidita=Data Fine Validita +dconfigPaPfUoH.validation.required.dataFineValidita=Data Fine Validita è obbligatorio", +dconfigPaPfUoH.dataUltimaModifica=Data Ultima Modifica +dconfigPaPfUoH.tooltip.dataUltimaModifica=Data Ultima Modifica +dconfigPaPfUoH.validation.required.dataUltimaModifica=Data Ultima Modifica è obbligatorio" +dconfigPaPfUoH.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie +dconfigPaPfUoH.validation.required.theDconfigPaPianiFerie=Dconfig Pa Piani Ferie è obbligatorio + +## App +app.dregolePianiFeriePk.new=Inserisci Dregole Piani Ferie Pk +app.dregolePianiFeriePk.list=Lista Dregole Piani Ferie Pk +app.dregolePianiFeriePk.edit=Modifica Dregole Piani Ferie Pk +app.dregolePianiFeriePk.view=Dettaglio Dregole Piani Ferie Pk +app.dregolePianiFeriePk.delete=Cancella Dregole Piani Ferie Pk +app.dregolePianiFerieH.new=Inserisci Dregole Piani Ferie H +app.dregolePianiFerieH.list=Lista Dregole Piani Ferie H +app.dregolePianiFerieH.edit=Modifica Dregole Piani Ferie H +app.dregolePianiFerieH.view=Dettaglio Dregole Piani Ferie H +app.dregolePianiFerieH.delete=Cancella Dregole Piani Ferie H +app.dpercAutPianFeriePk.new=Inserisci Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.list=Lista Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.edit=Modifica Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.view=Dettaglio Dperc Aut Pian Ferie Pk +app.dpercAutPianFeriePk.delete=Cancella Dperc Aut Pian Ferie Pk +app.dpercAutPianFerieH.new=Inserisci Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.list=Lista Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.edit=Modifica Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.view=Dettaglio Dperc Aut Pian Ferie H +app.dpercAutPianFerieH.delete=Cancella Dperc Aut Pian Ferie H +app.dconfigPaPianiFerie.new=Inserisci Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.list=Lista Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.edit=Modifica Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.view=Dettaglio Dconfig Pa Piani Ferie +app.dconfigPaPianiFerie.delete=Cancella Dconfig Pa Piani Ferie +app.dconfigPaPfUoH.new=Inserisci Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.list=Lista Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.edit=Modifica Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.view=Dettaglio Dconfig Pa Pf Uo H +app.dconfigPaPfUoH.delete=Cancella Dconfig Pa Pf Uo H + +## JasperReports +jasperReports.logo=mice.png +jasperReports.date.format=dd/MM/yyyy +jasperReports.datetime.format=dd/MM/yyyy HH:mm:ss +jasperReports.pageNumber.label=Pag. +jasperReports.pageNumber.separator=di +jasperReports.footer.text=Copyright \u00a9 2020 MICE srl. Tutti i diritti riservati. + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/changeset/initDataDb.xml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/changeset/initDataDb.xml new file mode 100644 index 0000000000000000000000000000000000000000..5df6b60fcc5407a5eeae58dbe6a3c55ec96f84f6 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/changeset/initDataDb.xml @@ -0,0 +1,16 @@ + + + + + ANY + + Inizializzazione del db + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/sql/initDbScript.sql b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/sql/initDbScript.sql new file mode 100644 index 0000000000000000000000000000000000000000..29647afa98fdaa559d4ae9e45b8e279b7247beab --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/sql/initDbScript.sql @@ -0,0 +1,9 @@ + + +INSERT INTO CLIENTE VALUES ('dottore','PPPPPPP','ciao@example.com','08111111','mice','DFO383AFA','pippo','www.ciao.it','08113434','bakugo'); +INSERT IGNORE INTO TIPO_ORDINE (`id_tipo_ordine`, `nome_tipo_ordine`) VALUES (1,'fornitore'); +INSERT IGNORE INTO TIPO_ORDINE (`id_tipo_ordine`, `nome_tipo_ordine`) VALUES (2,'ignora') ; +INSERT IGNORE INTO PRODOTTO (`id_prodotto`, `created_by`, `created_date`, `last_modified_by`, `last_modified_date`, `descrizione_prodotto`, `prezzo_unitario`, `scheda_tecnica`) VALUES (1, 'anonymousUser', '2021-09-15 15:17:04.766', 'anonymousUser', '2021-09-15 15:17:04.766','Pentola in acciaio inox',14.50, 0x89504e470d0a1a0a0000000d49484452000001e1000001f90806000000b6cf86f80000825a744558746d7866696c65002533436d7866696c65253230686f73742533442532326170702e6469616772616d732e6e65742532322532306d6f646966696564253344253232323032312d30362d3134543133253341323225334131352e3530365a2532322532306167656e74253344253232352e302532302857696e646f77732532304e5425323031302e3025334225323057696e3634253342253230783634292532304170706c655765624b69742532463533372e3336253230284b48544d4c2532432532306c696b652532304765636b6f292532304368726f6d6525324639312e302e343437322e3130312532305361666172692532463533372e333625323225323065746167253344253232767a6e49774663496e59374134333047412d545525323225323076657273696f6e25334425323231342e372e37253232253230747970652533442532326465766963652532322533452533436469616772616d2532306964253344253232734e3869355a3476387363586a5653744a6c62582532322532306e616d65253344253232506167652d31253232253345374c315838253242504b665362386158527046584b34524534456b5968343430496b63694c79703325324652253246356c6a535a62733358314c33765857636d724f496445496a66376c30412532466e54796a58486449636a36552532425a486e374a77544b6a6a253242682532464a3851424559773676344149253242657645514c4866673238357972376664466642707a71796e3850517239483179724c5033397a3454494d37564b4e667a7559446e3266703876666a4d587a504f7825324665316b787448383736786925324638373862634e4b34253246667452763871573874636f685a42253246475a667a366c332532424d544e4d304c2532464f645045664625324639657961654d7332482532467179465525324242504b7a634f7725324650725748567a6541754c39515a646639346e25324677646c253246653745353735662532466d527547494a304e715758555575316b35763276577a7a412532462532464c374b567663727238583746543925324231343841706d414d676a456a474e627066465344663266454b4b3970324b54253242663732427425324625324247506d4d635125324257754a7925324636555a4d4b31675857777a3938692532463762774978397958394d48647825324235634c2532466e67533037253246584e70365250353534722532425058512532462532425943506d623579507a73505a5a4470594733616633736c70795a3478546348612532464a6645654b3565757659396738425a5632334a444f3877253246393649466c655a70436c35376d59636d25324636737a4359566a4f505437765a33667325324631426f33786538754d2532464a4437386279793964534566756e795a7a253246755350323467666b764225324259643477332532464766343373667845724450743956666c58496b5839486f74253246532532464c37337837253242463262665833377a253242332532424239386a663866377671487a4c374169253242567432506d7677315451453562726c6f6d625a363925324666594d6f782532464e6671496b377731683025324631497a636f6e777a4c4d6e54334253303477635a703825324637683446397a3565665066636e505a4d786e2532464b584f674276784877644664514365733725324666687925324258426467424268414345644f73782532463563335a61677147375a6d5025324263336a4d695968597638663042786a253246335a7a75386838253242253246784833324c386c3825324678384d345443674a414c253246363238682532464664777a6225324625324275684247714425324250253246667566495149302532464c636938496468253242477342515025324265253246332532424d2532466450356a253246344425324676395738442532465554712532465365666958547a35763156554e66365762796225324233414825324278436334343379596b4158627433316d506636494b5a33684f5a6467253246556d454b535643432532424163432532426d386925324246253242677a696a7839377a384e253246372532424e54507025324679706c4a7635445a674a54396825324662357325324250787757572532425637253246386664322532426339253246253246764e66736633587325324634446b337954632532466c62707630746325324671687a25324638644a3338507862395a6c4e376b7a25324264253246774c7575796a49777a54253242556b72253242566f333843647a4830333347582532466e745454524a2532467a317a6b763471354d504633784d367a4f307a3566546a4d53336b62717a357568622532424d2532466a75792532464f576178774173395139253246366e785a7a743878563777757739397937366257664162672532466a386a2532424225324648345625324266354925324666542532463931645034253242253242697a78764441672532424149386265505070307225324647426172396f2532466e253246316f54574d682532467a71643733634d36702532466c2532465171446651655939775474662532466a4e4334762532425938585065336a5a7125324239735825324261657a6b66706664376a2532464448253246366a7a3331502532466170662532424e322532462532464379507834555a58346449754b504f25324251716a7a587348644b6b393844636635364f5777727525324225324634576755504a34686a392532467554514d4c31394258742532466651584236507179375952422532426b356c6459753639684d354c4a5148624b7449486862374963504964557847593553564a373634775432626267306d6b384769667078516a4462532532465453787a74564c5656336e556e466e756f3966754f376f52784f394c585a4e6a3046414325324244344335684565524c376a4b7432776c3545614247786f624a68767125324669755a4634506c4e796638734457317a77363734384c36503777467770796c547568374971444a354d444f6f56784d633758513471674d3064584e4c666a47544a6453533273462532464d6a43655a486479366a5939314e6776535448765534753433594f75686f50545976496e39705079554a4176344c453630656f4c5a5544526765756e35695235513672253242733757466549456f6858507078667a5a4d764a55525655597532616a336b25324267364270484b6261445a5434477452556f565a517643486e793738796b3276502532424c5276732532424c6e4d47685437786454356363734d6f36543468753243524339626370792532426e467135726b253242664c4f4b586f38524d33735a7662466c75785a69754e7a7a37654546506455793370487243575a253246694f63583547504b714638753672735951454e31786f30613746566f7077485433364644654c74536e546c5572537053784c646a4d6f637562435963443774735472514c4b5a4135366e4e4d7739644772664272324871442532424f454c53473764673865674572506c68726d7357796c6851613077664f556f5225324243346c4370594352354c617932253246316c6f7947495236665077564d4764486d66665a356d496978727265253246785137512532424b6e3351546737454c55487a54533432253246425861544c4a7777624e2532427036594a48253246787276384d594d585a7559724235637858796c4857253246714641464e3531456d32414557647a4353796b625379797357625865453358414a61654570333566384d5a6225324265774a35253242337a427462467668356e72694d516a37557562766e6755756d38565a726c33253246716d367572514e654f556c304f6a4963576a4450433566624a375735324a6e346a546c557a5070686c5772356c47253242253246574734326e4325324665704f496475496c423045527258543839706c336b496f7a2532466548644a6d4245344f4830253246516c595552613852387236666d643149326e71554e494847564a4575467735563755253246504461466c36794945426b71656374427775434a45754b6c4837566c51743965766c563925324644794e4d33312532425970667236785937776348253246703267417935667a356b6b626e6c6b253242306577646357472532427461327a6272627536384a4d4f4c7a6a6b746b6f79564f5556374e6a697549667243586d7265576f426e563247253242446e7737587a52577a7952746f5535565a6831512532466c614e77312532464853714e43436931596779304274454453586e7a49396f64316a6f365955434f734d744f7836394c6576756d64666172516e374f5546356173416d2532422532464645512532465745563450713141784645672532426339737652487a414166347244336777786533435a62435164547667495849696d7170366c33614133726274726451736961674a5055547a7843585a346f78564e6233764731684e57523047652532426a5a754e54776c556a643073464e59366369793763496555386d6d6775524a5563766b786f6561326b7234474649483163464433354354463052253242375625324256456e706b2532427677356e6874656456794965695a4773584855346e785777364b324b4d7a595948664a56792532464f746b4b425a4c6658716254427a4e555a4d636458435059413136704e61546a3043554f6372346d334e594d66634e4f7a697471435377444c4a505634586956495250336b5a41593738476b443974493250416a6e3374696a6d436f456c4763776d616339686858784c494255497367594769675235417639525771334a25324638686a64574c74664a4770356d7264634c394e7875533978307549796b656d4467653372432532426b35473573637a505945526c6d4c4f6e305247342532425055417531783133326b475a6c386465253246344d647a4d594675382532464852325448714f464167724746486773566831673465757a624f6b394253543245656253354179576e3377585a777463457359634e68397041434f354b37724668353574794a796879617549784c47472532466a63434336505a6a7a5a39677a643372495666576a345057454372253246615763306b346e5168656246413958516d5943253242326c756341383667515548394f59685573436b31334f614f706f566a756625324239756950724772506e6462382532464264754f395a56506c4e6925324225324279566a253242333932457656736337253246466d253246794a66253242656361426139534a78596656346b6f3741324850765634484f5354444e56356d61414132785a7831527156336f375072326358575054426539704d25324264414737733144327878537665435a56682532463373786731716845596e51362532466d5655586c327041554c745a746f57757644667471377a44764e4a573671766e4b7547386378754379323936656b334a37514d4153694a384767554f384a625858324f74647169306a644273706c6e716c37347679327a34586b5230797053665837485471477a2532466134754a474733487875544d7a6179586c6a6e5337657a365038586f393052456a35336d75253242444f467334444e716a6447354d4c45686a544e6b596d707a4c394d7054523377627938792532426334532532426f463951685765253242373031704c4a56426a4e6951393357467a67584259456b3141566c2532424774374e666d6f61467649724e54564678337959554b7838483647567657346c5832304b6b357265594d6452576a636757626567753872787358626253376348326836704372426463724538485961513872713425324275622532425a386377253246346a4967614349644541694d32614e7a45554653626b4c572532466d7577736f45467148727268495163516f62515733314770652532426256346d5476497442545962316f36353730674e3847314f417a65552532425348446b6d4346764b58687264324844497076544b5952686d725566446b484a667642485471654856316f59436c666f51524851627a5a796f774973414e38457876434d3765325739517a47394f6d4564495947763976486f625a556b7332755a36714d574e524b32526a376b773659764765742532426b74476671645a6f6b49444d4849756c326658355a4c69435953706c78624e4d723168555a356b566e677473536e5243343563507035324c4e52727a6a724c4637535a484a704f4250416a724764386938456d656d5746527572746b7443326a59763559754c5030315436686a576b6a6867447a693955544f6e39386a7970664448657555253246412532424442624245655436444a4930306c63704c46454f79306f486f6a49493638793539493467734b766567426a4a745a48717472624b564974654771613049776b58625958784f5379716f4567507a66376b6e5445253246496d6b4d504b5539776b48466e734a544f44767451305945727641326d547847316c55665164756d6f3456347148394c5536327a654564777459394470327832546373444663416969416a6c4f72584653436f503677484a4c3572547a3438436250634f4e5a71334c7a6a32725067437870526569596b44653669644b4f6f4b334e4f425a4461566342417a6c5874456e614e7851556a394b5377542532466534626f6b356957395576705a4b4a59646a5969566e587669364c523153674c597a754644566a776c6d396c55343148654d495a74374133596f444d566473656f4d6e767470746f4d68587a7870456971334768306a624b6e6648795742627a495656305768694e6f4e6f426e38726d79586f72624a4b544b44776970713457706a364c62253246457455336b76636a62494d38776e7531736c4234493771544f365958425a715239463575414b4733576a4b58576b33327863433851544b5a72306d6959512532466b46694a68686159484f72543662505834727350685a6845685a394c4e523132452532466d4f7a4a3757366a526f6b617379325133654773516f496864685a4b6645594934356d34465971646a6941553563746235754b6173494e6b2532425343513764586772543244786941326b46746352634835764163684944537577416a677a41646d5756754937645a3355782532424f526562253242693559555431317364356a637a3147305442664f316f3944614f65596937574c544e53654f37436c34684675526455587638475a53786b64456a686a4457656432556c7347616f7459502532463164434a696458636950574d504a474776706145574b7451355a316f584b54556e38624a3934427354563356675271545265506f5646505243587a534d4c61695a785775706e616130706a4e597a74393070784c4f797133526b544e47467152425a53704c4b65466d74435164496c716e673950454d253246686f6b3768746346354234727072346a36685857444b384867656a4b774e4f5058734949364634564a556c5968633464494b6c6534453663552532426148614a69466c33544562464756774475777761756f58327957736c6f66585045544b734d25324252636d4e78527a5a593070566748634f7936527a385125324250703250665632783238723669636a3356733377415551764234534a497056584e62446c5439735a756c4b4b474b30697a4f61386e72623146784f4233384b6661635779436439483238546c253242505370343356346a64473472546e684d474b71757836396e7a65655650354e4d727a593963686c5a477569436532584a6250416d4b587865473053737679534a6648706777634f535655787176794366446a6f307643546c6a6f6c5965543042357566597868362532424e4d796f4e4d6d33574143356758415537345a676b6353313425324648345263673348504a796b5968456d4c6e51253246334f7155585177754b6a724e7a6247253242456b4d454a313679767a334a487a4f5951366657626b3647726847516763747a4c6c465743586825324235396162786e436467574d4b467a46466b48437442756a4d306971596332377438387775496c4578356572746830724142746d44397a6e784b69346d66766e737244727367513735434737346563253246537033795654374134354d6a763067703652253246646f6e7556674857356a456825324243343632752532464e6d373337253246527577704f6e426838725959574a56365151616d356c71322532426274367869346b3750253246586b7a6d58356c494b506f67647358384a684a686279517171693870356b6650426b583649637654586f58347035435a46643759646972464b786b6630744b6544314857664143306679557444675235565771796f4d4b6c79615a5649517a374c666a435a6775386250427170417165757573306858505a472532466d75684f387448517868622532466c313837496a363657775a577862364652574d4543666e566a302532466c52315950397742565832374c727a547070394879306b307a483671673947646c754f51674f4f454e6f56554d4453583959704a62336b7a5756462532424d494c72593556665247765751724a253242595a365847657371384277515178694e556c78504e42516b7458454159253242627039494a4545435a64474b34764f7542444d7358716c5a493769515046574d4572325a686c6b486f68795450467971355a6c5150786b747945695156615a4c5352773277644b3361364e38526c52715825324236726668514353556c5142696648374b564770636164764b566c69442532425a6b4b69654467594355253246253242674c4d5a67704732314c6e36697173474a57697550545330587251634f673469504d46757265343755497a317a3033423534306f302532463478354b78575138646b554c42524c643178556c555a586f672532464f526b536e61724442556b38565070763825324655716b316f774658786d4e4b55794b674c6231523552716b306f49636c30754a5850547139524d52704d546b6370383374667730636e666d33473878785144425255473878314d6338524e584e726b6c4a355934766b756c6a49667145374832393846696b71306c725548736f533862714b73724551626c5a324174393335676b7677526f414a6b4a7a77592532424e464959253242686a754244696f6d4e6e34656c564c74756433656b39525262526f593936616c62565330456a56655a6c53253242766d716d3559315446527a25324668346576574a6b574b5868477358585443534f624c3630494f62746e6c4e49564d70716e336125324638636173594277253242612532466776587351624a57764e6f37475658793843635038304c79656d4d5078766265654d517a6c6c6f534d4746764a36794a34523369735479587a316a6377394825324250484d616a694364657136514a58354d4a424632563163755a444257436451623169317a4c4375687642717738314d694d545364426d386255655255423058444d776c4a6d70674f7a48707347484b79666763563239756936706e734c4c6f3750543556586e4d6f51577355536c7244444a5663573234443554566b4e65377025324266304c5a34496d7671556b5239616b7774657925324231316f51594558316e46394b704b58336e4279703735755731626152425970347a4b553973784b46583166394d53774f31546c636b38714d6f5954533835253246564959767252416543573957374b4f4263516e6946474e4c4a73764266735652507a3664326d4d6179374168356331794e58484e4e4f755447725375364c4b416173536943564c6b374779457457327047636773706a7a544e5a53742532427a6a5243594e455a746c4c674a7a346a6e70546859306a6e5a6234253242305942583256443054734530727359784d4e51384a4771436b4858576d6a35687032654d42645a495368504c56566b6252354b6c677035537a436b47524e4b4f5a4276584f304c47486675584e34504a43594e556544504f527665517a7642644e7173326a754b6e724125324264322532423879562532464a2532426c6a476a3551253242474b4e4c51667755576f356f5675767044767853486f792532467369527a376b6273473130253242516b7825324630615470736373253242356c7168305271253246566837484e4f50624939796f6e4556515257657850766348614b306866777664383457365131694e7835315a4d39597a7543436254656e5244586c744e474c473653417655617a5653392532425a38785268354c32584c253242655968684c655a5573515337304b48624e693276574571486359717a664c686859376f395a774d526f6b69754747714a33663752553441304c4a7a39676c4d52707937535977554b67346259497a5a4b79764d50526764324f616b4941614575386c526a496b436366616270346f35446b4539666d646b473839557a73754d37764e316b6a424851636157475178535a6d4e66475669797578706e7a644a38457337586c447a38496e6a74574a72673735495133346b7233656f506561796366726f484b714278526748537943627161334144253242555a4d716b3761476855574c253242393556624f4e6c48324f4d6a4b426a6a6c626a39684f46534b546c6a6b4d4b41495664694456642532425a7379787339364646655a674d785771356e6866484b4151517379527663744c3568475351513349716e794545724f35706e25324275676f51744676712532466872614f37315959474573596446645163484179617a4578634c6e3865376f63493548454e6f397351447732576d4f674a567774576258437772504d64553042624d303043336d52776a5447346a6555315659717a6f616f50566558366673584c7655382532464425324230436f71756f704d326f624a6e3037724d63394d484a6e3950516e73714143594c2532426243434d47535348435a757133793149357078474542305a38396c4466574568725549754e6f544b74704f4d346e6b537a444b506e253242435a426f565930745a764263556161446c4a5a784b71754c316a544e695866364c33665044745a756d616c774770505968716c58565363754556692532467343736d6b6559744b3436574f73385a446232724f4c487425324632346d434f766e68426a56454b6b4e594f6b656d65393732716e3674375a64364256654c507438686f7671747739544a494944527837507a68494f7070566e7a6f50323858347975537a31253242686a30754e4431457633424971354c4d396436334b75586766314d4d6d3262703542363646784c5141466c4b3354624f4663674e372532427376576f5a66564358443343616f586e47433642627a6d3543697633575944644a48464d74306867364f634a413977356e33466c7043387438534e737565714d664578344458434f4f4f70435577253246762532426c6c384350464d55345147596e5152586943676b2532466571365952323363253242773974366635776a43653567484354535959496e51253242347668446d25324270577a6a476e4d3158323425324631446c465675786a39596462443253474647797958317530415155714344694c253246624167413969665946624c73313666713667776a37626e514b32583075355545415a706a417a5a6237474e36366362327a4479496f4442616875253242374f76334c48547625324238526b6459356a315543306f583468566772354665727a7a7550777a417833676c394252484f7948386b31253242335537644275554150666f59645574796970516368344b5537477671364e494a6e636e735a394c4d7445484c67646c5a4d454f427a7733614f6a3166444b645a6a2532466b7842334b49535350253242494e5334674d30517469574241304f394b5842487458316174343647786b6d4a79696f69687650586b564c253242494962637934456e304755536f6e33534e4a384b676a623325324273396e68393548544377633449775566646a79694c6e5357456d637170526e344d3052716750373965367245415061586174333458547a666d6a335a647137735965487a7665776b34516d7a6e64386c50336d703866354e79556c5952426f644457776e5a436e453659597a68634b6442414d543869446b586d734e304779454c63686963644675475a7a3961662532423949253246376656545a6a424b565956317376304867694c3957434e306a44506d454f514c4d79484d536b5669534e427934327650655570532532464435656571566a5925324243546425324235694c4859703049545425324242734d3733516146714e36775538356234354c664d7176684e78634b78633863586c6c5159454b5652454f4b7763546d4b664b6f4834697463786561396a797076624972644e4947466f59474b774e5069307a5062435a4b6a3479597052777978554f59317a546b7a5570476b55424754475a7a50414c48684e696e682532424d6249684e5845386b25324643546e4875534d362532466f69463950424b444a394558424b4e6d6d724b71654b7662784747327636494978537a733368747a43396f543056786d446c486f744375586232712532466a4b506b7574534e335366536a6f55386957687a496f6d565677736759614c6c37394e4d63636938624f546953786f4674626e634c6c6b655743514967324d7070553553434b614b62565a783025324252614e48784c4d685576536b35594b7076666451526a536e774b5645593871544a7852795875427349394625324247376174774c66427044766c385370746f464e454151715872453850686c49754765692532424d614533577444546374776e72386a736d5344526d45677577386856576b514337656833684b3937685575366c57656c74376f434852706559795377337446796737253242376478704176715a51666f776c7a54574b327836706261666344764b366878686d675872415763423472433659417025324269742532466b4e74414a517a496c467357594b59467544456956524765564c646c4c6a4f45357967356e6156744c4c304e507078744d4c54754d3336313364397432684c68636a4f76484a587a4a387756547851423455643230704b4c415a536558312532426f6670685139316f736c4e47367a726e796553555264253242564b7a626c6b5756357672353567355130453562734b4f484465467239365537676f7231544e594d513741253242596a75475353663654253246465661626d324439336b50684137396570795337336f4957597870714a30715776704d704c6c6e58432532466a77656e47617a775569614a345657765569427473734e4b42573035574442426c344776587a6a37554a64556b766925324263384e514f7773516a496d5576435733706341564a7847566e534f423841433565676b634b38647376766a496874484c696d49676f415a505a445543485239307a6e51676433516d43466f4b3567556c627a32414966694a7676553177253246696639695230716b4a78517366727a484f65726825324659253242464d52795a67576d524e6758353946425071566a4e5250386470494276385737506671626e6c796b42253246535225324225324270516178566279785352656c6b756f626872714270753939633959526258686a2532426c784c382532426774693365304b43516f68554330507a694358646c253242394671686350684437253242567a3475676771756f4969743770336558597050494d535a4545757758335832554c685171367749657967694c7a44593125324253644132614e6d6242596a2532426173253246754766665438452532462532467748505a67715256327442327058305361424153317456534767675a5630583367794c356e6b253242343353526f714f34566434734669436f354770396b6a5068574d7848784b5a754a78353877664f6939414f3674676a38583176564f4f44786a664c4549335a3970496672565451444f565747484e505755445261624850522532466f253242624d47765377437547447a7576774b77577569307759445732546337253242766371356f312532464c46313149496a71344138446d6e6159587832434431593662573736565168392532464d534d754e42576d4551253246416154324b394a3478454369593136337a39535031786468664e316f4e6f476a37564c7050564772334e4d416f76344d364f364c613742624f3161585668795530692532423137376578354e352532424d6939726a746f486b67447036523752766d485832684b4c746f4d71342532424a4e703734326b6f77456f4655697337392532427834432532426a6e79696339456f2532464738673242706f54625254792532425a694537304648644a253246714872485175354c7750253246634f55397334544e3372335769775338474b45466d734b7a4c3745667a712532467747443850616450786845415241737a4a7853654b5271524f25324674435453453655754566573565596876596c3541796b6735304b6e45304f494f356f504c2532425348757372654254636e7535746539486c7a3859456e79483150634d253242654449426137443261473464253246336d48713633585425324225324265253242317925324653626b523268664a433525324255746379385a493473447241363525324266764b6270726739317a464e5a6a506e25324669356f7034392532427576476e7a61695757743463706b345a64625563317268714142253242733168753662357070684b3325324645776a685050334659384e5048656449467938756266656c414e4b42536b5674384749766950647a6176634f56425a77424c6a516c54306c6a6d6e68776230356a716f7747356544575461724b4b7a6e796730376a4d796525324637493238786a79614f6e674e2532427a4470396b66325325324670315a253242704933486d317825324255654665343972663145562532424a504d6b6239323831253242595261797625324638504d65695376253246444a4b637a427832613639624d70304a567157625a35313141457478537877492532426d35653342497569396a38756d557650784556346259575654437966704e302532466f46566f3777472532467834486f53354b77425549424e333078253242634574764e71646359796b6a414325324230415973584b675447435574796a253246624178683146516f6f33526e6d45656c3331594771356d67616b3030424f666b54476966746c5730374276545a6559745a41716d33754f573262534335646b597369495a455877383234376c435259553053724c4a704a46682532424f306a6e46343673456f7869316f437259716f57545a5435626a4d4958354d46306b574a49624b41347a544a4475517378626558253242596f64495669394f31766171326c64435051676674467850627238617263765146652532464130675359704352634f484b4447536434703948303875317236383862253246395825324634436350535a48726530514e5673756f737575546b59716465676670414d715045706f7844656e744d25324645476c7a36756f50486575315a3764655266654d4d387a7a676e644b574272347a4667366b6e464e42484f7874324653764b56684f456a5233456d73733043704c7a645a4238443853366f594874377977374643785a466f4c73786f674a544a5a70315777394e50352532466b32713064483547784d616e4d78384b436e56316b434172766b4a654762666f70253242524a306b68777a6a676d70576677695831416b4a4b25324234554c693825324653776a73377146616266325a6d795a6645495a43386e585076764e59395668544c6b7777716d505932574b544861454e7970684e6c526a68436b767535593369586a7349566d59504f4c61736f4d6353726b4a46465359446e78596d566c68735655736f594b35725530394a6465484c4e6470396c664350707854686771474c44332532423176304465774a5679546b2532425949757a6b55416a675a55347448686425324275776250415370367764594d6755595076253246253242623034716b5a6539304e4749703158694d45796c65314946664643347839356768616d4c6e6c4b4d2532466a7a4156434936326c4650472532425354524336655165326b4d6435334f517a4b53546f69484a6d39615a6e497138614c564c53704225324656596e636656426d66366f4c414f7931326e75434768655858486c78756d676635362532425744727a714e2532426b446e746c775130396b3025324638717066717435786269614554727278794e3547327a36364b5148426f4d6c31524e74495478324346632532424152716b6c5a7062644670557754253246344a716b4a5256617075633056374a366a53526751253246653464616c65325833426c636725324265425266594330315764774877637659716c70704d36324166316156624530556c4d67675961753070336878576b48685631737825324272566a714a36464a34644551304d6c7241337879373157757a68556d6c4c485270504d57445569465669253246526a7943253242747230617a6559696649356d45524e6b624e784e504f6a4c61683153784b77314d5525324658434e694d4f496a6741376b77683150524f57596f492532423148475833253242565751697938685452253246544f36594b393375494b347059465056335061426e253242422532464d6b564750547a4151477a544e424f43445a3349646a4469313474744b6a2532425338304325324273425066724a667258552532424b6b6b79787a6e50386e3446625875396b5838594e566b67706654686b364d5865684d773365536837714a6253496c614543794174336d756d25324263715a426a6f4864475543545125324250253246513271704c3459486b4b6471644b304c634571733579697a493669463744686b7569716f414b546632633658456950617570326d726f6b6a4a73317645396a7a43594738736f78366a68253242376b7a726e615459503379566e77253242764b64494b556c5467724172374d576b7135446d676e494a62476f6a34366d4d754b65716a7650424f324a7041384a6b6a36446c786f617341613255634648745756336f516b445562415253716970394c6a59356964464542644c676b4c773148336c4f66765175576f346530497a476c6f6754675065334d6c707a4e6245324b4e7461304c596e4a355a6d437437765164746a7878554374506f5142484a5430706f34734d584e4e74426b4d67565962304474473555335246697856335854704c53636363567a476b683779734c61713772415578676b73387a7149644a626477666a665751694b4b6c717855253242753854454c787979644376343450304653726c705a455a68416151636534676a51253246414d37426c4f7751386731754b62776765345870594b445a704b793734305733454662764b59253246253242726d364754346d443159487253737450644f774c5059796e764d5945414a474b473358444768493873386a52584b4d4651776132674c4c397a7956334f6858493478344d43647143635473253246636e516e614d6a2532426678386d47762532427042674939515136334d6b4871334c4737636c627637687a25324635632532465a74346f637a4555613869647833706d724a6d65747738776e66536d2532426f4a4241796236364a7571596b253246414564467a306846484e653349364c35336237383247596a7871474f5444346d68666a32464a3633357439457870564637774b446f416739564a4d3776553439565146374c6c424f6650696a62724a51584b54784a6b7925324242754c796246484856717036736869684e48672532423364525043303056577673354e446e734f3479745431466c4948343953795a2532467158683144425430487039726825324236554a6a7773556648666c4a682532463762476b33734e737532324e7a386872453761394b65303874734c66767a6c52513377533131674e545173734868626166394a782532465753706d42527238575a436c68475463427278414677464a756941253242586c78704778454a67774b6e4d73586f364d676637364b6a584d6d39436661554c4a66736c73574863733762776261506d3536744f69367a6d43725825324277504e487358614459716b797474714e694f6c7235663769463067445048566e693837346d377a477a3245253242526b395965354825324643707270363361324f253242734e4f32636571395a70566478656849667a41596c73386f6c64655a7a6b6f7475716c5164334f553954716354615269596e615a78306725324672796f544e49585a6354594f5a436f726c61744e5334774b7130344b63384543306449574425324239777177597a6d796f56496c786d66504e4a696931436a6d4c3473622532465274516d746b3234764355316f6d763179697432334773726846507453727a5072756a45533463764870796370413250647975784f716c46514a7a67646d734678584d6a784e702532464d4175645736704a455561645a367336712532462532466454755570474b574b495745734b634350674b6d766d79716a6e736657646e63384c794b7378446478446a476436704d544d2532424f4a50363043744c54764a6d4a507a6a635342744a576d36794c30677078745a62336d6d4f3759733467647a556b554a79253246794241415075716f4d3168477139346c7174414d62477547623652477644716b6330357a43505776434f3565476173314469764662686235564f684e416f7a3753682532464d6348696a6246617549494a4644504b3335664753743473356b714c3257632532424a61756c794c634436754e586862253242726c7149487056514b33536c3679347141554b326847574a736d716a30354a696a5a4555624241797735414355364579576131685064676b4a5a4455455451687334505a584a334878374579724c695a4b4f6d3169797048697056634b53303644504d386c567669325065454c536a646e50645579596b6b434b6a6d31454f7054705161315a5a5a50326c5159564735253242494e55634a737261396f6f796d73626d4d5452726a514c516d75494667344e683025324269365a713265314c3855464b4a614a357779583261624f6a69374154616b6b2532465162756b745537323536415439696c715579414834664a305963376461424d37517344787a253242346a68686f6778504b63575370593441326742396458625252544362715a7968626843785378314876486e3230253242584e334e546b4a555639486d6348356125324649303671463436645737734f79414977704a3641686f74595a6d452532464a3665506825324678524b4a4c74765933626f596b355a59575561704367774b71674d763165436663646b615264514558627445625359344e434f444c6a4b71766a4156385a476e4e7a4f4d79325a4d3971416f574b7833734544734c484a45746b6d394c5a6425324276546b69446142526d5166726b35624d6b51376e3647416d675731253242466d66395766526c6d7a686c4753547a4d444a3372537a3865447a6c4a776a564474585a376d37253242617873666354316535556e34494d6e6c68755367626251777138553059635263472532424e677a556a68364f71447a374f303557413544486353466e71494f34477242306d2532424f5154746b574d33556e515767707678395937566d563865724131782532423748365767736d5467384149364f457643314a484b4663784c48594433454963693070566a6f483370344264514e25324271654833736854647758536e394a6641754a474a306d4a764e73374e3372784355305156334f71253242466a67736d613563384773675477387538487a37707634734e6a59336f79796447554f4c4f716e4b67496d7438344c62433578727565634357435772613232374d596d767a396e736d5368574433253246584243734450647950533345554f4463395351706666657931546648674e4c483741415032466b43426c625957304f6d4c46674a48726c395873787a4b79746968397869324d33597754364e6a4343457a5476337141253242304a31334648696e4e73647854524d3668723639656f6c3765424b7669554236425a686e42794e56393779737173424c356e4956367068414f546e51746e4278774a356a4557313077586b6738314572316d33684c425533615250776773596147646b484979514a72723544364e422532424833374f73436c33384665675025324254707052774348424b303735437236635a6743794c484b7530723779517561356d3663385a3952464b475a4d58506f4130796d34657864585a6c706362776d7252455153676d6835366645495425324625324653416d727852726a764f6858614279463566327153566b6b6556717525324652766d7168397567344c754f526a6b436e59457672617749364373595a4e6d62646648446b394a59572532426241776244526c64253242736f6c6353486f4b4e744a694a424252737936646c6a476631514c4e7a47374a3575494f72716f70537a6c364c7531697537414248476a31535178384561453454366a48664c32366230424d5173483541696e4f79543644416763594865384d57376a577734625733315a515453567a4a3156484b4f4a654438563965374f41587751774c62797761377445576259764d253242626e6f3959533648776e6d486c4d547645647248793557516a5a556f737775533025324675454830344d374158744f536b6f3667334f3174302532426c736a467367426a6e2532426a4e72354a396b4b61424c7264646341363668646a3663644272654f4e67564f392532426d25324248353455447a776d6c79534f6151655a72384b454a454864556268395539485671646c25324254543171516873456a4c537a794e25324231783249585642634e495654543043784a4c656e39525a654f7476776e6a4d385533496b796c564445564548304452616c6b6e474a6125324677344271456656676671756d72766d373142694b4c44464d49416d44764157503131707231734b586f787070573733494c51686b347730766b6d6f4535425454776f6e6449417976694a756a354d4943783561476b344e6b5470683771566e55766e253246534f4e6a75387254504e34594e7446497671253246425a5a44484a4e43574576253242646b556e3573754973486a7343445067534a554d6d5239516c4278366a6f5375314e4e4755577041344e6e4278614f45376d4f3359253242746264667a7957457645333445554f6c305873314e4225324663776865366d47664f4a596a69335141644e394f733766366b5a795041757535735072354668644b4563365a696b6b62617a2532466b4b587430657262524e4a6e516a67496e4750776b4b766a782532464d47764172436c3256317350694e6f37766a2532424831433578536756775149683368452532425a4163394d596d66415174634a4225324249464736253246346e7857484a5a704b6f395331253242354c332532425943745069377a703361365570462532467638373049456f676c6e7a4e36652532463544515a4d615767524b61654a47666d7a367150614c4b525837797452417037782532424f4f7061554652515a62794467554833484e644f4d4433674b78546554684c66794d3333486d3254534d446c4c36417372765772516752784b653551665164366a306859755a584f316334445158794279776847356a335041447556472532464b474154785041634d7079484b78526a6c4e71456a776b484e50427643336925324650346164646130464c6542253242667a7142456f616c67436562492532427030696c6758253242325172513142493462613277366432695677595625324247444a78684939316a354425324270445130413674577a74596179325974586737706a52437525324637526d5a466e3177466d49744d4162646d59667a726f7354347676654a534c2532427477716d453659354f5134795862253242696e363641512532425344304347742532426a474e6b705a464244534577646c756d48733948477849525a65615a5a746a584a456d676556516d51733872645a4139584338324e4f52586551634c414d597a56554c6368364546594476383741506825324661357735566a50583974727957306c3450752532424473616c5233436851355a39556b4d334f48584b71464b6233376453634e4f77346e58777661784763643651786b65376c397247646678364e446844596832565a7978576d5164703665437279537938474950514a7a4f30594c6c4c31445557757a34454c634e57576677526b324c556a534e4f253242546f2532466f6470326b58686654474b516d38707956696870253242785337516b746336423032577a664b6b45493641467a7a7a37414a3679725673754170475839356968716b355142736e5237633754313663716a583469655150554f4d676a4f324c66424a5a794949664a61534c3938253242777a62454c6766757675504b66376b464a4a397455626165656d464b593133624f6d3361313073556f6c33566c35587a4c714932676b6d3536516379667a36725759355554696f5a6d326e7a436b537569317a334e432532426b59515832524965676d5a717a4625324258455253526861684b58614c354776645938436e4967385534543774377236724a4e4a57452532423149417251547846447248483641486d474a4a67526853424f2532462532423364634637434b456137686e5473337137454c6a79513253776f4f7a49523156756a6c72686f6b4b44314e78354e4325324279515a7368306771467665555a447844467a4e4e3441554e623333347a6c71453153336f2532427870745954355a6a6c6b50374469633338464c6577675645344c46707048714c634c42537672542532464d4b6d4d47386b7135333425324638304833614c416a55586856504632546c305034676639667445447375744c6f357053704b67417156454b6c7778344366774f43414b46743571364338365451755658354e686e4435705531387275306175306a253242316e755575376d675425324230504a506e4b656a5745705843632532467274734a504550674f68436872597630614b4434705875636c436a6e4a47776a6b675264764a253242717567774458596d6434486435556164484e4b706a33536c594a76616134716c72443279474e54314d73792532423639566e4c714a324f4c73464a72786d684d65666d534525324648384f7752524f327870375a324956703471563830513941727355794a743158525a734f476b353874356e5a754962554679734a4d4c782532427133614d4c7761416d4344753735714b696c44546f4a7825324636336747785453502532463779675357797777595579474a6f354170536e494a5a6566453049727668706e7454714f2532427965423376253242415166386e6f4866384832446538663879574454356677495725324662386633557a253246583446757072382532464a2532464825324656374e51354c253246627a306e3838664e4c58367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a3646367625324278617225324636597456253246324c5676316a314c316239693158253246597457253246575055765676324c566639693162395939533957253246597456253246324c562532462532465446716e25324278366c25324273253242686572253246735771253246784d517466682532464e3677363958253246346e253246416d25324635762532464539347725324648384679763250312532467a433350253246586c524b48253246747642334a45767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a44334c387a394333502532467774792532464d5063767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a443350333168376c2532425925324278666d2532466f57356632487558356a37462532426225324268626c253246596535666d5073583576364675583968376c2532425925324278666d2532466f57356632487558356a37462532426225324268626e2532463651747a253246384c63767a44334c387a394333502532467774792532464d5063767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a44334c387a394333502532463078666d2532466b253242437565506f667a65594f25324633253246786a2532464a44755025324673326a31253246364e6764667825324644465a6e7a46754c49436c65386a302532422532467836582532466f253246513637253242773676646458447341494e6c253246414a68653576767a47734162736d4d25324256253246656138766d7678383225324644503650676578486e76336d502532467750414e52646c575525324673765250554371592532424675594f6f4c25324276564a683244253246514b754b253246544b7651253246366468366b346e2532463025324644314f39675a3858467638445538253242624e4d2532466c7831755a4f33613546645877616b5244304a3065614b674b5769553178734e444b646a6e703564253246745a6849453870545031486c304778746156436954374876356e573464434c66705453583469253246703137515839366a486b503230703448614166304f784e36586935497641344450343047583630393879572532463736646466384539564e4d2532426765753957795a517835706548504a5772586468754e726a614a695534685169424a3935386943636f784f7657424558536d6a38496e363263526d72656a59544e4e663452484d4e78634c423048754237694f654f64557a523662414a5878504a4f65796d25324658764d306568463073724734414f395a354d52506c346b78345131625154584b473046335a642532424525324249357437346738786261596b6e253246656d6858426a72397837346f3572775365376d74514246706a67774b31326754636a564b7644563351315152396a4b7a323968527a3575305677423838364d55366575376a6d74576c57375177576d5939564e78253246723730696a6d57707077775139374b74387758772532424b797a3725324673623759304d4c31505853612532467a6f4d717256743435416266613034784a79486c4c5a696f3934536e4f4d366c7634346a4444794d675676563158646b486c534d466955436f79527353573933422532465338537044774e5850496437704637544869495a37426b59766f50615a30553775496c7a77414c55514c4f366c485a65354a597561554539547650306b7842726458686862385436514242394462456f546a6a6b33624225324247764230675542575334785a68614e66686a7238307150547557554e39692532425855704f7959703050584f43645543676873645771396d61554d4e51556e716b30425243784e696f7525324639383563575553253246675448716e41696e4a4865646c504e584270336c61384425324245444f344c366d6961584437464250736a4436336f3355534d766e56586271564232676b5837577278786d6d4d554d6470785772336d446f73545079382532464e5031323943356657356a4743524c52393925324641645a512532462532463675413634425350656b576f4346557950384758552532426d72656a3835306b4355423350436f4a4b334159706b554c6d364c627a7a5968793546346f3944446371483164253246576d65736463306e68383373384872545368526532386e5736326a58744556347765315564426951354e4c444a444130414a6742253242703078386563534334545352655962704b516b70504665436d795725324272576258794176736f76422532427a574549636e3450347941665547776c49794a6c55514d67304e716a52347a794a476542737a55657554354548774d7153503864694169735634544c69666c545957386b566c377a6d445838416553503448704a743653412532464b6e6461507951784755336942734f61456b47776f6756317766576c54632532426d54765241304d4d4432397a3336594154736a41514a34647631586b716f427059443731456b71774e76755043526541537931786462374f5772527670592532464e48757a4447784559636351592532467561494a5859704f44313538764c396d306a786c504d666230795378343967504649253242685045335a5772564e46734248614451465277706b52616675587150744e3153416747634b6c346654723375584e6e4679687356316569497147654b4e4b6b764a53587934576661695242707425324277665a7531646d54536c6c426f67433758495158426b614b7a627663695938417735385563576a6f775439327148417948656a35726a66636125324267724d51484e683631374b766f4a432532424f49517a5a3361397474714f2532424d5a6e764a2532466325324225324259706c4c634c445a62674f316b3178374c6b45253242776c325244666b4a765472717a6d335538587047444d45506b324358487735467659754142325859424f64685051426f7936416a57547650364a645632787366335a34704d754345746e7773554d336774646b526279664d314a65486a5a6156594f515949744e6c4c31337a253246436e7842364152726f7932377368505666523151614e663074586966554b626e47344a6c314f69646f323650526b73426b347472773946557a43357a396641564f714537337333316d7a46777049356e713935593355744e7859476177656c4d453666764842253246476c633651716f534a7348504936776e46635445353057464f7a4e754f7578724665253242552532425750516477626a656f6d377976636e32586c76394e7a3855306c41666a315749692532422532463868447363475158636449673279515866543137377a484675696138253246425a744f696f57496978354b7557424b625564356573376b447564657a2532465a68464d684a5a78676d716b477858576955253246637977684d652532465479594566253242636264636533477273383852684c5025324644667970316a4356547168347a25324636444b6f4e32614c4c42746e31424e6e586575524b4e436d2532464136556d594e764a7a6f3643537a6648494f354e466c75534f723351344b546d424832756a79424a787273363174517575794861716a734c7a68475a6b6e574958753258676b315a526b7554724136356a2532466c4b6b51646a697453366f34784825324633564539716469317336306433754c6c31474e34576f735164616d476f3053626559253246253246696e424c6a70516325324677417379504638694b72305164376330695978325659614a467a4c41546638674e7543574d5333636e2532464d503372557a61714167794b4a6e32484d7334746e7873676c656351253246704e72472532464861646a66575461657079646362363742644b463830562532424c49653337484e356674774c6e78576e72766342646425324632574f3738726b7158253246326a58696b6c6479765a314a685363316e2532426874313872333432586f47624f6c567a44506d6c3467685a4c655a6f347a746a444654717753374335777536524e4e694b7044796456564a704546375538644d656d39526e4632734f364c7170677a6347717377787768526e43786c4d5a664b67617748784957673959357a6c6e253242345352432532423242446c31793856647075333571553150435742335062683352513672572532466779664b77426531445a3939464b34694338393345355a644264683443465568716f356e654d664c386a7736315471327a6a6162504b4a474c55462532424525324256253242547a4776536d2532425541397a685a51695a6f304e6e616558664f6635325536694f4e25324632417868734e4a377664615238546c646f69345062484d4679787250554447656a253242565432516c464475376d38723663756b2532464a49324d71253242484355684448253242614c304844364d5231383671636e32436e2532425268703269503141334d253246504852744f3974654a6a314a52453477334f6e7a72694d784635666e786d55684d71713271376f3952344e58754c6555574737654b646c594a76416d45547a3053534e30253242694478306b556234413949414a6a586b744e576379513736486f65494b565878253246696342693767486e6a765578657a4a66494c55465762307644694a7559656475374a447868707239475a614a735a763255753472377834457539714d696f4d67455079786b3265377a6c624b4f556f6c56347125324676435769306f78636b557142563764764a6f7051706567634c307669387064567146364537477959554e5a747234414a4a67336969513037715374334174474454396c524e54356b5052616731784b717625324252547a5a38486f30346b76544348667a466c346a505862664d6c76705330726b5539324a6b3151577a6a486c4e54695a5338534a46384725324625324253783859373869637648504a4147695165675732566f596b4f6f534f5632397563424b654a303665794f4e5678735677346d6f5836646e68474a454e677a6572345a446b455a4f355445754845746b35534133672532424537624746796330436b57365479785335394361305245452532425971786e4b7165435879584b507a67527970796c725a6a4c7079652532466265516d6a65365275374c3442456b746d3731323473654473726a7234316725324665736a515757253242506172464d6a33495a77384c745364534c4c4a663259315137466f346778575070394a4e6645797354783151387a34396338756f54472532426a3346646b537337354d784131514d7a5435496e32387951597548345347474c6f3657795a72523451544f4d734747706433726e4b417159665534314e74395056366158556e36595165646e3030463665706542417337727841384633253246524b4d637158354b5161716a7676332532463276754f5a636d68354c7176305659426235594143743537564f336776546346344f7546577a326159417948306f54496f6268675233664536336f6f344a724d764f656b51253246414b32694663577639534b47766f34663673376d78584750306271665172787425324655657937504539346f654f74634f6247366157532532465835594b5465624d32426d706d39727872776a745533636a6d7a667a37627a43574975314c253242666f746e6a696d253246524d73553359397855325868444c676d4b376750384c744f7474534f4f386858337a4f4f5555375279316e50577256253246775959384b6e434f5472305a54756d736c436d6246516836757972316f7963774d6234614e324a62345473432532427145506c5525324246555636564e253242596b424678737652685471726d626f7a39306470374b4d6d253242536757773838736846626d3769333141647556672532424d63746b74686e5a345a6c6c326645334b346d617061746b7a39526e6c576c356d37564c61466c704d4c253242646f614d756151624f654b593337473954577a4e364e253246566a7850546c754c416443586c376268337579486725324232627a7867253246563368756a506c346d526961253242703657713242253242434c5639306e695a696f4834624b344e4f4455306a4255253242614863384d71757a6d36744474346d4856383056304f25324634537a357837457a476a4f6532773066774a396369643371557175426470383968626335666d7557507a6b744b774c4a71663574456d4a306151384564677a496142534c47394f306b4639553838455a677a543143363932567164564f5a5a64525263303745725235795a5769326330553774397770766e4a6979564d6458253242736473646e4a732532463854644d46336544696a533044536531596269756a316d646e553134717865747369644e666e51627a46524b58454631486456784d596a713770595561764942694c47773251253242304d726e424551684973645a53356e253246546a7a385069794c6f756f51253242465643777242325277717577634a6b4c54567750596d535269253242624a76636f504c37685539784a73506d5a37505832574b7677776f6c564c334b345a6162462532424d683356646f4143455255674e77737366646c4e74553679527647523830516a3655544865506525324238716e52366f3447306f5555764f5863374c7248554d4c6f3249424f4d636f4f756831533252334e724474415856756c597659344c38717665303759377553357a2532463653634b38416c693853696744455925324633624d6d6f34454b6845746b4138334563736d736a76575056796c383550445246566b4a644255513456713671394d77586447324668776850316f755846446f3231507975755a50344b4a6a4a4a5764464a4e735142696f6e5864427a59646c54594d6a596a5a744b506276536e75347670786651634f477a75385a5a4339253242477a754c4b553664593733693351303879543570764d65744d71565337576d6f4b7745363836796e784c37766a47475446323569773355316874253242746837517732713571794b747a4339375877792532466d6d48414b725865704636446a3663583749526c357468642532427259476d3752316d346d726b6e2532424d7157443332455339714a63622532423438785a696b41576d596d33597938746d68523855774d4c5a6a5125324236586639576f546a695457647a6a694d71516b63694c5464504755546c51334739524c32373432334e66455554336d5a314d4651415a4f50746f6c4d78343155366843646d6961442532464f794a4d6d316d5352434355684c75666e566c427968415670464f644b6a4e4e37677171653335545650764575477559733935786a47702532424a4f6c43566e4a37515644614761615349596b7361655558445a74506737734b7331614237626e50455a5679556d433631376e545a77453753546b66567159513969345930695a4a504f664b62415264466557765239624d35346a6b7a3145555248344c39695558335a53305678664d535a63452532465a6a736479645149784f63456b5852585632644a4a4f6c455a79696d73754231477a423647306834704752426855573257374a7052457947776a71626c7569253242615277474a3435314969455335796b4c3279334377794c5734653252253242392532426a55733469686d4a6a4578356b4a35717979463531467a50574f46526d494547436f6f394e7a7047527448384e4171342532466b7469253242612532465154636839496136414f516d58757a6d317453703355564a6c467a6e574265744e33704d57766d48514c4a456971474d4a66577465677642365876434a3525324262656f42586a6e35786c797a5a4379315050694d7a536a75323257636b5377774c3261336a5a666b7866754857525759755a64437333436c32624f52466375323238584652794e716f58774456755a4e65585a42735557323639646570735451354a666a386c684164377925324630323767454e4351574a6171626b3637645567337925324674714238555a6955783531796a4944456e6d31594939506367506d587a4835554f54394c536857655775634a71624f59253246787a4774385a2532425a337a4c763348373674476f31346f6d4a4e754b385036453479383032313841325837444e463973714c556a6662774e373168614146477667484957697141556b433879796f6d714f4725324655626756346233314d4d747857423530356a616c59783878714678776c72377936487265663756304652533076377452433725324673467a487930564f6f56534e4e36767a773941545175434d7348723156306256334176564b676d3663444662765261384f4d2532424651534f374f6277794867614844636f4a6b734a6c544f6751357148344f454a6f5249756830467147745731797773536e6442345070703075587379644879654358334264316925324647747631545a774f644e6a6d4357564c49466c78663576333250657a755333446a61427a5a544e67344467706674637734714f725949346637515470724f4653526376656f334470354f6525324634445051646c4f4d4b566a4f5a7439433842466e7370425951635857345a58714d45315867516b4c4773477465556c436d72485a7479367a426454466a6f6768456157586c504661487670644b7a4a47687974615a34464a4b493173746a7a75483950367539546165566c63727a536549595251762532425968464a49396b503863525a76534433526839745356474d63775331767076357a626d6841784f6a55253242516b6533253242634939377a616269714a416a542532464a61363675524d4653797342513546364152496c376f465050486b5054324f3175253242456c4849747349486e2532464a48756a7a7a597a36494759333368314163334b4e496e38506c6f4f62393773756d71764c714474356a2532464642784b4a7575714b6b46414d72633553734f456d77456e4150533471557141316c49726d71312532424d4f4e4f767764367a3254664d584f572532464872564251475351363477665530625465383035704a69495470684c5a5333526730413957574e636e4f6f444b534b3231535a6a54753966427863316b4f5a304b48623132704850762532425a66515443336e4f3747747a344c775a6b3625324242424f355966327164712532425a4a3969466a423630374a596d616e4331745039645337324825324243635a6a7578613339743342444e744c344561505a574e724842396c493034787272387447567a564f5a53477039426f686a796d4242476c7478684a424e6d6e76347a6d4839667a36462532464452656f782532465364525269526253745a3525324272596e47753634435a5249535177794d642532424e51665271417869634b5764794830483557556453636337594968737a48326b434456425a565935414967504d5847374d36754e44597063726c45463173784f514a787545545057655a627925324236784a4c78766d3233317876593464456b2532426e4c253246627249456870574e714c6a37757278506c6a654b67695845466a55726f71746a4e677936586275596f496b72744676477a314c575a43356c516d355966795352504c576c31655039726e58797a3241493347537a6a504277253242636f596e796647594c41414a467a506d773072696e66546b316551505a396c516a4367673859474b52444a63656e39562532466f69517a70655a25324670794c543278796d79494965464f314b5a6a694651534741466c6d792532426e36253246574678504a48586c53556a6754786642726944366176487a4a444175647368637832537a726e30766333344b4e2532466d6748536b6356614759426c72434939364f777871306938787a4f486d44677742735148765072763966333774356c5961624a79344f44796e444f4b536f7a6b6f4374574a6e38525978453734506a53767646385964544f6f7566783369545655685941682532425a25324642465a75646951617159556137464f79746769347743253246455235627544684f526d50487436687872634953367a76684852536a4b53794869675453397758333643344c514a32724277316e32645045634e25324243454a494143637141615a394754657425324661644e6c35333251513639745325324234436a25324644536b524f624c584e4f3867756c25324271427a4a7342544f38253246554c474956667a6c4a3972416e324f75474b4b34666f323265764333374f73516d345563583053486d733963534d6b6f253242612532466644583172674e4b684136494456422532423064584c4a52794d58696932577941306f67472532465138734b414f554969315972486b71434f5747716b567a5531764a33536f355a65434a45653376626332397167716d4e594b4841623841307a6f424342374453637463713341314d475a586c41676c794b6e6449657878734436685577553770506d737448534c5968424362467676487925324265396b58253242303137756f2532464473324d594668736b784c4838356d577a747844424a697833766d52695a64477150424536544a4225324237466c594253353264346a6f3259743446253246624543556f613858374572475a526e36455558476b5742562532464239746a58796144476c5432614d4a77463146664f253242797564594a6759694676514a2532463346374c674f2532423735486d314b64506b346a68344a6e6651525025324274596c43636c79786237345134644e63366f386d7a72706c43366b697759253242536d596c51516d683050525939376b31526a6b315339253242516232336b796e536e3277433838577a364c67506c4854307a6125324653525756304c56624c733649325545716f797a4d56476371366d7158694e25324663536869466442342532466859506453727173776452376552384d595356416a644d777033446f444b7438634e5770786a3371444c757675746d394c684c3755716d65736853515933743646637538586d253246436c6b5a686e675132427439306f697469707876424e466268312532426a534742564a414943535a68756e78253246756a717a51386432514364544f6b675a4c634832363075624a4341517852783155627237526742466945716c733642354d783545794e4d6939684c6f7a504179374b554e5036705a5a356c654f784b3136543431444c2532466d47646350376830516169765a6a4f424845794770566249543053385432355159793725324231546b4e374b69644e65414f57323871736b66786d597825324270446678714f6731454d64646e58775648414c484d25324625324645764b7258253246654c4251676a6938427431522532463166377a494767486e667539445773644a3074576568504271633825324625324251704539563171394e3754786751522532464841305857674f466b6b45357750386d456759304d465736467458764c4c6f732532464a7a663154666270765677253242626730515745624341316f4841253242364a75575639305649666b576d646c5a4b56336134567352703244476f414630497543704e4763644a76556d525053595a4d466850567153686c57492532463738536c6e4242785a4b6a6a727879705a4b7a37524d48744b4c75553041694b473934516364524872534a524436644d4c76504748775138735877253246586d7a4c54413066534b623041716854623948466675347364477a45567942766b794f587532742532465378334e76576c32755778375131664c4f6b306c4c79497a302532466e3738785574253242642532427a367a66315a686b53754e7a6b734e2532467679704a4164734c356b4c386f7a4b426339715857696131566e6139664d74534267417a4f50584b70736d316e543569485771644c25324631456c4554645a353941616138754447714b4c5a664537446f794a42356f6b553954514a25324232253242617131594f64744b4b4f504a4c7056365976344a61556e4b5a345038394c5154506158305734253242717765747874375131685753566e46437172686e253242384e314e4873566371577a3936496c326c694134567769486e6f76366539557931344c5673592532464c7142484273393138394f6d563161516233655958537867456b654e31617451763272386c3665657938564a6454504769365048506a34495757253246436e4d34537a495641366c6837353761534d776b5132532532467a586b7a6253446c4964586f78765438686e34253242415766723855644163334a796e6e47685941544439316e587546364e38586e796c53655425324665776f55535934714f30253246783554673530773148306e676b3856676e76384c524748567a253242794b5966324656596f6237665473486f467a55487a574b51564a31566f424a463638714b4c5a69253242574d7a6c3246666d756d545a756f50314b715643746250574f31396d33766e7430746674387148776d6a663172517a3754725147594456697061747a795a44645634253246706b4c485966506d5137435659575550664a74253246475a4b663445685052354e57523870644825324656253246696749387a38514b6e664a5a253242253242755277253246675a3135787031663373324d566b68253246474d793459584b7369553859704a556c6e534834627a36714e765435687a31694254497035306c6d506c4c58397570486658253246504349746e383330253246377337667349366e48745439507956586f305134424f313666527750525225324638395343436f373525324269624d6876635925324668587a30692532467371593258653753513744796177447925324241444c6d4c6c4d50704c6754624437504a5877436150526e34586f34376925324262364532322532467a7857496c4d446f5a6e396f4d77797562347643436e78764c68685a6434786b7078253246354d4b73653338635430253242336c38616a65306125324675613668714758533659744e6f3975635468586551305348583145453052596d5373596c44624f4533693663494256385a453356752532423571684137794d344c364246366a566c54342532423054377268737849306b43475567706670786e487976724f375377517771762532467350787a545a6341495a6a6c49746d41506b4e72424636787625324652496c6a73482532464a5a6d34646442384b3157724b6c7531784847572532427962443144676239537933455330417834775765443673546e435076507775335155596f5349355777782532424136615a47364c6548487769592532423373555542456f6431557052796f71634a4d4d50594f514f665a576b4979733645674d3425324248635625324651425a466d64504563696336566f68774c4a446a4439424d386541343279734846696d4138663959776a42316e5858466c462532463943706844417a33483038686642796775666874705965766e6161735a3038694642496a76476777774853314c436444444f4552647263726e7a44624b39615453633858354f4766656b504b6a7547764a5675545a645368696939783525324668395957475033344a624c3274586b79684d7948743725324669754f576c34414e436f7a44684a537264344a4c6e4177794f58433042425238646835415555744434577831376839434c64517639474263376c63523643457a4d59443571394b6646427376674169434c766a7255446c6f3744316e3975527a4350585771464374306b42354c33543277324153384b4d7a6951253242683746327642564e4d54784b4f3632592532467136707a52473453774e365934587071717664726a3674526d7936746d5269656632344b4977614777452532425a325450423056414e746a31474a476d6b6b3541307531574668253246765656336a373746344d58354634354e534b755925324675616f644165414d54583634504b514c687279693837455142253242333772793756596f7025324631515076615a4a515276766e507767473261437933576e584c3355507578495071485a384752394a466c51454e58565055514f494865584c765255742532464b64774b43627a55253246377247717561627353415a466832466b50766a6f4162614b44474a786262574561755330685368337a3847644b6c387434703256323668356d54415843253246672532466e684d32346f6a4762253242724b703773753061464271393674647231326c6d3249654e713668376d7972426f686c33537778713430477a7a73617a6b726735796b3738666749553578734e764538516f5a4a7445616773314f76393034253246396d7a536278456b31304572573834593238584a614c33694478656b43584251775335324a4a253242746a70336c647736766d6973466d7678436b3265703370253246532532467a35617971643854444a3772687a5a5a4525324670485969316b366259496f4b744330596a6d723170253242656c6a3136555239543731327335676b704556785372725064344846356f7058764c7442676d315861253242646c396b4d444562314f477a437a4b6a72357025324667324f304c556d4b546e466e4b766575774575746c6a4e4970577876763569307a642532466e454457366e336359684668355232567337475356253246576b477068626f53614b79434e3079575538376f32427a594e30553555313461453454253246766e755052624346614261587863636d63496f395a3767367532764c253242716d695661497168526d6d5478454c6278386f58664267535a7a4245524d646a69584a3236314f6b584f643973716d6a47304362623647687741764a70437137716b5155494667324c6a4530616d653430746e3644716c375a70766d4b54704e6d4f356a4b64424d7535684c64354948665a44595a62446f31506c776d7052455539646642417746644e467630587078483364786f7157426b25324279446578547a525342306e433468587442374c674e41637144743839367a524f397865723649697063376b756f7a4d455678356439783141316249554673556e743834326154775134326d43324b57764d547941496970766d72784138765739623766723063434a48765145786c3176564f785972576968347659705546744942704a4f7954666159364f4b552532464d6a71373078414b35635142434a705479614f54473161725273797a6f565653763858687025324633396162526d25324659776d676c4b3078253246573637724a73433356446f7656477751733058374149775146554d565638723561346b5579616570764f486330655a45475847634550643247326b6369713874514a334653787448326c4c504f644b7076304c54444b736c3858253242746c3162547565346625324268767151476f6f4d4d76504f474a715a38664c724236352532426f72653577666d47444825324230342532424d545a4344494e526e4e474e79316e59253246335453566e724e637450494c4147626f45253246395249546c45444f6d626c253242385a44654256436d6d6f594d2532464f566a7a453750473561464d3875704c5625324670683355634679766e35306d6a4c583871504d464262484f7a356d4b733771253242637442464f6a6f5a35664142717a6d704763546b446e7a4b506931716b56366e5763485279717356557a45335a25324676757955376d636a65377a42473857253242664b3254483345536a316c2532464d434e505866626b6e3067644b756b4d77636c465463624e4d7265384c467861363243673056544b374d51567853334d57416a59364225324246434e536f32344442696f2532464e497672626e5163364a765242695042423041353734584d566a7344545a774b35484d3833667367677a55706178494c374954387a6e5a4177417775547436477525324671466974586825324241584b627a426430675975253242644d444138384d4d343057665667414661696a694a5665383558253242454f594d46575436553144584d49426b38435376524a416538764f6f5663514e4a474e3462536858416c253246587531526d5a465a427a756565346b6d37656f416c3238722532466d4e253242447267546c4f306a78346f784b4566424c5047695a6676384c7076675641634b79704b4c71763438445a514a31374242335a3930576a3930465633253246674c3152535925324679344832714c6f2532424231522532426c6242646b597643366a725578426a754f6b45614b3269784432722532464a7169494b505179487235716e415968515269364c6a7a6764586737735235397577393659545525324265424d34614d614158704a696a666246423456575169324a7743556a6f557278646f6f6942636550564a677439253242783663373067514734535325324263394178424f353662436225324266476c625638306256734a32504c613652253246783125324643582532466f4139513557615136437a6f7257674c25324668586164564e716d367567794b4c6b4e5a42253242566e34512532424a4e6162576d44783279554f456c57784e6e4d50706a6266655a7742575863452532464c4e7535614b49746a514e4c537939655551527375694664622532467a744351736d513876376f55516d6a3948616a58253246787469453676674d517645796b4d6e456238674b722532424b34387152326d4c7546787432306b332532427651636c386e45427565304e37346c53794f6f253246464b387573756a56424c6d534945323071546457644b4f687a47467866737a4c6348506b437765704b4f645342684c4333305a6464674a61656244465564455735724a2532466d4b397049427458785a4367416c737048565032505862355625324267647975476657735163584e596751334b6233584250703073253246356c59676a4978325a76584b4c54374968487356324b6444304832624a64364c4f3963596c4847686a4b4b33397646664b506966424171566b6b346a4b644676304663533943744e4c37456f4873666525324262722532466166514839324f50435071394b62726c46775078253246737137797666577165795742764f436a4125324675634e75466e4d253246687245614f6b564c454c4f696b7a7752642532424c483133526f746830743566597730426425324251326c624b746d25324647755a45396a584c3854394f46394f615139677525324251476b54496352544d7952615933666f7748566c7a63466561466e646a4d386d59374e546c71426359357769614a706f6b4a6e6d7a776451552532427736594f444d5834734b74732532427358785948253246555673767062556a4544566646717425324276694879487055556741253246447554632532425a6352784d774e473552452532464e626f6e754466697330616e587572315a5347347a424e487945416477526f425225324255586474326f45447a3453354d4e6767763775387338647673326c315062466b44476a6b6f624f63557a25324255614e3241532532426a5964326b46615a766c3559665a4d79525a324a5759415976787353397443343725324677654e31654b576a634a374562675450654f35343069476c55336956794e5a784e525165414125324668537349534551435273564774393165576a6b7a78544d386b54797a463656334d486e63546c76534b6f6e376561636b483753765555563045704433773042484a4276753466693143636d42614e467058644672647679776254336b666e71715a304156253246584a6d6f4541665a413150772532424a66513448794b5a7472445359374b6b4c467a253246366236416674253246466c794c73396451736d756149714f5879504563624e72656675394d472532466f673363766a497a67495469333349422532464c7a517a786a6f57466a63624959426777566d45546f534c446b727a775433675a32522532463764634f65715562556649253242685834757639795a7772447064614c784f75707a393453476a726637673458476d7a5074646e75517943433949334c374a4c656772774e672532424d754a4f395234347970577a7925324662624151324a5338654b773849743237766748464437586479365a736765554359714c524674784d4954685332715834654f52744e594f48304c30576a686b674141617325324667616648686848334f494150467358794b75796c3935317a72327725324269343662443925324279743468446657334444692532426d53766b41377750364e4b67647665426b42505a68546679674a317441344a426c543074676138714174523679414865447569334e47522532466e393059797449635a47354570795571396d57754461566461375a4252726831716153253246494231655762674c304a686834714a54707a4771566b794e4f4e465475546b4867545869767838504a5275427a337251253242253242336868597176566e626e6730437a44713353587a66786351324b796830526f3575454d5151614a466678354f666a30396a783677314e6941525a6e4a6b316654306d68253246667a4a4a346525324232334e4a38724150716e324e365876314d75567a4c5931784f734b4a466335486a656548303057666d6d36354d6663436c4762664e35727a6d4b6147724f47253246413779764e6e525541746c777953375763573530346d396a5a4d6b746b655a5a53615242714f4a456d58443358565338433654566a57434d48774c4f5149654e44475a535425324673684958574e374a4d41566e253242644d25324225324677376d3962625951476c62464848506b7a63745150676c4d555369546546794c4344753567716e4b4468566833384d6f624a726f71626a707241372532425368546d615437253242356c3666424e6b4a4f4438535135506442713949756c655458304339576e504b76673261735330624c6f3648336931594654624645784449546361583246795162494a30434e522532464b34457357513648687355743067726e4139704b6b6e337971654d59796f715174596e75394c454d6532794b6e484673253242253246496d544d6c675934696b663730314c76756c5571444b46784b5158415251693567354c6e436b56576f2532426c794241414b74376275644c5533493262413963394576326c6e7839467241797464373858744a4555664f316e6a62746768563643506c5257625434436c682532466352634f2532424f4b6e3376645634766c6c4a596c414442633774253242486558566756576a49314b3665426b3635634f7a524159317367365551516f43614c587576374b76316c48497338457625324678694e427635436e3478473267797731427830442532462532425a6774454f3734353662584a4a253242516c48356e374345327074666c324363333562526e54444d46334739624c7665495238584d6d79586a354c6770486d656e6261736c3531366d4c4851683125324241354d3550594c6a7646625272623769776c62336b4854484e434c41253246506a39564b71524b637163667435386f314d704f4953784f357757676f48774e50415365564a6c474a7063536f6f6d36797655356344426e56316249474a4851335453746a4d646e575033585536744d4353637a517347304f386a4c6c53794369336956393144466a524f623979724475796f49467a664b743177464b7134757251533861523546655449614e56616b4a485949253242632532425643486b4f515533786957385950744845385565325a673941304667396367704d345831537569453248426f5a32595634667251504b366343506b4865336d4b796c7a4f4349646273717938374e3464346a6945764f753830784b66544664774b5674577958484144784c673053253242365272663249787a5179306d42326972315238744858655525324245676125324656323849622532466d56786857555850576d3830253242304c6e7272675459763658456c663054777462313768397735704b4b703144656e2532426f62595373347535524e676656684c73546e7552344a6e714825324637486170494f4170347531437662626b786a486d453962773176674f576c77575065756477744d505a495271645731756c7366686e55544c76475a4a7154764b53776363367644334c4c5049714b5376597553787a41626b645956253242766225324646443041645849514c5a3034453578536834595243545758494e4876514d686a454225324656733254613935394b5852414870614e424e4130574967717941463557786e5a4a544a38637045696871306c4c42374b4a437063346b52624f377831774468353145537537515877375142305a495856786573793743794a714f546d46724544395449455653644a4e424964765662314564454975574b5971394651505a4f416765584156574874737061475525324630795056327132417569664a4c5556703178666d6c646131496e3646664c476253307a715a49476a6d47726a72374325324667543943634a676a7654346d5457253242714779737958694f4234376f6e794e7435376a42787065583330316f31647870643552493644634e566468696d315475784d41706f384e7662504a312532465038774d48347a253242366c62707268585259695271464f5849765a3637663577536235613371714a6861336d434c73746162546558565a5a58637049766b65734d342532463231583337774c655525324641714379574b7a4c435045387672395933334369416234654a6e6857343946677643614d6f79327a73336c6c766661686e586f704d30554f413776736139327976626f3336716b6c346e6a5552597633503042444139585834253242637033434b4f7a655a4d51545331334a35566f5737525265646e4642306b756d702532466a4c556f717972426f6d436a656a316475253246463767426542737044753767734753253242796f54424f49364b463666483850485738484172694d59575639594c644c76514d5530654a58484a537a4b4f423475545262493557626d4e55332532423144783765445752787a546355327a253242354478356c565138496b4f6f36386f6c586a5a364f756b253242543136635139253246584130707a63506c47336c68344c5377766a323245504c4b7567746f6a5636253242727870523271397a693176576f37336f7a6c59774f444748424836614635374e69384a62586d6d424378366b6f6d5a46642532464b70515777384c6e6a4963416e59344c614a3855657038764f674b644378516b44676f39694b65456625324238253246335872353047366d634552757662653441347630395a78664678666d6d567369784230536234253242783953253242307239546530725176355025324646395676784c3433796c2532427866394a786138493976253246357a656e2532467856253242636a714425324659436b36253242762532427a464233356579584d66314f4b2532466f71334f496e5825324642393759376f455271526636397a396d375851366458566a78677336502532423977447a35497a4261387463502532466c6f5a6265376263357625324658586d25324225324671554948663833363650253246357158724f5a7a684f666e335872704f4579516145253246253242636f6e55632532427464712532423366667255373973347257456679253246634375492532463166312532466f253246555725324249663146763633366d33662532466d714e646250455038714d4f6a665748714d253246427442253242444f7576337a7262325468723850346434674838643847345a39704546446b763578424950253246624950776644514c3144786f452532424e25324662564f627657775438623434513747253246376d66797a4c514c31337862686e326b52634f672532467a7949415838593462763953514a3731725051787938455625324677732533442533432532466469616772616d2533452533432532466d7866696c652533459471022b0000200049444154785eec9d07981445fac6bfdd9dcd39b084258b80082288a2e279e209ea194f319ce1383d338a87f10c441573e22f8aa7a772660ce7e9e9e96156444c8882020672d865239be3fc9faab5c6ded9d99da999eaaeea99b79f679f859d8abfef9d7abbaabbabe3bc5eaf9770800008800008800008384e200e26ec38735408022000022000029c004c184200011000011000014d0460c29ac0a35a100001100001108009430320000220000220a089004c581378540b022000022000023061680004400004400004341180096b028f6a4100044000044000260c0d8000088000088080260230614de0512d08800008800008846cc23f2e790eb440000440000440202a090c39f5742dfd0ad984df3ae50f34e090df6869242a0501100001100001bb086cfaf8233af2857fd9557cb7e54a99f061d7dfa8a591a81404400004400004ec22f0fefc9b61c276c145b920000220000220d01d019830f401022000022000029a08c084358147b520000220000220001386064000044000044040130198b026f0a8160440000440000460c2d0000880000880000868220013d6041ed582000880000880004c181a00011000011000014d0460c29ac0a35a100001100001108009430320000220000220a089004c581378540b022000022000023061680004400004400004341180096b028f6a4100044000044000260c0d8000088000088080260230614de0512d08800008800008c084a10110000110000110d0440026ac093caa050110000110000198303400022000022000029a08c0841d02ef6d6ea1d6d22a6a5af513357eb48a92c60da39403f6a2f8826c8a4b4e72a815a8060440000440c0240230619ba3e1ad6fa4ba379653fdbb5f51ebcf3ba9a5b8c2576342411679061751ca6f4651dab107517c7686cdad41f120000220000226118009ab8e86d74bad9535d4b2a598ea5ffe986adff894a8a535782d9e784a9d3886d24f9d489e013d293e2f8be2e2e383e7430a100001100001d7128009ab0a5d6b2b35acfa911adff98a1a57fd442d3f6c256f7308e6eb577f9c279e12f72822cfc881947af87e943c6e18c5257a54b512e5800008800008184400261c4130bc8d4d7cd6dbf8fe4aaa7efa6d6add5a1a5269f1b919d456554bd4e60d9aded33397d2cf3c82527eb71f25e466505c4a72d03c48000220000220e00e0230e130e2d4b2b584eadfff9a1a3ffd9e5abedf44ad95d544c1fd94d714171f47b9775c4815b31e276f5d6368b5c7c5517c662a79860fa0e4fd8751dae163c933b017515c5c68f9910a0440000440c04802306189b034fdb095763ff032357efa1d51184bcdacaad4a3f6a7bcf91750c54d8ba9ee5f1f4bd46e49ea89a7e4317b52d68c532869f880f0ca402e100001100001ed0460c21221a8fbef0aaab8e151891c1d93c667a4528f97e691a7470eb5965551c9c9b3a86d775dd8e5e5cefe13a59df09bb0f323230880000880805e02306109fe4d5fff40bbcebd432247c7a46947ee4fb9b75ee0fb63e5bcc554fbef8f435ecaf6afb8e0e12b2979ffe161b70719410004400004f41280094bf06fd95146c5c7fc4d2247c7a4b9b75d406993f7f7fdb1e1a36fa8fcaa07c3ba8b9a15d2f3b5f9e429ea11767b90b1238167dff82f9d73e34cfec77d860ea5a76e9b4f43070ea44fbefe9a0e3ff73c7af7b147e9e07df70d1b5b38e5945556d29f6f98494b972fef50efe337df447ffcfdd161b74536a3b51d91721075d73734d0d577dfc3ff7be79557d0cab56b23e6cccabcf7c9a7e8c253a6505a4a4a87f253535264bb8df420603b0198b004626f6b2b6d3fe862a29610efc2b294cd6eaceaf5bfbb3aec8ee56d6aa6923fdc482d3bca255af14b524f3cf559fe20c52524c8e7458e4e04d66fdc4867fded7abaef6fd7d0b08103b9f10de8d39b9b83aac13b12133e68dfd174fdf9e7f176cf7fe4517ae59d777d27094e8453b49dd535ebe28b7c6d89a46e7f1356c199b159fef52a7ae2969b283f272792e6212f08384200262c89b9f884eba965cb2eb95c714439b79c47e9478def948feda4557ef543d24bd2094505d4ebb55be5da81d45d12102613c860ace6599093c3cdfaace38ea1a59f7cca67a8d63cc2ccbf59bf9ece3bf924dab47d070903f53761abb14d3ae8a080c62166a056131675ccf8d3d97c36dcd50c5e18f6bc8716f199fd11071e486f7ffa69a7193e4bd755fd029830377662c2fa6435392b3b5697d5a8455b45dd820b3bb961477733612b4b96d63a0367ed117589b6ffef93e51d56321e9d3b9bfefee24bbc1e7132d55599e2ef5dc5155f1d10b08b004c58926ce9b47ba971f97752b93c837b53cf17e7f9f2789b9b292e31d1f7ff5d7f9c474debb64895c9ae05b36bc238d410b01a22334feb0c3890091f306a244ff3cabbefd1bdff7c921b5bbf5ebdb8a908935ab771235f5e15261da81c66a4271e3eb1cb65d36026bcdf88bde8e687ff4ef75e7b0d07619dc18be55db6742deaf8ecdbd5bcadec602713c1ea67e9ac6d386cff719d968cfd4f60c44901334d71d22278056a933049eb72b4588d38e398dff3130deb0c97717de6f53738ff2d3b77f27e9cf8bbc3f9ecdc9ace7f395aa4b59ebc88d8091e81e2ca2e49e00001bb08c08425c956def60cd52e794f2a57d685c751e685c7fbf2b0c79c32cf3fd6b7345dfde45bb4fbfe9742dabc43149276e204ca9df567a9762071f704acb32bebcc2b90798a41bfbbcffc0dd49a9619b5300036c833e362c6e2bf8c1ac884032d475b67c3e224825d1bb52e5bb334a2ce2fbffb3ea4fa19076bbb85395a67e6fe337c6b9ba74c3ac267f6cc4cad4bd0f32e9d46b31e58c883e27f4d98fdedafb7ddd1ed92bb355ee244a73b13b69e3031e681da1928ae91dc0780ef1c08042300130e46c8eff39aa7ff475577bf2095abc773b32869683f9e876df4517ce28dd4e3991b2969687ffeb7e60d3ba8f4ac5ba8ad3ec4cd3b8828f3921328ebbc63a5da81c4c109045a2216335aebcc4ecca6ba9add32c3e9ce84dffffc0bdf72aa6895f56630f1b7ae6ecc124bb3a27e66bc73a75d42b3173ee8333566c2d6eba356137e71e9db21d5cf0af3bfceeaff7f3b4cd8ff24c51a3971c2c18c97dd80c566ffe2a4a03b13f6e7d1ddc94238d7ef83ab0b2940a0330198b0a42aea3f5849e533da07ba508ed489fb52de5d97b4ef6ee5f5125fcefef47bbef355fe4357f0973478bd5eaa9cf90faa7b63452845f234b937ff85d27e7f60c8e991508e8075b6595a59e95b8215cbabdd99b0984dc9cc84bb6a5da099b0356d30d3097526dc55fdfed750ade9c41dda769830ab27d01de9fe3773d53534846cc2a1cc8403c5153361b9ef0e52cb118009cbf1a2a6f59b69d799b710b5b605cf999840bddeba9312723279dae6f55ba8e4f45faf0df778f27a4ada7b10ffcc5b5d473b265f45dec6e6e0e526c453c1c35750f2d861c1d322454804fc9778fdaf410a43e8ce84c70c1fdee19ab0b85148f535616b87acb35b71b22096a3add75f271f7c1037abe2b232a96bc2d6ebbbc28cc48981b87b5cd423ea6566c71ef5b2ae1cf4cccfe74bed6255c17a9d9af5c77f39da7fd9db7f162f66f8fe8c23bd260c130ee9eb82440a09c0842561b66cda49a5e7dcce5fdcd0ed11479476f478cabdb9fdb11276ecfefb6b54bde855dfff33fe3499b22f9fe2db03baf29627a9f6e50f83de299d9095c667d1897b61cb4ac9f075995cccb01e7de9659ea6abe784bb336166524edc1d6ded8475b99ab5b9303f8fe228ce776d595c370de7ee68c1c4ff6e68567fa0958285375c4f0fbff022b13ba0c52cb9bbbb8e833d271cec4e66568fe8f3c03e7d3a18396be37f173d482f2d7d9be30a7477b435c6fe779c63395ad5370be5042300130e46c8eff3e61d655476d1ddd41aec31254f02e5df7511a51cfaebe60ebbce98474d6b7fbd0b3a718f3ec466c3e2cd488d9fafa5b2cbff8fbc0d4dddb6cad32b8ff21ffc2b7906f6966c3d92db49c0df54fcefc6b5b3ee4065fb1b895dcfd0766758fee6e63403d40702a61380094b46a8ada29aca2ebb9f9abedbd46dce84be0554f8f44c8acf4ce3e91a57aea7d20beeeeb08c1d97104f79f75f4a29078fe269da6aeba9f4bc3ba939c8e34a8943fa50de82e9e4e9952fd97a24b79b80f5c62e5697ffe34e76d76f2ddf7f76cf3e53b5db95b51e98b09351455dd14600262c1951669465573d484d2bd6769b33e7a67329fd98837c696a9e5e4aad9b4b3ae549e8d78332ce9aecfb7bfddb5f52f935ed1b1e747524ed3398f2eebf8c12b233245b8fe4200002200002261180094b46c3dbdc4a15373e42f54bbfec3267e2e03ed4e3f959e16d29e9f552c91937753b1b4e3e686fcabf771ac525fdbae1876437901c0440000440c0000230e130825071eb5354f7c2078173c611655d7a12659e13fee6fab52fbc4795b73fdbe5e61d69bfef78c357185d40161000011000010308c084c30842f53f5ea7dd0b5f0998332e35897afcf37a4adca3a8fdf3d6566ad95519b49684fc6c8a4bf4f0742d5b4a68d79f6fa5b68ac07760679e7b34377a1c20c06eb6da5e52a2f44513fe54d9cd55626b4c999722f85f1fb7e37a341400026e2700130e238275ff594e15b31e0b983375f238fecee038b6390711d5fd671955def66cd05ab2a69d48197f3cc297aef2a6c554fbaf8f03e6cbb9fe2c4a9ff2dba0652241741360e6b8e0e9677827a79f79067feda21d473826cc1e9d62bb77b15dbc98713343bef5917fe0ed4676040865ba9a004c388cf035ae5843a517dfd729279b05173e379b3cfd0af967defa462a3e750eb56e2b0d5a4b42610e15be348fe2d35379dad6eda5547cda5cf2d63674ca9b7fff6594f29b7d82968904d14d806d60218e0ddbb6f95e2f284c332b2383c473cfd659a8d880433c3b9c919e4633ce3e8b6f34c25e98c09e7766263ae3f63be8c60b2fe0555867c281deda245e5e51555d432ffcef7f9deec216cf335f77fe5f227a2773744714bd8b450230e130a2debc613b959c3cbb53ceb449fb51eeed17f9fe2ebbc5a5ff569495739ea0da579775aaa7c7f3b32969cfbe61b41c59a285007bfce8a6457fa73f9f783c9f695a679dfecfe65a97acd9b3cb57dc7917dd73f5553c9fd877395413663b5e5967b4ac6c7688fc7d0a0b03be6b98b549d46bd78c3d5a628b7ec41601987018f16eaba9a31dbfbdbcc3ce56712989947bd3b994fabb71ed25b6b551c5bc7f525d0013edaacad4896328f7b60b7cd7861b96afa18a6b17515b8d65361c47d4fbfdfb7dcf1f87d17c64890202ccd49e78e5559a79d105949a92c277b062af1914bb76590d8f2d058b57ffb12d25adb36636ab65ff0fd584fdaf09fbe79f30660c7ff5a0f510cf2b07fa2c0a42812e8040440460c261e2dbf9bb2ba8b5a2da973ba17f4f2a7cfa06df72325f8a3e6926b51657845c437c5e26153e378b120a72da7dbcbe91ca2eb88b9ad66cfcb59e9c74eaf56ee7a5f0902b41c2a820605d12161d127b54fb5fc3b59a307b93103bd8bb77d9216bc2e21dbd62999b95c1eaf53771d12661c05dcd90a32218e80408444000261c26bcd2736fa3c6af7ff2e54e3d721ca54efa6516cc5ed6f0c336aa7ef835e9d233ce9e4449a3f7f0e56bf8f0db0eb3e9a45183a8c7e2eba5cb4586e82110e8fa6a77d770c399095b978f1939714d98bd3061d9ca95bebbb1bb32719647b4935d67f69f1d474f34d01310888c004c384c7e75ff5d4155773c4b6d55b5ed257812282ebefd8e687678dbda885a4278d3925ffd719e78a2f8f880e5c467a450f615a751da898784d96a648b060281ee34b62ef9ee3762af0e3752594d38d835613163b5beb5a82b13b6be46d07f268c25e868501afae00401987004949b37efa49a475fa7868f57535bb0b72a45504f7c561a251f3882b2ce3f963ce2f9e308ca43567713103743892565d11b669cecda2fbb4efcc033cfd2bdd75ee37b3c485c1366d78fc552f6a4830ea249071f483575f57c79dafad6a23bae9c415fac5ed3e9ee685617bb996be9f2e5c4f25f70ca147a6bd9329a77e9349af5c042dfddd55dbd8718cf0abb5b7b68bd7a0230e14899b6b652f3861db4fba157a9e1c355a1bd6738d43ae3e32879fc5e9475d9497cf30fb19947a8d9910e04ba2380d92af40102fa09c08415c5c0dbda4a0dcb5653cd13ffa5e6ef3793b7b139ec92e3923c9438ac1fa59f3989d81dd330dfb05122a31f01ff5dacc4cd5c00050220a087004c583177f696a5c615df51d5edcf52ebae2ae9d213723328ebcad3f8661ce23588d28520030880000880802b08c0846d0a93b7a1916a9e78936adf5841addb767578a6b85395714409bdf329ed887194f197dfc37c6d8a098a0501100001d308c0846d8c08bb43ba6d5b29552f79976a9f7997c8eb0d585bfac98752c619475042ffc2f05e7f68631f50340880000880807d0460c2f6b1ed5072f30f5ba96ac18bd4f4c57a7ebd985df74dda774fca9c7622258f1aec502b500d088000088080490460c20e4683ed80d5f4fd266a786305a54e1a4b892307fb76d872b019a80a0440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c2100133624106806088000088040ec118009c75eccd1631000011000014308c0840d09049a010220000220107b0460c2b11773f4180440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c2100133624106806088000088040ec118009c75eccd1631000011000014308c0840d09049a010220000220107b0460c2b11773f4180440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c21e01a131e74e86f0d41866680000880000880801a021b3efc808e7ce15f6a0a932c25ceebf57a43c9f3e392e74249863420000220000220e03a02434e3d5d4b9b4336612dad43a520108304d6ac5943071c7000ad58b182468e1c198304d06510881d0230e1d889357aea120213264ca04f3ef9840e3ef8605ab66c994b5a8d66820008844300261c0e35e401019b08ac5cb9920e3df450aaa9a9a18c8c0cfae0830f68ecd8b136d5866241000474138009eb8e00ea07010b01310b167fc26c18f20081e82600138eeef8a2772e22609d058b666336eca200a2a920100601987018d0900504ec202066c1e9e9e994909040adadad545b5b8b6bc376c046992060080198b021814033629b009b051f78e0819493934377df7d379d7df6d9f4e4934fd295575e49959595b47cf9725c1b8e6d89a0f7514a00261ca58145b7dc45a0acac8cfefdef7fd3b9e79ecb1b1e171747e211fec71f7f9c8e3ffe78cacfcf7757a7d05a100081a00460c24111210108384fc06ac2ced78e1a4100049c220013768a34ea0101090230610958480a022e2600137671f0d0f4e82500138eded8a2672060250013861e40c0400230610383822681800d0460c236404591201029019870a404911f04dc410026ec8e38a195314600261c630147776396004c3866438f8e9b4c00266c7274d0361050470026ac8e254a0201650460c2ca50a22010309a004cd8e8f0a071b14a00261cab9147bf638d004c38d6228efeba82004cd8156142234120620230e18811a20010504f0026ac9e294a04011309c0844d8c0ada14f30460c2312f010088110230e1180934bae92e02306177c50bad05817009c084c325877c2060230198b08d70513408184400266c5030d01410100460c2d00208c4060198706cc419bd74190198b0cb0286e68240980460c26182433610b093004cd84eba281b04cc210013362716680908f808c084210610880d0230e1d888337ae93202306197050ccd05813009c084c304876c2060270198b09d74513608984300266c4e2cd01210c07234340002314600261c63014777dd4100336177c409ad04814809c084232588fc2060030198b00d50512408184800266c6050d024108009430320101b0460c2b11167f4d2650460c22e0b189a0b026112800987090ed940c04e0230613be9a26c103087004cd89c58a02520e0230013861840203608c0846323cee8a5cb08c0845d1630341704c22400130e131cb281809d0460c276d245d920600e0198b039b1404b4000cbd1d00008c4180198708c051cdd750701cc84dd1127b41204222500138e9420f2838002024b972ea52953a6d082050b68ead4a9244c78f1e2c5347dfa747ae1851768f2e4c90a6a4211200002261180099b140db425a609a4a4a490c7e3a1d4d4542a2d2da5828202aaafafa7e6e6666a6c6c8c6936e83c08442b019870b44616fd721d81db6ebb8d66cf9e4d4d4d4dbeb6272525d19c3973e8baebae735d7fd060100081e00460c2c119210508384680cd821b1a1a7cf525272777f8bf630d41452000028e1080093b82199580406804acb361cc824363865420e06602306137470f6d8f4a0262368c59705486179d02810e0460c2100408184680cd8667cd9a4573e7cec5b560c36283e680806a023061d544511e08444880dd0d7dde79e7d1238f3c426c491a07088040f412d066c213274ea4f7df7f3f7ac9a267200002200002b61038ecb0c3e8bdf7deb3a56ca70bd562c26ce301f6b364c912a7fb8bfa4000044000045c4ee0d4534fa5534e3985ffb8fdd062c2d104d0ed0240fb41000440c06d04a26922a7c584b12faedb248ff682000880805904a2c5471c37e1683a83314b92680d08800008c40e8168595175dc84a3055cec481d3d0501100001f30844cb84ce71138e962504f324891681000880406c1188063f71d484a3e5cc25b6648ede82000880809904a26165d551138e0660664a11ad0201100081d823100d133b474d381a960e624fe6e83108800008984bc0edbee2980947c3198bb93244cb40000440203609b87d85d53113763ba8d894377a0d02200002661370fb04cf311376fb9281d93244eb40000440207609b8d95f1c3161b79fa9c4aeb4d17310000110309f809b575a1d31613703325f7e682108800008c43601374ff41c316153960a1a5a6aa9b6a99a1a5beb6877433935b5365052420a65a5e45172422aa52766514a627a6cab19bd0701100001171230c56764d1d96ec2269ca194d66da3659b5ea39fcabfa18afa62aa69aca0566fab8f55425c026524e7525e6a4f1a9cb70f1d3ce038ea915624cb12e9410004400004341170eb8aabed26ac0b8cd7eba5f2fa62fa60c38bb46cd3abd4dcd6c8a591e249a78ca46c4af6a4527c9c875adb5af88cb8a6a992d84c991d89f14974f080e3e9b04153283fad1711c5699215aa0501100001100885800913be50dae99fc67613d6b544f0ddae15f4d2ea05b4ab762bef73617a3f3a6cd0293420772fca48cae126cc66c0ad6dad3e13de50b1863edcf83215d76ce2790ad28be8d451336878c1fee1b0451e1000011000010709e8f29b48ba68ab09eb383369f3b6d1f2cdffa125dfde435ef252617a7f3a7cf06934bedf519410ef09ca8a99f2675bdfa4777f7efe17338ea32923a7d321034ea4f8b8f8a0f991c0dd04d6ad5b47a79d761aefc4f3cf3f4fc3860df375e8a69b6ea259b36675e8e085175e48f7de7b2fffdb8c1933f86ff6ffd4d4d44e20962d5b46871c7288efefa3478fee544757f458bbde78e30d5f1deea68cd683803d0474adbc46d21b5b4d580790cfb7fe8f9efde60e6a696ba6d1bd7e4ba7ef7315a52566123b430af5604bd9752dd5f4e2b7f7d397dbdf264f7c229dbcf7749a30e0f8508b403a971278fae9a7e9acb3cee2ad7feaa9a7e8cc33cfec60c2cc48599afcfc7c12a6cad29d74d249dd9a30cb73e79d7776305d66ea2fbdf45250232e2b2be3ed98306102cd9c39d3a564d16c10b09f808e895fa4bdb2d5849d5e1af8b6f8137af4f3ebf90c78bf3e47d02923ff4a6949996133aa6faea1e7beb98b56ee788f9771fefef36954cf096197878c6613a8afafe7465a5555c51b9a9d9ddd6156cb4cd36ac2223d4b3b7ffe7cbafefaeb03ce84c5ecfaeaabafee60eafe3444ba55ab56f94e0284b93ffcf0c3fc6f62e6fdd5575ff966d5471e79243f316087d5acc549c2bc79f3b8798bff7ffcf1c7b471e346dfc986989117141474327bff3e9b1d41b40e04884fb8d844ca2d876d26ecf41949abb785e6be733a5536eca27d7a1d4ae78c9d1dd2f273b040b11bb79efefa36fa62fb52ca4e29a059873f4389f1c9c1b2e1731712b09a256b7ea0996b38261c6816ec8f4718fad9679fcd67bcd659b2bf395adbe93f03bfebaebb7c270a6fbef926375a61dc2fbffc323df9e4933477ee5cbaefbefbe881071ef019f7c08103f9098735bfbfa9bb30a468720c12d0b1021b0966db4cd80910ec8ee6d5c5cb6963c51afef811bba12a37b5274d3ff07eca4fef1d3697daa6dd949e94e5cb5f515f420f2c9f41bbeab6d2a0dc9174e941f7f23ba871441701ab59b29eb16bc3d6d9abffac30d4e5687f13f6bf366c5df6b6ce86bb9aa1fa97c7fecfcc95fd5ebb762d4d9b368d2f712f59b2845fc366e53cf1c413b468d1222a2a2af22d695b97defd67d86cb6cc0e760d9bfd9b9d18e000013710707a02182913db4cd8ee25812fb7bd43cf7f7bb7efb12206223e2e81fe76e813d42bb37fd85cb654aea7155bfe4b53465ddea18c929a2d74cbfb7f222fb5d1c5e3efa2bd7ae08ee9b0211b98d1bab4dcd58d56816ecc124bbdfef9ad3766599781ad66669dd11e75d4517c2978e7ce9ddc40bff8e20bdf4cdc7f261ca81dc2b0c5c9c3d4a953e9adb7de22b654cd7eb319f3830f3ec84f2ad8ac97992b33de5b6eb9856eb8e1061e11d6efbaba3ade0e3623fff9e79f3b2cbf1b18363409040212b0db7f5462b7c584ed3c13a969aaa21757df4f5fef789fdabcad94959ccfafd30ec8d98b8ab28650bf9ca161f3d951bd911effb27d19fbb283eee33774598f7f7c318b56edfc8026f43f9e4edbe7cab0eb4146f308f8cf4ead2d1433c1eeae8f7667c25d5d13b6fe5d18a3a8cb3adbf537e1ee96b7453b366cd8c0bb70fbedb7f31930bba62c8c9acd90c5b27a5a5a5aa71bca583fbffbee3b9e7fc48811b819cc3cb9a245410838b112ab2a08b698b05d00d8661a0f7f7e1dfd54b68acf7ac7154da2d3475d459e84c48878b0c79a3657aea587565c4df52d35fc39e2e907dd4fbd32077628973dfaf4ec3777f2bf1565ef4953c7cca25e19fdb0994744f4cdc81ce84e656192279f7c3237a2704d98f5502cfd0a9315773cb3592a5b8e1e376e9c6ff9db7f562c734d98cdc0455de286ad40d786c5f5eed2d252dfac583c5a653d21c152b419fa442be408d83911946b49f0d4b698b05d4b01ec4ee54f33112a770000200049444154b7bc4ea99e4cfee8119b01c7c72704ef651729d81d74eb4bbfe265ae2e594e8d2d753c651cc5d38507dc46230ac777c859d75c4dafac79903edfb6945abdcd949e94cd9f419e38f854fe18130e77121086286e4e124bc96256c9ee2466c6c69673ad3766597bdbdd4c58a40b34db16cbd92c8d7599995d8f66cbd2d65938bbbe2b8c955dfb15cf1c8bbfb1c7a6d8e17ff2e07f97b4f50480cd8e7bf6ecc9ef28158f5e89cfc5c98328d79dd145ab6395805d3ea49aa77213b6eb0ce49b9d1fd1a35fdcc837cc3865e4157470ff63437af6972d5957375650795d31edacd948d58de5c496b44bebb6d386f2d554dbdcfe388aff71ccd0f3e8c8a16707fc8c5d377e61f5bdb4b96a1ddfd0f2d8e1e7d3e1834f0fa93daa0388f2404035013c97ac9a28cad341c0ae1559d57d516ec27674bcb1a59e1ef9e27a3e6bddbf68329d31fa6f9410c20cb8a9b591febbfe715ab5e3432aabdbc16faaeaee604bdceca7a5ad89d773f698f61b56021dac4dfffe7e117dbce9154a4c48a63f8f9d8d678855ab13e5394e40ccc6fd67d78e37041582408404ec9a1046d8ac4ed9959bb01d4b00ecd1a37b965d42e4257ec354dfec3d83726868a9a37faebc855617b73f6a11ca519056442c5f4d53050d2b1847d30ebcbbdb6c6c8bcb7f7c7923ad2efe847a670ee2d791d912350e100001100001fd04ecf023d5bd526ac2769d797cb6f52d7aeaebf9d4376b4fbaeca0fb29358477fe7eb4f1dff4d29afbf91dd4a11cec66ac03fa1e45effdbc84cf98f7cc1fc30d3fd8515cb3991ef87406d53456d2f9fbdf42230a0f0c96059f8300088000083840c08e9559d5cd566ac2767578c9ea7be9e38dafd098de13f9b26fb07da0d90c75cebba75155c3ae90782527a4d1d143cfa1377f78c2f7dcf1e85e87d15fc6cd0d9a9fd5f5cf9537f1ad2dc7f73b9ace1cfdb7a07990000440000440c07e02764d0c55b65ca909db35f57ff4f31be99be28ff8cd4f278eb83868ffcbea76d2dc77dbdf8413ecc84ccaa3f3c6dd4c6facff07ad2bfdd297fcd861e7d3e43ddb37f20f767cb2e9357aeedbbb282fb537cdf9dd73c192e373c309f86f8611ce633aec0ee53973e6f0ad2155dd5d6cbdab992114bb5cb1bbb955d7c7eea8661cc41dd386870ccd03812e09d8e54baa902b33613bcf381eff6a2eaddcfe2e1d3af064fe5ac16007db6672f63ba7749bcc139f4443f2f7a54943cea2afb7bf471f6dfa972f7d52420a5d32fe6e1a9c37325855fcf375bbbea0852baea4f8380fdd77cc3b21e54122330930e3d9b66d9befc50de2719f850b176addba511830dbc94abcd98919e4471f7dc4dbba79f366a5a60f1336539f68953c01bb5668e55b1238873213b6b3a3afadfd3b2dfdf1691a5eb03f5d3cfecea0cbd1ecf9df79ef9e4165f5db03f69a5d5b3e65d40cea9735941efeec5a5a57f6eb0c98651898bb374d1b7f37257b3abf13365081eb4abfa2859fce8009ab52a5a672c4b3bebff9cd6f3abdc29035e9aaabaee2bb4b8d1d3b963f33ccde7624f67d66663d7d7afb09223bf3b6be24813dd32b5e96f0dc73cff976ae62ef2ab6ce6ed9cc96bdc189cda0adef3166655a0dd7ff396666cc6c430febccdbfa4cb2ff3b8fc54b2258dd975e7aa9af3eebbed5ecf9e5ae9e89d6141e540b026111b07382185683fc322933613ba7fcdfeffa8c16adb8867aa4f7e5376665a7b46f4ad0ddb176d7e7fceee8e6b646ea953190fa660da1fe39c3b8c1b2ad2ebfd8b694df84555ebfb343313d3306d0b963e752efac41c1aaf07dfee1867fd18b6beea3c2f4fe74e3c42743ce8784e61110bb4d5937d110adf4dfbc83ed36c58c77c182053c09db6043cc98adcbc362630db6accd0c9c19b97891029b79b383edc8d5d576945d9d1c58e959eb63ed126db1d6274e220299b0d8954bccb4f10a43f3b48916854fc04e7f0abf55ed399598b0dd671a6c79f9de65d3687763195d74c0ed343c849727b4b5b552434b3da524a6f10d3ed85151bf8bdefbf979fa70e3cb01ef9ade237734fd79bfd92199bc00cfeebe667b4a7f5bfc311dd4ff58fae33e57471a13e4d74cc0ffdaabff4b1aac3365665683070fe6db4e0a4366b3587f13b65e5f6566cb5e8e70c92597749889facf4cfdcd5f9867203cfef5b1b72a59b7a164f53ffae8a374f3cd37f39733b0174958eb63655a67d2aaaf316b0e29aa8f710276aed4468a568909dbdd4166746ccf66f676a3de198368fac10b3abc6ad01f02bb6379d6db5368afc203e88cd1d750795d096daffe8976566fa4e6b62662ef08f67adbf89697ec250dd9c9f9d43b6b30f5c91c4471bf1876a860d94b1f1e58fe577e57f5f9fbcf0fe90421d4b2914e3f01eb2c54bcbbd76a865613eecac4d84cd86a8ac284d9f7c66adcc14cd87f99bcab9930db2b5a5c2bb6deb4c5f68beeca84d9ecd97aa20013d6af3db4401d01bb278a91b45489093b31d567cbc637bf7b16b5789bf98b1bce187d6db7fb35b3571de6a5f6a44121de5c150ec496d6665af4d9b5b4beec4bbe81c8a507dedbe9cd4be1948b3c7a08301364aff563aff7b3ded12c4c532ce70a33b41a349b09cb9a70a833614623d03561f677669c871f7e78876bc2fea62f6eb2f29f098bebd862391d33613dba43adce1070c2a7c2e949c426ece419c6e75b97d2f3dfdec567b2fb151d41c70fbf90b252f2c2e977c479d89698cfaeba93bedcbe9412e393e9a2f1b7f30d3e70b89b80f51a2deb89f5ae643113667f1777245baf09cb9ab07833132bafbb6bc2feedb0de1dcd66d8cca0d94c56d41fec9ab0b81e6dbd06ddbf7f7f7ead5a9c60e09ab0bb758cd6772660f78a6db8cc233661273bc65e39b8f4c7a7f89dd24dad0d9497da8b4ede7b3af5cb1ecab78b646f320ab69147b8a0583e66feec5587ec050eec9dc6bbeab6f27da34fdefb323ab8ff7191148dbc0611f07f4e58dc012d66beccc4d81b8dd8219e21f65fbeedee1aad985933e3b55e7fbee79e7be8b3cf3e0b7877b4d588d9eb0fd961dddfd9bffe4077478ba56976d316bbb3dbbf3eebddd1ec33f67fff550183c284a68080140127278c320d8bd8849d9ee2b36bb95f6e7f97bfc5a8beb986f7b520ad0fe5a5f5a2b4c42c4a88f3c8f45f22ad97d8ab0cab1acaa8a4760b7fc903bb9e7ccac81934baf7a17895a10449b7261526dcdd0d5291f40dcfe646420f7941203801a7fd2a788b22bc3b5ae799057b3de1ebeb1ea375a59f53554329b5b43587d25f256972527a5051d69ef487bda751617a5f2565a210f309a8366151dec30f3fcc3bcfdeedcbde21ecff8cb0f964d0421070070127576e432512d14c587787d8acb8a2611755d417d3b6dd3ff24790dada5a42edbb74bacce41c2aca1e42ec6d4bf969bdf96b0f71800008800008b88380ce8963578422326113a7f6ee90025a090220000220a0838069be15b6099b7846a123a0a8130440000440c03d0474afe0fa930adb844deb887b248096820008800008e82260da04326c13366d4aaf2ba0a8170440000440c05d044cf2afb04cd8b4330977851fad050110000110d049c0a495dcb04cd8a40ee80c24ea060110000110701f019326926199b0495379f7851f2d060110000110d04dc0141f93366193ce20740711f5830008800008b89380292bbad2266c4ac3dd1976b41a0440000440c00402a64c28a54dd89429bc0941441b400004400004dc4bc0043f93326153ce1cdc1b72b41c0440000440c0140226acec4a99b0090d3625786807088000088080bb099830b194326113a6eeee0e395a0f0220000220601201ddbe16b2099b70c66052e0d016100001100001f713d0bdc21bb209eb6ea8fb438d1e800008800008984640f7043364139e387122bdfffefba6f1437b40000440000440202202871d7618bdf7de7b1195116ee6904d38dc0a904f1f81e6e6669a3a752a2d5ebc98121313f53504354b1140dca47019931871332614ae6a084cd855e1926becfcf9f369eedcb9346bd62cbae1861be43223b53602889b36f411558cb845842f6633c384a338f4292929d4d8d848494949fc370e771040dcdc1127ff56226eee8c9bee56c3847547c0a6fad959f9bc79f3b8f9262727d3cc9933311bb689b5ca62113795349d2b0b71738e75b4d504138eb688fed21f71562eba87d9b03b028db8b9234e5dcd82f17d7367fc74b61a26ac93be4d755bcfca4515980ddb045b61b1889b42980e1685b839083b0aab820947615099e17a3c1ecac8c8a09292122a2c2ca49a9a1a62776f36353545618fa3a34b889b3be388b8b9336ea6b41a266c4a2414b5e3edb7dfa62953a6d0030f3c40679d7516892dd99e7aea29baecb2cb68c992253469d22445b5a1185504103755249d2d077173967734d606138ec6a85afaa47b5fd428c76b5bf71037dbd0da5a30e2662bdea82c1c261c9561fdb5531814dc1960c40d71732701b45a96004c589698cbd263307759c07e692ee286b8b993005a2d4b00262c4bcc65e93198bb2c60306177060c717375dc74361e26ac93be0375c3841d806c4315889b0d501d281271730072945501138eb280fa770783823b038cb8216eee248056cb128009cb1273597a0ce62e0b189635dd1930c4cdd571d3d97898b04efa0ed40d137600b20d55206e364075a048c4cd01c85156054c38ca028ae5e8e80828067377c611717367dc74b61a26ac93be037563507000b20d55206e364075a048c4cd01c85156054c38ca028a997074041483b93be388b8b9336e3a5b0d13d649df81ba31283800d9862a10371ba03a5024e2e600e428ab02261c6501c54c383a028ac1dc9d7144dcdc19379dad8609eba4ef40dd18141c806c4315889b0d501d281271730072945501138eb28062261c1d01c560eece38226eee8c9bce56c38475d277a06e0c0a0e40b6a10ac4cd06a80e1489b8390039caaa800947594031138e8e80623077671c113777c64d67ab61c23ae93b503706050720db5005e2660354078a44dc1c801c6555c084a32ca098094747403198bb338e889b3be3a6b3d530619df41da81b838203906da80271b301aa0345226e0e408eb22a60c2511650cc84a323a018ccdd1947c4cd9d71d3d96a98b04efa0ed48d41c101c8365481b8d900d581221137072047591530e1280b2866c2d111500ce6ee8c23e2e6ceb8e96c354c58277d07eac6a0e000641baa40dc6c80ea4091889b0390a3ac0a987094051433e1e80828067377c611717367dc74b61a26ac93be037563507000b20d55206e364075a048c4cd01c85156054cb88b804e9c3891de7fff7dd787fbb0c30ea3f7de7bcff5fd88b50e60307767c4a365dc504d1fe350d74461c25db0c120a8fa6b88f26408407f32b490d67402d0334c585aa3108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384838a70e9d2a53465ca145ab060014d9d3a958468162f5e4cd3a74fa7175e7881264f9e1cb41c2400817008407fe150431e530940cfa14726ceebf57a434f1edd29535252c8e3f1506a6a2a95969652414101d5d7d7537373333536364677e7d13bed04a03fed2140031412809e43830913b670baedb6db68f6ecd9d4d4d4e4fb6b525212cd993387aebbeebad088221508844900fa0b131cb21949007a0e2d2c30613f4e6c16dcd0d0e0fb6b72727287ff878615a940203c02d05f78dc90cb4c02d073f0b8c084fd1859cfde300b0e2e20a4504b00fa53cb13a5e925003d07e70f130ec0489cbd61161c5c4048a19e00f4a79e294ad447007aee9e3d4c38001f76f6366bd62c9a3b772eae05ebfbeec66ccdd05fcc863e2a3b0e3dc384a585cdee863eefbcf3e891471e21b6248d03049c2400fd39491b75d94d007a5664c237fde742bb6385f235139879ecc39a5bd075f5d09fb1a151d63093f5a7ac93bf14043dab266a5e79a1ea39e4e568269a93f79f6e5e4fd12225045efa7c01852a1a25154a1602fd4902735972d3f5a71a27f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e63d6845bbd2d54d7541556e4d293b2293ece13565e5333c98846471fa26dd082fe3aaac874fda9d63cf4fc2bd1581f4f63ce84d9e0f7f9b6d76875f187d4dcd618d6772b29218546f5fc2d8d2b3a96e22921ac324ccb64fa20182d8316f41758f9a6eb4ff5f7157afe9568ac8fa73167c2effefc04ad2bfb4cc9776aef1e13e8d081672a294b7721a60f82d13268417f306146007aeeac83581d4f63ca847754ff40afacbd57a9dffd61afaba857c660a565ea280c266c3f75e8af6bc6a6eb4fb53aa2c184a167357a8e1913f67abdf4c277f3a9ac6e9bd2ef5361fa003a69c4351447714acb75ba30d30741b70f5ad05ff78a365d7faabf8fd07360a2b1389ec68c097fb7eb63fa60e333217d97d213b3a9c5db4c8d2d7521a53f7cd0d934ace0a090d29a9ac8f441d0ed8316f40713b612809ebbd643ac8da73161c28dad75f4ec3773a8bea526a807f6cf194e7f3de8ffa8a9b59ee67f700eed6e2c0b9a272d319bce18358712139283a63535014cd8bec8407fc1d99aaebfe03d904be16613869e83c75a46cf3161c29f6c7e895615bf13905c5e6a2f62b7c86fa95ac73f3f6cd0143a79efcbf8bf1f5c710d7dbf6b055f6a1e5ab01f6ddbfd23d53455062c674cefc97460df138347c7d01432a2d1d105370f5ad05f70c598aebfe03d904b013d633c158a897a13ae6c28a6e757df4c6dded64edf92bd0b0fa273c6cea1a48464ba67d925b4b1f2bb0e26fcd067d7d277259fd221fd4fa0d3f6b982763796d3a215d7d296ddeb3b959510e7a1d347cda2ace402b96fa321a94d1f04dd3a68417fa109dc74fd85d68bd05341cf184f63c6845f5fbf903657ade9f4edd8236f1fbaf4c07bc8139f484d2d0d74c747e75371ede68026ccccfa82fde7537c5c3cd53655d19d1f5f446575db3b953928671f3a6acf8b42ff261a94d2f441d0ad8316f4179ac84dd75f68bd083d15f48cf134264c7873d56a7a7dfd839dbe194909a974e361ffa4dcd442aa6dda4d0f7c7a056dddfd43a7e5683113661f8cec7930fd65bf9bc813efa19fcb57d3bd9f4c0bf88d3b7ef8742aca1c1efab7d19094a60f826e1cb4a0bfd0c56dbafe42ef496829a1678ca7516fc26cf979c9ea9ba9a2a1b8d3b7e2883dcea413f6ba80d863230f7dc6aefbfeba7987f59ab0d584592113079d4a27eddd6ebe8f7c7e037d53fc71a7b2f352fbd0a97b5f4f7171f1a17d1b0d4965fa20e8b6410bfa9313b6e9fa93eb4df0d4d033c6d3a837e16f8adfa1659b5f0af86d983df1192a482fa235c59fd2a2cfafed90a63b1366cbd1330f7b9a0ad2fbd09ae2e5b4e8f3bf052cff37034ea39185bf0dfe4d342885e983a0db062de84f4edca6eb4fae37c15343cfc42fef613c258aca1bb31a9a6be899d5b3a9b1a5bed3b7213fad37cd39fc39fef7c7bf9c4b5fed7837641366097f3ff45c3a7ae8547e1df9eab77e1ff086af644f3a9d396a0eb1df6e394c1f04dd3468417ff2aa375d7ff23dea3e07f4dcce07e369949af0f22d2fd1d73b033f92b4578f03e892f1777201cc7df70c2af5db41abbb9930cb33b2f060baf0805b79fed9ef9c46e5f53b037edbf6eb73241d507482eaefae6de5993e08ba69d082fee4656abafee47b143d260c3dcb475f46cf5139137ee9bbdba9a476534072a37b1d4ae78dbb897f76fdff4ea4eaa68a0ee926f43f8e4edfe72afeb7fb3fb99c7e2cffbac3e743f246d3e5072fe07fbbe5fda9b4b36663c07afa64ee41270cbf523e7a9a72c888464713dd64c2d09fbc424cd79f7c8fa2c784a167f9e8cbe8392a4df85fdfdf493b6b360424b767fe189a7ed07dfcb3db3efc0bdf80c37a247bd2e8a411d3a8aeb99a5efdfeefe4a5b60e9f8fed7d389db3df6cfeb71b96fe813f3b1ce828ca1c4ac70fffab7cf434e590118d8e26bac984a13f798598ae3ff91e458f0943cff2d197d173549af017dbfe439f6f7f232039b62ff4ad935fe1772fbfb87a017db031f0cd5b5d613f75e40cfacdc013a9bab182ae5fdaf50e59e3fb1e4f637b1f251f3d4d396444a3a3896e3261e84f5e21a6eb4fbe47d163c2d0b37cf465f41c9526dcd4d6c0f78aae6bde1d90de8c8317d2e0bc91b4b37a33ddfae1546af3769ced76853c2d318be61cfe2ca52666d0f2cdafd333dfdc11306946520e9d3e6a3625c6bb672f6919d1c84b32f21c6e3261e84f3edea6eb4fbe47d163c2d0b37cf465f41c9526cc90adddf509bdb7f1a980f4c6f49e48e7ee37877ff6fabac7e8cd1f16874479ea989934aee808f27adbe8f68fceefb4942d0af9dd1e7fa6a179078454a629896444a3a3cd6e3261e84f5e21a6eb4fbe47d163c2d0b37cf465f41cb526ec252fb11b0a76d56e0e48f0b203efa3a10563f8861d2f7fb790dedff04297a4e3e312e8e41197d1a183fec0d37cbce9557afedbbb03a6ef953188feb017bbb1cb5def1796118dbc2423cfe1361386fee4626ebafee47a133c35f48cf154a8246a4d98757067cd4ff4afef039b6556723e5d31e141ca4febc559acddf505fdefc7a7e8c7b255be9bb1d8bed2230a0fa4a3f79c4a7db3f7e4e93654aca1ff5b3e839adb1a037ed34e1e710d15a60f0cfe2d342c85e983a0db062de84f4ee0a6eb4fae37c15343cf184f63c2845927dffef931faa1ec8b80df8adc94423a7fff5ba85ff650dfe70d2d75545eb793efe6c236f6b0be2398edb0f5c4ca79d4d0521bb0bce10507d2c4417f0afe0d343085e983a01b072de82f74a19baebfd07b125a4ae899f88e85184fa374b30eebd7a0a6a9829efb762e35b73505fc7624c427d2c441a7d0e1834fa3cce49c80694a6bb7d39b3ffc93566c7d9388bc01d330b3fee3a839c4eebe76e361fa20e8d6410bfa0beddb60bafe42eb45e8a9a0678ca7313313661dfd72fbebf4d9b6d7bbfd86b0f701b3678807e4ee45d9c9f9fce6abf28612da50fe2d5f8266d7f8ba3bc6f73d81c6f63e32f46fa161294d1f04dd3a68417fa109dd74fd85d68bd05341cf184f63ca845bda9ae8d9d5f3a8a68b8d3542ffea044e99955c40a78f9a45ccc8dd7a983e08ba79d082fe827f2b4cd75ff01ec8a5809ebbe6156be36954df98650df38fe55fd0d29f1e93fba68498faa82117d2a0dcd121a6363399e983a09b072d1671e8af7bdd9bae3fd5df5ae8b96ba2b1369ec68c09b390ff7bed3db4bdbae33695917eb9fa660da5e386b9677bcaaefa6bfa20e8f6410bfa83095b0940cf81f5108be3694c997069ed667ae1bbdbbbbcb94ad690e3289e4e1d793de5a5f691cd6a5c7a98b0fd2181feba666cbafe54ab231a4c187a56a3e798326186ec93cd2fd2aae28eef100ef70b36b6f7641adfb7ebfda3c32d57473ed307c16818b4a03f3583968eef87ea3aa1e7ce4463753c8d3913667739af2e7e9f5615bf43d561dea8c536fa18ddeb081a5978a8eb76c6c272b4eae154ae3ce82f302fd34f02e5a21c3c75b49830f41cb99e63ce840532b6a96457cf0e07fb0a79e293822571dde7a60f82d13268417f910f5aaefb72056830f4fc2b94581f4f63d684a3e18bacb20f3061953451962c01d3f527db9f60e9a3cd8483f537d63e97d1334c38d6d4d1457f6544a30319062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a3676d26fc9f97fe43d74efb1b27f7e4ab4fd2d803c6f07f3f74cf227ae08e0768d8dec3e8ee87efa28af24a3afbf8b33ba4310b7768ad69a86fa0db67dfc1135f3bf71a4a494d0998f1abcf566ae9af8c6842ebb1da54aa072de80ffa53ab50b9d2a067395efea9a3693c35c2842fbde652baf88a8b48805df2cf253e131e34645064d142ee9008c4b209437f2149c4d644a6eb4f75e7ed3461e85975b4e4cb93d1b376133efa84a328333b8bcf0e776cdb41575e78150d1e32887efe7143c099f0861f37f034ebd6aceb308b16334826403693164214336b96f8d43f9ddaed2cb4abb495e59574cdb46b69d97bcb3ad429da32e1b707d3b20f3ea1bd47ef4d6c27ae048fc7570f2b73e5e72be9a6bbe7d1a2fb1ef6cd84df7ee36ddf4a8008315b11608775e6ef5ff7ed0b6fa3634f3e565e154172c8884679e5211468d7a005fdfd0a1ffa0b41888a9240cf184f8594b49b3033cba5af2fe586bb66d51a7af5c5d768c26113e8df4bfeddc984993933333c7eca71dc8884c1ddb1f0766edaccbc84f9b20e5a3f67ff6779c7ec3f86cfbafd0feb32706e5e0e37fa732f39878ef8fd111d969199793ef6e0e3bc6dec60e946ef37da67ba6c9993f581b5c95ae739b227dd81000020004944415417ff39e072b430f282c2029e47f4830d88a2bfa2cd762e55c7aa09437fed27b5d1a8bf65cb96d121871c42f3e6cda3993367f2ef637d7d3dcd9831833efdf4537afef9e769d8b061fcef81d22af2db80c5d865c2d0b3fbf4acdd84ffef8905f4dce2e7b9b16ed9b4954a7696d088517bd1b34f3cd7c984999a6fbeee66fe77ff656a7f83123348abe932831406da557e5687f51ab5304966c8ccf8c5ff6fbcf546b29ab5989d5a3fb7ce6a599f025d1316b36f31c3b5f6c37f561cea759070068f583561e8affd1e8c68d45f2c9a30f4ec3e3d6b37e1479eff3b2d7dfd6dee1bdbb66ce366cc0e6196d61bb3b66fd916d4448581fa9b272bb33b13b65e8f1626665d9ef337363668b1e567316316262cca29ec55c8b3b0a56836c3653762f99bb030dc091327f034397939643561fffec284a787737e11308fb8310bfa3b9ba03f65b20ab920bb66c2d0b3fbf4acdd8499d131b3b1de296d351fab09fbcf0cad8a979d09b3a56f51a775095b9835fb8c0d4ed3ae9a4673af99cb97a6fdafc506327aabd917f4c8a731078ced70d319fb9c5dff6607336576139a75e68d9970e071ccae410bfa83fe42764e8509a1678ca7424e4698b030577146fef17b1f079c09fb5f23b5ce6c033dca24734dd85a56efa2debe59ebe5d74da7fb6f5dc07931f30c744dd8dfa0ad378f0983f59fc57ef7edf7fc1ab6ffcd625613c635e15f473d3b072de8efd747e6a03f854edb4d51d033c653a34c58984d51bfa24e46e76faec1ee8eb6ce2a5927ad773cfbcf78fdbf23d6b4e2396576ed38d8ddd1fe262c0c972daf8b65667f137efca127f8b538ebc1da37fe90f1ddde1deddf3f554346ac5e13b6de0007fd417faabe4fc1cab1d384319eb6d377cb78aa6d261c4ca4f8dc5902b166c2ced2456dc10898aebf60ed97fd5cb509cbd68ff4f61290d1334cd8de58b8a67419d1e8e814062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a367d798b0ff1dcad60d0664f0b347305e7bf1b56ef790eeaebc48f3fb97cdeef67ef0ae07e986f937f0cd3a741d32a2d1d146dd8316f4676fd44dd79feade43cfed44319e12b9c284c50028f68c66c1b3eed1eca4794134aa87a3d0cad33968417fa1c528925430e148e8c9e5859ee57885935a46cfae3061365bbcf5c65be9ba9baff3ed192d8474d18c8bf81ece6c363972cc28ba63f61d1d5e83c84c73d13d0f51e9ae32fea285238f9b4c6fbdf63f129b70b0ed25c5f3bad6e788c5a6052c00ecef6c4f6bb65907db6483cda43332d2f98622d619b9ffd69781f6a0666f7f127958d9e2ed4ce1ceecc31148a03c32a25155a74c393a4d18fa93895478694dd75f78bdea3a17f48cf154a8c315266c35b7409b55880d3c261d33896f11c966c95faef8ca679ad6973e8899acff4e58cc5c45badcbc5c6e8ecce0fd5fbc2076ba121bdeb30d3ed8c1ea65ffb69ab57f79d6b73f8974ecf58d588e0e3ec4e91cb4a0bfe0f18934054c385282a1e7879e4367156e4a193dbbc2840508ebec94fdcdfab206eb4c99cd926fb9fe16bae4aa4b88edb8b5e8de451d5e90c066b2c284f71b3f96ef09ed9fc77addd8ba04cd4cd85a9eb8a67bd5acabf8fb828f9b721c8d3d600c09a1b3f2d98b1eac466b9d59b17ec084834b5da709437fc1e313690a99412bd2ba4cc80f3db7df9783f1d425d784037d69ba33b2500c5598b0304d6b1ef672073193666f3ff23761ab410b13664bd6b7dc309fcf9e9909b383cd8cfb0de84b7dfa1575306e6b5d30e1d0864413062d6b4ba1bfd0e2166a2a9870a8a4ec49073dabe52aa36757cc849909aef878055ff215879869321365d784ad3361aba0d84c38d0acb63b13ee2a4fa033377ecdf9de4574d3ddf3301356abe30ea5e93461e8cfc6c0fe52b4cca0657f6becaf017a0e3c138ec5f1d415266cbd094bcc3259b0c43557f695b1bed7d7ff9ab0ac0987724d582c85e39ab0fd0316ab41e7a005fdd91f6398b0fd8c450dd0b3fdac65f4ec0a1366c8fc9fd3b4bee5482c09676465f2f7f3fabfa45cd684d99b93c4f56756cf1fff7c3abf7611e8ee68ebab0865ef8e668f56897eb13e8a372ed92f91ce35c8884647fb749a30f4677fc44dd79f6a02d033c653a129d79870775f02bb37bcb0ce76557f194d29cff44150f7a005fdd9ab54d3f5a7baf7d073fb1325d17ac8e819261c4005feef2cb6ce76211a3d046269d082fef468ccc95aa1e76b88ddf41aad47cc9970b406d2c97ec988c6c97689ba4c1eb474f088b63a4dd79f6aded0b36aa2669527a3e7a898099b85df9dad91118d8e1e62d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a7695098bbb8fd97ecf915ed4b7deccf5f38f1bc27eb39275e38dde45bde9f6d977f876cd324b16ddb74646343afa65c2a005fdd91779d3f5a7bae7d07360a2b1389ebaca84c5ce552c7c97ff6d7a44affe537547b55534ecd126b71ea60f82260c5ad09f7dea365d7faa7b0e3d0737e158194f5d65c2ec51a1f1878ce7bb67b1ed20d99ecfec1083a3ff9b8dd8dd776c66ca5ec2f0ec13cf117b839178f142773361568f78b392d894c3ff3965b64de53917ff9997cf9e4d66cf13cf5f700b3dbf78896f266cbdcbd5ffd9e5671f7b86b7fd8d57fedbe1ad4faabfeca19667fa2068c2a005fd85aa26f974a6eb4fbe47dde7809e2b7d6f9063a462793c758d093313bcffb6057c065c515e412f3ff3324dbb7a1abfcd5d6cace1ff66236192dbb66ce31b61b07c627b4b1678f1e204eb72f4db6fbc4d5b366de5cbddfe2f67102f7bb06e8bc976d7122f8bb02e470f1e32888b2cd09b93c49b9898c18bb734a958628f64a0307d10d43d68417f91a82b785ed3f517bc077229a0e78709e369bb665c63c2d6fd7bd9b5b985772ea493ce3889bf5f58ec372a769ceaca3c5987c54b15ac6f361226ecbf9f74575f2beb127457262cde717cc3fc1bf8b2b9ff7ed6d63731b16d3685f1cb7d95d5a5367d10d43d68417feab416a824d3f5a7baf7d0f3af44637d3c758d095b978845f8c4ccd7fa96233633eeeaf582c14cf8c2bf5e40b3ae9cdde14d48a22effd7288a6d33bb326196cf6ab4ddbdd909261c7c88d33d68417fc16314490a987024f4e4f342cff2cc6472c8e8d915266c9d458a8bf5fed774fddf196c7db39158f6e8ea1dbfc166c2fe1b9eab3873b3ee670d130e2e6f9d260cfd058f4fa4296406ad48eb32213ff47cad6fb213ebe3a92b4cd8fa5624b1d599d518d997eaece3cf26ff371b896bc2ec73f6f2851ddb7604bd26fcf8434ff0efa8b826ccae21b36bcf0bef7ad0271ad69ec71e7c9cee7ef82e0af79a304c586e28d43968417f72b10a27354c381c6ae1e5819ec3e326934b46cfc69bb075f62aee861630d8924ac9ce123af2b8c9f4d2d32ff13fb3bb8dc55ecfecffecee6576d393ffddce5ddd1d2df2b03b9ed9218c9d09f7da697fe37f9b73e76cfe5625f62e637163d5aa2f5749dd1d0d139691b4be5719427f72710a37b5cca0156e1d26e5d37552093d3ba302193d1b6fc2a120f3bf262cf208c131b314ef210ea5bc584c23231a1d7c740d5aa1f415fa0b8552f7694cd75fe43dec5802f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9ea3c284cdc2efced6c88846470f4d1eb474f088b63a4dd79f6aded0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a367291336ab9b688d6a02338f7d587591caca6383168ee82660b2fe5493879e551335afbc50f51cb2099bd745fb5ad4dcdc4c53a74ea5c58b17536262a27d15a16410084000fa832ca28900f4dc7d3461c201f8cc9f3f9fe6ce9d4bb366cda21b6eb8219abe0fe88b0b08407f2e08129a183201e819261cb25844c29494146a6c6ca4a4a424fe1b0708384900fa739236eab29b00f40c1396d2183b6b9b376f1e37dfe4e4649a39732666c3520491381202d05f24f490d73402d073f0886039da8f91386b137fc66c38b88890421d01e84f1d4b94a49f00f41c3c0630610b23eb599bf83366c3c14584146a08407f6a38a214330840cfa1c501266ce1c40cd7e3f15046460695949450616121d5d4d410bbbbafa9a92934a2480502611280fec204876c4612809e430b0b4cf8174e6fbffd364d9932851e78e0013aebacb3282e2e8ebc5e2f3df5d45374d96597d192254b68d2a449a151452a10902400fd49024372a30940cfa1870726dc052b61c2a1a3444a10504700fa53c71225e927003d771d0398304c58ff37142de84400831644114d04a06798b0b49e211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a067987050112e5dba94a64c99420b162ca0a953a79210cde2c58b69faf4e9f4c20b2fd0e4c9938396830420100e01e82f1c6ac8632a01e839f4c8c479bd5e6fe8c9a33b654a4a0a793c1e4a4d4da5d2d2522a2828a0fafa7a6a6e6ea6c6c6c6e8ee3c7aa79d00f4a73d0468804202d073683061c2164eb7dd761bcd9e3d9b9a9a9a7c7f4d4a4aa23973e6d075d75d171a51a402813009407f61824336230940cfa1850526ecc789cd821b1a1a7c7f4d4e4eeef0ffd0b0221508844700fa0b8f1b729949007a0e1e1798b01f23ebd91b66c1c10584146a09407f6a79a234bd04a0e7e0fc61c2011889b337cc82830b0829d41380fed4334589fa0840cfddb3870907e0c3cede66cd9a4573e7cec5b5607ddfdd98ad19fa8bd9d04765c7a16798b0b4b0d9ddd0e79d771e3df2c823c496a47180809304a03f2769a32ebb0940cf3160c2cd4d2d545fdd4075d50dd458dfc87f37d53753435d1335d635f2df49491eaad8b59b5a9a5aa9a5b9855a9ad9ef56ca2ec8a4b21d15e46d23624f6bf19f362f15f6cba7922d6514171fc79f19e63ff144057df2a8aa7437257812c893e8214f12fb9d40997919e46d6ba3e4b4644a4e4da2e4b4244a494da294f4244acd48a1d4cc144acb4ce17970441701e82fbae219ebbd819e9d55802b96a32b4b775375592d5557b09f3aaa2eafe1ff6e6d6da38a9d55c49e744e494ba2e4f464caed91454c441e6692491e4a4cf650629287925292283e3e8e9b6782279e121212289efdf6c4fb4c96b8d992efff565366611106cdea6d6d613fadfc775b6b2b6f4b734333af9bfdb436b7526b5b2b35b213817a7632d0440d758d14171f4f7d87f4a4a6c666cacc4da7ccbc74cacc69ff9d959fc1ff86c32c02d09f59f1406b2223003d47c64f756ea34cb87c67159f95966eaba48ae22aaadc554dbbcbaa29a7308bcf20d98c32252db97d66999ec267996cd6e9a6d9259b853343aeaf6da0fa9a46fe9b99337989f7bda1b6919b714e8f2c2aec9fcfff9ddf2787f27a66ab8e3dcaf32300fd417fd1f4a5809edda1676d26cc4c76e7c652aa2aada6cdeb7650f98e2a3e0bcc2ac8a0f4cc344acf4ea38c5f7ed89270ac1c6dad6d54bbbb8e6aaaeab821579555ff32f3afa3bcded93460af22caca4ba79e030b60cc118802fa0b0c0ffa8b40541ab342cfeed5b363265cb6bd92b6acdf413b36eca26d3f96506a7a329fe1b2191e33dcacbc0c8a8f8fd72863b3ab6e6b6ba3eaf25aaad95dc757092a4aaaf875f0a2213da9d7a002ea37ac3715f4c935bb131a5b07fd45061ffa8b8c9feadcd07364444dd2b3ad26fcf3b75b68eb0fc5f4d3aacd7cd9b8a02897f27ae6f0ebb689c9899151446e7eed99dd6c56b1b392766d2be7d79e07ee5d44034714d1a0917d639e10f467af04a03f7bf9fa970e3ddbcb5b979e959bf0e6b5dbe9fbcf7ea60ddf6ea55e030ba857ff1e94df27979b300e7b09301366665cb2a5948a3795d21ea3fbd3b0fd0751bfa1bdedadd8a0d2a13f7dc180fed4b3879ed5330db544a7f4acc4849b9b5be89b0fd6d1ea4f7ee04ba26cb6db7b500f2c2f871a6d1bd2b16b7bdb37945075450d156f2ea35113f6a491870ce5778a47db01fd9917d158d29f6afad0b36aa2919767a79e233261f63cedf2ffaca42deb77526e8ff69b86d89dcb38cc2250575d4f9bd76fa79aca3a2a1a5248e38f1e6d5603c36c0df417263887b345abfe5463849e5513b5a73cd57a0edb84d77db981be5cba9a7a0f2ca43df619604f6f51aa72023faeda489bd66ea30927ec4743c70e545ebe5305427f4e91565b4fb4e84f2d1522e859355167ca53a1e7b04cf8eda73fa186da26dae790e1cef414b52825c0ee0cfcf6e37594919746134f1dafb46c270a83fe9ca06c5f1d6ed79f6a32d0b36aa2ce9617a99ea54d78c9ddffa5c1a3fa5361df7c677b8ada9413d8f8dd16aaaeaca563ce3b4c79d9761508fdd945d6f972dda83fd594a067d544f59517ae9ea54cf8c3973ea7b48c34beaf328ee8205055514d3b37eca249671d6c7c87a03fe34324dd4037e94fba73413240cfaa89ea2f2f1c3d876cc2ab97ada72deb76d2de070ed5df53b4402981d59faea78123fad0880387282d576561d09f4a9a6695e506fda926063dab266a4e79b27a0ed9849fbfeb0d1a317e4fcacecf34a7b7688912026cebd0b55ffe44a7cc384a4979761402fdd941d58c32dda03fd5a4a067d544cd294f56cf219bf03fe7bd42874d39d09c9ea2254a09bcffe2a7f4a759272a2d536561d09f4a9ae69565bafe5413839e551335ab3c193d876cc20f5df52c1d72c238cc84cd8ab592d6b0579b2d7bf54bbaf8ae3f2a29cf8e42a03f3ba89a51a61bf4a79a14f4ac9aa839e5c9ea59ca84d9f687782cc99c60ab6ac9aa0fbfa7ad3fee34de84a13f551137ab1c37e84f353166c2d0b36aaa669427ab6729131e3caa1fe5166653af013dcce82d5a1131811d1b4af8eb247ffa76b3f1260cfd451c6ee30a708bfe548363260c3daba6aabfbc70f42c65c2c79c3b9196bdf625edb14f7f18b1fe7847dc829d9b76117b33cbc1c78ea5d71f7bcf781386fe220eb95105b8497faac13113869e5553d55b5eb87a963661d6cd6f3efa9e5a5bdb68df4347505c7c9cde9ea37669026c8797afdfff8ebf4e72d484613cbf5b4c18fa930eb77119dca83fd510850943cfaac93a5f5ea47a0ecb845937b7fd544c6cdfccde830a69e89841cef71c35864560dd573f53c9e632da63f400ea33a8d057869b4c18fa0b2bf4466472abfe54c3b39a30f4ac9aae73e5a9d073d826ccbae9f57ae987951ba9646b19e5f5caa181c38b282d2bd53902a8292402b5bbebf94b1bca7654f0f73b0fd97700c5c5755cc1709b09437f2185de8844d1a03fd520fd4d187a564dd8bef254eb39221316dd64d3f18d6bb6d2c6b5db28bf570ee5f7cea5de037b508227c13e1228b95b02ad2dadc46e1228dd514115c555346078110ddcbb6f97ef7876a309437fe67e09a24d7faa49073261e859356575e5d9a96725266cedeaae6de5b4edc79db463e32e2ae893cb97ab0b7ae7524a7ab23a2228292081fada062adb5149db7f2ee1b35ec6beef905e3c0ec10e379b30f4172cbace7c1ecdfa534db03b13869e55d30eaf3ca7f4acdc84addd2dde5cca67626c469698e4a1823e79dc10720bb3282925293c32c8e523d058df44ecc1f0d26d1554baad9c5a9a5ba9f7a01e9c7161bf022952d162c2d09f54d8234a1c4bfa8b085480cca19a30f4ac9a7cd7e5e9d2b3ad266ced6e75452d956e2fa7f2e22a3e5b4b4cf6f0678e0b7ae7507a761a65e56560f9ba1bbdb1e590dde535545b55cf395694eca696e616bef4cf4e6a0a8af22833273d6cc546a309437f61cba153c658d79f3a92ed258563c2d0b3ba2898a467c74cd81f5f6d551d559454b59bca8e0a6e30a9e9c994d3238b9b32fbc9f8e5774242bc3afa8697c41efd626c6aaaeaa8b692fdaee59b69d4d736f2131536cb656c98f1a667a529eb4db49b30f4179a54a0bfd038459a2a5213869e438b801bf4accd84032164c6c3ccb89acff87e31a2aa3acacccd204f5202a566a4506a7a4afbef8c647e9d393925893fefea96a3b9b1991a1b9aa8a1b691ea6bd84f43fb4f6d03353534f37efb4e4072d2282b278332f333f809899d47ac9930f407fdd9f97d0a56b66a13869eddab67a34cb82be1d65537505d75bdcfacda8dab91da5adba8bab296d8d242726a12ffc92ec8a4d6e656bedc9d9894f8cb6f0f25a526517c5c1c5ff28ef7c4f3df09ec77423c7f5c876d3ac27f8b9ff838f2b679f96358be1ffe7fa2d6d6566a6d69e3f58adf2c4d537d133537b55073630b353735f3df09890954b5ab9a1b2fbbe6c0ea65335a560f3b91683fa1683fb948cb643f7a1ef18209773d6c427fc12c25f2cf4dd75fe43dec588213268cf1d41de3a92b4c38d8178099313338f6c3ccafb1bedd0085113263f42426f0255e669c6d1603cdc849a3cad2ea4e869bd73387ca8b2b3b19734e8f4caaa9a86b377061e49e043e536d66e69fe4e97002909c92488929897cc6ce4e12e20d5d5a377d10d43968417fc10844feb9e9fa8bbc87e69870b0be603c0d4628f8e7327a8e0a130e8e0429821190114db0b2ecf8dc6413b6a3bfb156a6e9fa531d0fe8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dbbce84173c742fddfdc01d1d889f79ead934ebdab99492127cb7a92fbefa8cb66edf42271e7b7297516b68a8a779b7cfe69f875aae5912906f8d8c68e44b8f3c87298316f417792c039560bafe54f71a7a564dd4acf264f4ec4a13fe62e56774ff1d0b2937278f2a2acbe9f26ba651dfa27e410df3a70d3fd2a5575e44179e7b314cd84fb332a2d1217793062de84fbd024cd79fea1e43cfaa899a559e8c9e5d6fc20c3d9bdd9e7cf609f4d293ffa671630fa057fef3125d7eeda53c2a2386ed4d0fdcbd88f272f3b8597fb0ec7dfef72b2fbd86a65f3c83ac339bdf4e388c9b7b6a4a2a9f0957d754f3b4afbef18aaf9c3d060de17f0b948f9d1408a3ff6edd1a9e4eb4c9da4ef66f5117cb63c221231a1ded3575d082fed4a8c174fda9e9e5afa540cfede332c653a2a83061eb0c77d4dea3e9be07efa67937dcc2156f9d256fdbb1adc34c9899f7cbafbdc867d0e2b3a3271d43179c731137e195abbeea60e062b6bdfabb6fbbcdc7ea6565fefdf14524664de515e5beba8f3ae2f7c62d779b3e089a3c68417f915b94e9fa8bbc871d4b809e7f5dbd8cf5f134ea4c585cebb5ce86c535637f13165f0bebac96cd9085090b3365d79a59790f3ff65097676fd67c4f2f7992fcaf53fbe767ff7ff9d5177dcbeaaabfe4b2e5993e08ba65d082fe6495d79ede74fd85d7abae7341cf184f853aa2ce84fbf6e9c797a699095e7df9dfe8cefb6fe37db5ce76c5356161d4cc40cffee3543e6b1e37e680a026fced9a557cb9db3f1f5bde164be302b03063362bf6bfa14c2c958b2519d55f7499f24c1f04dd3268417f32aafb35ade9fa0baf57ee3761e839bcc8cbe8392a4cd87a4df89315cb7c4bc0e2da6e2013f65f12ae6fa80fc984ef9e7f3f3df5fc629fb15bf331131687b8618c5d83befff607f89ffd67d2e185d79e5c32a2b1a705dd976ab209437f912bc274fd45dec38e2540cfed33618ca751704dd8ff71a237df7ec367761515e5be5971a099305b8616d76c3ff8f83ddfec562c47b365657663d51e838774b8b66cbdd66bcd679d4d5b67c5ac8cdcdc3c5c138e60243375d082fe2208aa252b4c580d47d952ac6320bb49147a96251838bd8c9e5d3913eeee3961eb0c942df71614f4a038a20e773d8b6bb6679d3695aebcfe726277328bb4fd8afad135975f4777dc7f6b87bba3ad77335bef80b6e6b31abdb83b5adc85cd42655daac6ddd1726237c984a13fb9d885925a66d00aa53cd3d340cfed4fa2f83f51128be3a9eb4cd8f42f975bdb67fa2068caa0e5d6f89ade6ed3f5a79a1ff4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac4490987d00000a2d494441549aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e8d995262cee809e7ed10cbe57b438d8e61b9bb76ce67b428b5bedd99dd0ecf0dfc18adda9cc9e293e78fc04fe1893f52e66965ed4c1fe2deee2531166d1ae938e9bd2a1ed2aca8ea40c19d144524fb8794d1ab4a0bf70a3d8753ed3f5a7bac7d0b39a3df3a3613c8d5a136686cc0eb68da008d401fb8df7bd3d893d1fc70c989beca27b29273b87ef372d5ea8c04c3ad0df23fd324683682265104e7eb70d5ad09f5c9461c272bc54a60ee5a4127a96232ea3e7a835617f644c449f7db9826f5fc98e7b16de45a79df447621b7ab09738646464d2e48947fa66a7cca40b0a0a68f9679fd0f557cda4ff5b741f5967afc2c4478e18c55fc62066dc6c772cfffd83d9b36f6c230fb651b978061933613951bbcd84a13fb9f8ca0c5a72259b991a7ac6782a94193326cc4c931d6ca99a6db6f1fccbcfd215d3aee2c6c84c989969696929ff9c9d19b23da799512e7ef6713e43663b6389a56ef139db9bbaabbfb3b726cdb97526cdb9ee262aea5de47b6b124c38bc41d1ed8316f4d77ddc61c2e17d2f54e40a6526ec5f0ff4ac4ecfae3661f16e602b0eff6bbbec33b6b4bc60d1bdbe6bbbd6a515f13ac3334ffb132dfac7426eb83ffdfc23bf5e7ccc51c7f95e8bc84cd56adcec7366d8d6ebd0d6765867deec2d4ca21e987078c38689260cfd8517cb40b960c2ea58ca9664dd65d03f2fc653599aede965f4ec6a13eeeec62c818e99dfcc9bafeff40a42763d98ddd425cc91cd6a1ffac742be44fdfa9baf51ff7efdc9fa6e62f63208b184cd3e17f9593dd65721b27da259b9fee60c130e4fcc229789260cfd4516536b6e99414b5dadfa4a829e319ec6c47274a077f65a9792d94d58c21cd9b562f6f287d2b2325ab57a25fdf5922b39a3fb1ebcdb77c3162b8f7dfef3c61ff96b12c54d5c02262b7bd62d37f0bcec7587e21a3466c2910f766e1cb4a0bfd0e30e130e9d95ea94a12e4743cfa19397d173d4ce84fd97a0ad3363b1942c96aad9356166c2ecfab07817b1781983d584c58b1b8e9e740c5f8a16b360366b663763590d9e2d5f5f7ae54574d38df3f9f56676f3163bb01c1dba90ad29dd66c2d09f5c9c65062db992cd4c0d3de7f17b73d81819ebe369d49ab07589587c0dd9b3c2fbee33969212137d77305b67c2e2ddc0271d3f857fce446235e1408f17f95f4f11cbd1c2e099a9b3835d5bd959b203261ce698e8b6410bfa930b344c588e97cad4a1cc84a16739e2327a76a509cbe15097dadf94654ab69a3d5b9e36ed90118d8eb69b64c23afacfea84fe7491575f2ff40c3d0b55c18443fc7e8977015b67ba2166e5c960c232b43aa78df5410bfa8b4c3fa6e5869e3fe397fe309e12c1844dfb766a6a0f66c29ac0a35a4ec074fda90e53ac9bb06a9ea69527a3e7904df8e5fbff47e326ed635a5fd11e45043e5ffa0d9d7cf96445a5a92f06fa53cfd4a4124dd79f6a56d0b36aa2669527a3e7904df8f9bbdea011e3f7a4ecfc4cb37a8bd6444ca0b27437adfde2273af58aa3232ecbae02a03fbbc8ea2fd70dfa534d097a564dd49cf264f51cb209af5ef6036d5abb9d461d34cc9cdea2254a087cbb6c2d0d1ad997461c34444979761402fdd941d58c32dda03fd5a4a067d544cd294f56cf219b30ebe2c7fffa92925292a8d7801ee6f4182d8988c08e0d25d4dcd242879c3036a2729cc80cfd3941d9d93adca43fd564a067d544f597178e9ea54c9875f1857bdfa401c38b60c4fae31d710b766eda455bd66fa7932f3f32e2b29c2a00fa738ab4fdf5b8517faaa940cfaa89ea2b2f5c3d4b9b30ebe23bcf2ca7daddf534fa90bd282e3e4e5faf51735804dadada68d5476b292b378d269e7e605865e8cc04fde9a41f79dd6ed75fe4043a96003dab26ea6c7991ea392c13665dfc61e526fafcad6fa867ff1eb4e7be039ded356a0b9bc0fa951ba8745b398d9b3c8a86ecdb3fec72746784fe744720bcfaa3457fe1f5beeb5cd0b36aa2ce94a742cf619b30eba2d7eba5cfdffc9636acde4ad93db268e0f0224acb326f372867c2616e2d6cd562d3da6d545152454346f7a7719347525c9cfb5730a03f7335676d59b4ea4f357de85935517bca53ade7884c5874b1ada58dbefe702dad59f603e5f6caa6bc9e39d47b600f4af024d84301a50625d0dad24aec2681b29d9554b96b378d9cb0278d3e7438c527c407cdebb604d09f79118b25fda9a60f3dab261a797976ea5989095bbbb875fd4efafeb39fe8e76fb75261df3cea39a00715f4cea594f4e4c849a0846e09d4d73650d98e4a623708b025e74123fbd18803f7a0a2213d63861cf4a72fd4d09f7af6d0b37aa6a196e8949e959bb0b5831bd76ca3ad3feca09f566d214fa2870a8a72f92c39b7308b3fea842332028df54dc41e0c2fdf5949bbb655506b730b0dd97700f5ddb3270d18511459e151901bfab33788d09fbd7cfd4b879eede5ad4bcfb69ab015597971156d5db793b6ff5c42db7f2aa1c4640fe5f6cca6bcc26c4acf4ea3acbc0c2c5f77a331b61cb2bbbc866aabeaa9bcb8925fdf6d6e6ae1b3dcde837a50bfa1bd384f1c8109407f912903fa8b8c9feadcd07364444dd2b36326ec8fac725735156fda451525bb69ebfa62be8c9a9699c26ff04acf4ce5c69c919dc67f2744e175ccae24d4dada46b5557554535547b5957554bbbb8eaacaaaa9bea681f27ae570b3cd29cca25e030b28bb005b8886fb5584fe029383fec25594de7cd0b37bf5accd840321ab2cd94da53b2aa96c5b059517efe63714ed2eaba1acfc0cf22426506a7a0aa5a425536a460aa56624f3ebccc9294994989ca8f71b20517b73633335363451436d23d5d7b09f06aaaf6ba486da06629f5557d451767e06651766515ecf2ccaef934b057d7228a74796442d481a0e01e80ffa0b4737a6e6819edda167a34cb82b31b365d8dd65b55453514bd595b5545d5e4bbbcb6b892d295414efe6d74293d393b941b359624b630b376d761d9a2d7b27267928293589e2e3e2f89277bc279eff4e60bf13e2f9e33a6cd311fe5bfcc4c791b7cdcb1fc3f2fdf0ff13b5b6b6526b4b1baf5ffc66699aea9bf8127173630bb534b39f564a4c4ae0b3fd86fa266aac6da484440fe5f7cea6b8f878caca4ba74cf6939b4e1939e9fc6483fd0d875904a03fb3e281d64446007a8e8c9feadcae30e1609d6666c8669475d50dd458d74875d58dc42eb2b39f869af67f7b923c7c66ddd2d4cacd5198249b75b2a5706eb4cc647f31de1e7df369d7d6b25f0dfa1793ceef9dcb978785c97b92dacd3ea74726b534b5f01381e4f4244a4e4dfafff6ed200540180602a0a72afdff83c5de45161641999b5092ca34b05470dbe758b7f6638ef5a9fd7af6dbd6d3697e6fddfc7defccbcf1bd80797e773a7e11c2ef92d98d000102040874048470c751170204081020100b08e1984c010102040810e80808e18ea32e0408102040201610c23199020204081020d01110c21d475d0810204080402c20846332050408102040a02320843b8eba102040800081584008c7640a081020408040474008771c75214080000102b1c009f0d85e2e8a834b040000000049454e44ae426082); +INSERT IGNORE INTO ORDINE (`id_ordine`, `data_ordine`, `urgente`, `ragione_sociale`) VALUES (1, '2020-12-13', TRUE, 'dottore'); +INSERT IGNORE INTO RIGA_ORDINE (`id_prodotto`,`id_ordine`) VALUES (1, 1); + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/update.xml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/update.xml new file mode 100644 index 0000000000000000000000000000000000000000..224a9d86fa6bc0a4a38758d986c56ad83280fc8d --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/db/liquibase/update.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/logback-spring.xml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/logback-spring.xml new file mode 100644 index 0000000000000000000000000000000000000000..22ae3061aa0f1c33939400923fc6dadd078f6cf6 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/logback-spring.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + %d{ISO8601} [%thread] %-5level %logger{35} - %msg %n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDconfigPaPfUoH.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDconfigPaPfUoH.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..91670f4ae38bdf00efe02026310eec0da314e1cc --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDconfigPaPfUoH.jrxml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band height="50" splitType="Stretch"> + <image> + <reportElement style="ImageLeft" x="0" y="0" width="130" height="50" uuid="79c0050a-6efd-3db7-90ad-018dd464a978"/> + <imageExpression><![CDATA[$P{REPORT_DIR} + "/images/" + $R{jasperReports.logo}]]></imageExpression> + </image> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Title" x="130" y="0" width="295" height="30" uuid="ca96c0ac-fcf5-3541-b7ac-e86070619cf7"/> + <textFieldExpression><![CDATA[$R{dconfigPaPfUoH.jasperReports.title}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="SubTitle" x="130" y="30" width="295" height="20" uuid="6dcc62eb-a64a-37fb-9bfe-5c73d0523d57"/> + <textFieldExpression><![CDATA[$R{dconfigPaPfUoH.jasperReports.subTitle}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Date" x="425" y="0" width="130" height="50" uuid="d885da46-eddd-3ef2-bcb0-1df558b21ccf"/> + <textFieldExpression><![CDATA[new SimpleDateFormat($R{jasperReports.date.format}).format(new Date())]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDconfigPaPianiFerie.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDconfigPaPianiFerie.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..393961586a763a05e8c68e2bded1f23d3d3de8af --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDconfigPaPianiFerie.jrxml @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="50" splitType="Stretch"> + <image> + <reportElement style="ImageLeft" x="0" y="0" width="130" height="50" uuid="8e4bac62-372a-3e91-a408-3e10f1dd315a"/> + <imageExpression><![CDATA[$P{REPORT_DIR} + "/images/" + $R{jasperReports.logo}]]></imageExpression> + </image> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Title" x="130" y="0" width="295" height="30" uuid="982407ef-e14d-346c-a60a-2f203973488f"/> + <textFieldExpression><![CDATA[$R{dconfigPaPianiFerie.jasperReports.title}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="SubTitle" x="130" y="30" width="295" height="20" uuid="d5a0fdab-8831-3b81-8656-eeb0574aba2b"/> + <textFieldExpression><![CDATA[$R{dconfigPaPianiFerie.jasperReports.subTitle}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Date" x="425" y="0" width="130" height="50" uuid="ac9a9a08-b8f3-3cef-a0bb-b8f3170d2909"/> + <textFieldExpression><![CDATA[new SimpleDateFormat($R{jasperReports.date.format}).format(new Date())]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDpercAutPianFerieH.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDpercAutPianFerieH.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..6e978b7f089981c5c8ec3438ee7a2e8b785877da --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDpercAutPianFerieH.jrxml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band height="50" splitType="Stretch"> + <image> + <reportElement style="ImageLeft" x="0" y="0" width="130" height="50" uuid="cf8287a5-6c80-38bd-bfc1-ab1062626621"/> + <imageExpression><![CDATA[$P{REPORT_DIR} + "/images/" + $R{jasperReports.logo}]]></imageExpression> + </image> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Title" x="130" y="0" width="295" height="30" uuid="0bc08f9b-b56f-34fd-9831-96c525d3cd5d"/> + <textFieldExpression><![CDATA[$R{dpercAutPianFerieH.jasperReports.title}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="SubTitle" x="130" y="30" width="295" height="20" uuid="ae8e567d-c4a1-383c-816d-8d57be5436fd"/> + <textFieldExpression><![CDATA[$R{dpercAutPianFerieH.jasperReports.subTitle}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Date" x="425" y="0" width="130" height="50" uuid="7150c263-9128-3f58-8d95-c06376c631a2"/> + <textFieldExpression><![CDATA[new SimpleDateFormat($R{jasperReports.date.format}).format(new Date())]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDpercAutPianFeriePk.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDpercAutPianFeriePk.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..b13539eb4779b1c918e01146c8fff2c530607119 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDpercAutPianFeriePk.jrxml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + <band height="50" splitType="Stretch"> + <image> + <reportElement style="ImageLeft" x="0" y="0" width="130" height="50" uuid="a8772db0-bc11-39c3-8105-48597565a6aa"/> + <imageExpression><![CDATA[$P{REPORT_DIR} + "/images/" + $R{jasperReports.logo}]]></imageExpression> + </image> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Title" x="130" y="0" width="295" height="30" uuid="b362a907-3030-32b3-83e5-44b0383409d0"/> + <textFieldExpression><![CDATA[$R{dpercAutPianFeriePk.jasperReports.title}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="SubTitle" x="130" y="30" width="295" height="20" uuid="1c8d9c25-aa32-31f2-be5f-f34886425b9b"/> + <textFieldExpression><![CDATA[$R{dpercAutPianFeriePk.jasperReports.subTitle}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Date" x="425" y="0" width="130" height="50" uuid="4a07a05e-bbfa-3118-8257-ec5dfdac6166"/> + <textFieldExpression><![CDATA[new SimpleDateFormat($R{jasperReports.date.format}).format(new Date())]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDregolePianiFerieH.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDregolePianiFerieH.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..0c87a62db3b3cde84396691109ff945718da43af --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDregolePianiFerieH.jrxml @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="50" splitType="Stretch"> + <image> + <reportElement style="ImageLeft" x="0" y="0" width="130" height="50" uuid="20161c7e-afbf-3499-8978-c7fa11720922"/> + <imageExpression><![CDATA[$P{REPORT_DIR} + "/images/" + $R{jasperReports.logo}]]></imageExpression> + </image> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Title" x="130" y="0" width="295" height="30" uuid="13cbb588-e462-3bba-9ded-50cedc26f0d9"/> + <textFieldExpression><![CDATA[$R{dregolePianiFerieH.jasperReports.title}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="SubTitle" x="130" y="30" width="295" height="20" uuid="e9a119eb-f20d-385d-941b-ee1573408868"/> + <textFieldExpression><![CDATA[$R{dregolePianiFerieH.jasperReports.subTitle}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Date" x="425" y="0" width="130" height="50" uuid="c4fd5b41-982f-33ae-b40a-d4159e851786"/> + <textFieldExpression><![CDATA[new SimpleDateFormat($R{jasperReports.date.format}).format(new Date())]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDregolePianiFeriePk.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDregolePianiFeriePk.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..e2d1d939e17139c97976f8d0677f265c36251408 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/DetailDregolePianiFeriePk.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + <band height="50" splitType="Stretch"> + <image> + <reportElement style="ImageLeft" x="0" y="0" width="130" height="50" uuid="a8167081-1b9a-39c9-aae9-c5ca96c1c060"/> + <imageExpression><![CDATA[$P{REPORT_DIR} + "/images/" + $R{jasperReports.logo}]]></imageExpression> + </image> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Title" x="130" y="0" width="295" height="30" uuid="eb7e9ac1-9c72-3de3-b058-924f7058af22"/> + <textFieldExpression><![CDATA[$R{dregolePianiFeriePk.jasperReports.title}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="SubTitle" x="130" y="30" width="295" height="20" uuid="2c763a61-3471-30b1-8c12-f2327ac036a3"/> + <textFieldExpression><![CDATA[$R{dregolePianiFeriePk.jasperReports.subTitle}]]></textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Date" x="425" y="0" width="130" height="50" uuid="0882659e-bd1c-3833-885e-3a8e050d7f7f"/> + <textFieldExpression><![CDATA[new SimpleDateFormat($R{jasperReports.date.format}).format(new Date())]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDconfigPaPfUoHForDconfigPaPianiFerie.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDconfigPaPfUoHForDconfigPaPianiFerie.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..4835e85d6107e941912f9b1352237224e1fe9e58 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDconfigPaPfUoHForDconfigPaPianiFerie.jrxml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDpercAutPianFerieHForDconfigPaPianiFerie.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDpercAutPianFerieHForDconfigPaPianiFerie.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..6ab01ae0dce65501cdd0ef01586ae53372fe4917 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDpercAutPianFerieHForDconfigPaPianiFerie.jrxml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDpercAutPianFerieHForDpercAutPianFeriePk.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDpercAutPianFerieHForDpercAutPianFeriePk.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..7591ada560045411d08fc17e58ffdbf923c110de --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDpercAutPianFerieHForDpercAutPianFeriePk.jrxml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDregolePianiFerieHForDregolePianiFeriePk.jrxml b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDregolePianiFerieHForDregolePianiFeriePk.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..a2bdfdf8ab97b9b06fbab6c1c79f5eca0f8a8522 --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/ListDregolePianiFerieHForDregolePianiFeriePk.jrxml @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/images/mice.png b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/images/mice.png new file mode 100644 index 0000000000000000000000000000000000000000..742a5d14b113cabf9cd8cbe48c0c96a851f1dbdf Binary files /dev/null and b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/images/mice.png differ diff --git a/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/templates/default.jrtx b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/templates/default.jrtx new file mode 100644 index 0000000000000000000000000000000000000000..75262f77171de1d5ed1bb7e1a041ad13cfe4f9fe --- /dev/null +++ b/GF/gestioneferie-ms-configurazionepf/modules/gestioneferie-ms-configurazionepf-web/src/main/resources/reports/templates/default.jrtx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDammtiPianiFerieForDpianiFerie.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDammtiPianiFerieForDpianiFerie.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..08f845c689c5483ea4fdedbbe16031e656154962 --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDammtiPianiFerieForDpianiFerie.jrxml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDesitiRichAdesionePfForDrichAdesionePf.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDesitiRichAdesionePfForDrichAdesionePf.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..33305ae38c3d535ad4f1512c5cc0eb0afd0f3116 --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDesitiRichAdesionePfForDrichAdesionePf.jrxml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDesitiRichAdesionePfForDstatiAdesionePf.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDesitiRichAdesionePfForDstatiAdesionePf.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..18d5ae1fdffb2378a95c72e49f514ad94d0380d3 --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDesitiRichAdesionePfForDstatiAdesionePf.jrxml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDperiodiAmmtoPfForDpianificFerieAmmto.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDperiodiAmmtoPfForDpianificFerieAmmto.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..5f9962a5688c7797ccfd6d0f5c9ab75ff33c453a --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDperiodiAmmtoPfForDpianificFerieAmmto.jrxml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianiFerieForDstatiPianoFerie.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianiFerieForDstatiPianoFerie.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..94ac581d3e1bdca9c8dc367abcf621300cbc2d9e --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianiFerieForDstatiPianoFerie.jrxml @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianificFerieAmmtoForDesitiRichAdesionePf.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianificFerieAmmtoForDesitiRichAdesionePf.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..3f9393ee138df72747ad60a364bac399ee04e27a --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianificFerieAmmtoForDesitiRichAdesionePf.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianificFerieAmmtoForDstatiPianificFerie.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianificFerieAmmtoForDstatiPianificFerie.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..26a9739cdf7cfa9033349abfd2e231c88d7dc0e4 --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDpianificFerieAmmtoForDstatiPianificFerie.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichAdesionePfForDpianiFerie.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichAdesionePfForDpianiFerie.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..c0b137ecda59ac5460a6438f6ce2c5e4a258336b --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichAdesionePfForDpianiFerie.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichAdesionePfForDstatiRichAdesionePf.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichAdesionePfForDstatiRichAdesionePf.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..b50342feb7caceaee70683ef24cc5eeac6f25e17 --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichAdesionePfForDstatiRichAdesionePf.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichPianifFerieAmmtoForDpianificFerieAmmto.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichPianifFerieAmmtoForDpianificFerieAmmto.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..5729ef27378518454f086f20e9a23eb75fa2c655 --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichPianifFerieAmmtoForDpianificFerieAmmto.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichPianifFerieAmmtoForDstatiRichiestaPfAmmto.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichPianifFerieAmmtoForDstatiRichiestaPfAmmto.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..252eb2551ea0f1906e605b31ce94dcf9bc259be3 --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichPianifFerieAmmtoForDstatiRichiestaPfAmmto.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichiesteApprovazPfForDpianiFerie.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichiesteApprovazPfForDpianiFerie.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..5176c3dab3afc93a0b9a86f8eadca60f797beabc --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichiesteApprovazPfForDpianiFerie.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichiesteApprovazPfForDstatiRichApprovPf.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichiesteApprovazPfForDstatiRichApprovPf.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..1aabad17d1fdebc5f2eab0069712671d92f40b7d --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDrichiesteApprovazPfForDstatiRichApprovPf.jrxml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDsollecitiPfForDrichAdesionePf.jrxml b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDsollecitiPfForDrichAdesionePf.jrxml new file mode 100644 index 0000000000000000000000000000000000000000..2194097a9c84046951b647a397cb2d42b429477d --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/ListDsollecitiPfForDrichAdesionePf.jrxml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/images/mice.png b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/images/mice.png new file mode 100644 index 0000000000000000000000000000000000000000..742a5d14b113cabf9cd8cbe48c0c96a851f1dbdf Binary files /dev/null and b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/images/mice.png differ diff --git a/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/templates/default.jrtx b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/templates/default.jrtx new file mode 100644 index 0000000000000000000000000000000000000000..75262f77171de1d5ed1bb7e1a041ad13cfe4f9fe --- /dev/null +++ b/GF/gestioneferie-ms-pianificazioneferie/modules/gestioneferie-ms-pianificazioneferie-web/src/main/resources/reports/templates/default.jrtx @@ -0,0 +1,30 @@ + + + + + + + + + + + [''/] + + [genFieldElements(aClass)/] + [genParentFieldElements(aClass)/] + + + + + <band splitType="Stretch"/> + + + + + + [getReportResourceTextField(aClass, 'tableHeader')/] + + + + + + [genHeaderTextFieldElements(aClass)/] + [genHeaderParentTextFieldElements(aClass)/] + + + + + [genTextFieldElements(aClass)/] + [genParentTextFieldElements(aClass)/] + + + + + + + + + + + + +[/file] +[/template] + +[comment]------------------ Fields ------------------[/comment] + +[template public genFieldElements(aChildClass : Class) post (trim())] +[for (aProperty : Property | aChildClass.getFiltrableAttributes())] + +[/for] +[/template] + +[template public genParentFieldElements(aChildClass : Class, aClass : Class) post (trim())] +[for(parentAss : Association| aChildClass.getParentAssociations())] + [if(aChildClass.getParentClass(parentAss) <> aClass)] + + + [/if] +[/for] +[/template] + +[comment]------------------ Header ------------------[/comment] + +[template public genHeaderTextFieldElements(aChildClass : Class) post (trim())] +[for (aProperty : Property | aChildClass.getFiltrableAttributes())] + + + [getReportResource(aChildClass, aProperty)/] + +[/for] +[/template] + +[template public genHeaderParentTextFieldElements(aClass : Class) post (trim())] +[for(aParentClass : Class | aClass.getParentClasses())] + + + [getReportGenericResourceParentTextField(aParentClass, 'objectKey')/] + + + + [getReportGenericResourceParentTextField(aParentClass, 'objectTitle')/] + +[/for] +[/template] + +[comment]------------------ TextFields ------------------[/comment] + +[template public genTextFieldElements(aChildClass: Class) post (trim())] +[for (aProperty : Property | aChildClass.getFiltrableAttributes())] + + + [getReportField(aChildClass, aProperty)/] + +[/for] +[/template] + +[template public genParentTextFieldElements(aClass: Class) post (trim())] +[comment][for(aParentClass : Class | aChildClass.getParentsWithoutOwner(aClass))][/comment] +[for(parentAss: Association | aClass.getParentAssociations())] + [if(aClass.getParentClass(parentAss) <> aClass)] + + + [getReportGenericParentTextField(aClass, parentAss, 'objectKey')/] + + + + [getReportGenericParentTextField(aClass, parentAss, 'objectTitle')/] + +[/if] +[/for] +[/template] + +[template getX(index: Integer, aChildClass: Class) post (trim())] +[((index - 1) * getColumnWidthForRow(aChildClass))/] +[/template] + +[template getFirstParentX(index: Integer, aChildClass: Class) post (trim())] +[if(index = 1)] +[((index + getAttributeNumber(aChildClass) - 1) * getColumnWidthForRow(aChildClass))/] +[else] +[((index + getAttributeNumber(aChildClass)) * getColumnWidthForRow(aChildClass))/] +[/if] +[/template] + +[template getSecondParentX(index: Integer, aChildClass: Class) post (trim())] +[if(index = 1)] +[((index + getAttributeNumber(aChildClass)) * getColumnWidthForRow(aChildClass))/] +[else] +[((index + getAttributeNumber(aChildClass) + 1) * getColumnWidthForRow(aChildClass))/] +[/if] +[/template] diff --git a/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/main.mtl b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/main.mtl new file mode 100644 index 0000000000000000000000000000000000000000..4a00067ceac84c37b83be145b0c6852a7e4d885e --- /dev/null +++ b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/main.mtl @@ -0,0 +1,33 @@ +[comment encoding = UTF-8 /] +[module main('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::mice::voila2::acceleogenerator::reports::folderUtils/] +[import it::mice::voila2::acceleogenerator::reports::reports/] +[import it::mice::voila2::acceleogenerator::reports::subReports/] +[import it::mice::voila2::acceleogenerator::reports::listReport/] +[import it::mice::voila2::acceleogenerator::reports::cache/] + +[comment] + Author: fabio.memoli +[/comment] + +[template public genReportsMain(aModel : Model){isMicroservizio : Boolean = aModel.isMainMs();}] + +[consoleMessage(getInfoSeverity(), 'JasperReports Generation')/] + +[genReportFolders()/] + +[for(aClass : Class | aModel.getEntities())] + [consoleMessage(getInfoSeverity(), 'Report generation for the entity: ' + aClass.name)/] + [genReportDetail(aClass)/] + [genReportListForDetail(aClass)/] +[comment] [genListReport(aClass)/][/comment] +[/for] + +[if(isMicroservizio)._not()] +[genJasperReportCache(false)/] +[/if] +[/template] diff --git a/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/reportUtils.mtl b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/reportUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..50753c25fd8b8e51d852a10cdb4d1f6e1235feda --- /dev/null +++ b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/reportUtils.mtl @@ -0,0 +1,195 @@ +[comment encoding = UTF-8 /] +[module reportUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] + +[comment] + Author: fabio.memoli +[/comment] + +[comment]------------------ Folder ------------------[/comment] + +[template public getReportFolderName(oclAny : OclAny)] +reports +[/template] + +[template public getReportFolder(oclAny : OclAny)] +[getResourcesFolderName()/]/[getReportFolderName()/] +[/template] + +[template public getReportName(aClass : Class)] +[aClass.name/] +[/template] + +[comment]------------------ Generic Resource ------------------[/comment] + +[template public getReportGenericResourceName(aClass : Class, name: String)] +[aClass.name.toLowerFirst()/].[name/] +[/template] + +[template public getReportGenericResourceParentName(aClass : Class, name: String)] +[getReportGenericResourceName(aClass, name)/] +[/template] + +[template public getReportGenericResourceTextField(aClass : Class, name: String)] +[''/] +[/template] + +[template public getReportGenericResourceParentTextField(aClass : Class, name: String)] +[''/] +[/template] + +[comment]------------------ Generic Field ------------------[/comment] + +[template public getReportGenericFieldName(aClass : Class, name : String)] +[aClass.name/].[name/] +[/template] + +[template public getReportGenericFieldParentName(aClass : Class, parentAss: Association, name : String)] +[aClass.getTheParentPropertyName(parentAss)/].[name/] +[/template] + +[template public getReportGenericTextField(aClass : Class, name : String)] +[''/] +[/template] + +[template public getReportGenericParentTextField(aClass : Class, parentAss: Association, name : String)] +[''/] +[/template] + +[template public getReportGenericDateTimeField(aClass : Class, name : String)] +$F{[name/]}.format(java.time.format.DateTimeFormatter.ofPattern([getReportStaticResourceName('datetime.format')/])) +[/template] + +[template public getReportGenericDateField(aClass : Class, name : String)] +$F{[name/]}.format(java.time.format.DateTimeFormatter.ofPattern([getReportStaticResourceName('date.format')/])) +[/template] + +[comment]------------------ Report Resources ------------------[/comment] + +[template public getReportResourceName(aClass : Class, aProperty : Property)] +[aClass.name.toLowerFirst()/].[aProperty.name/] +[/template] + +[template public getReportStaticResourceName(name: String)] +$R{jasperReports.[name/]} +[/template] + +[template public getReportRelativeResourceName(aClass : Class, name: String)] +[aClass.name.toLowerFirst()/].jasperReports.[name/] +[/template] + +[template public getReportResource(aClass : Class, aProperty : Property)] +[''/] +[/template] + +[template public getReportParentResource(aClass : Class, aProperty : Property)] +[''/] +[/template] + +[template public getReportResourceTextField(aClass : Class, name: String)] +[''/] +[/template] + +[template public getReportStaticResourceTextField(name: String)] +[''/] +[/template] + +[template public getReportStaticResourceDateField(oclAny : OclAny)] +[''/] +[/template] + +[template public getReportStaticResourcePageNumberField(oclAny : OclAny)] +[''/] +[/template] + +[template public getReportStaticImage(filename: String)] +[''/] +[/template] + +[template public getReportResourceImage(filename: String)] +[''/] +[/template] + +[template public getReportStaticTemplate(filename: String)] +[''/] +[/template] + +[comment]------------------ Detail ------------------[/comment] + +[template public getReportDetailName(aClass : Class)] +Detail[getReportName()/] +[/template] + +[template public getReportDetailFileName(aClass : Class)] +Detail[getReportName(aClass)/].jrxml +[/template] + +[template public getReportDetailFile(aClass : Class)] +[getReportFolder(aClass)/]/Detail[getReportName()/].jrxml +[/template] + +[comment]------------------ List For Detail ------------------[/comment] + +[template public getReportListForDetailName(aClass : Class, aChildClass : Class)] +List[aChildClass.name/]For[getReportName()/] +[/template] + +[template public getReportListForDetailFileName(aClass : Class, aChildClass : Class)] +[getReportListForDetailName(aClass, aChildClass)/].jrxml +[/template] + +[template public getListReportFileName(aClass : Class)] +List[aClass.getEntityClassName()/].jrxml +[/template] + +[template public getReportListForDetailFile(aClass : Class, aChildClass : Class)] +[getReportFolder()/]/[getReportListForDetailFileName(aClass, aChildClass)/] +[/template] + +[template public getReportListForDetailParameter(aClass : Class, aChildClass : Class)] +[getReportFolder()/]/[getReportListForDetailFileName(aClass, aChildClass)/] +[/template] + +[template public getListReportFile(aClass : Class, aChildClass : Class)] +[getReportFolder()/]/[getListReportFileName(aClass)/] +[/template] + +[template public getReportField(aClass : Class, aProperty : Property)] +[if(aProperty.isBoolean())] +[''/] +[elseif(aProperty.isDateTime())] +[''/] +[elseif(aProperty.isDate())] +[''/] +[else] +[''/] +[/if] +[/template] + +[comment]------------------ SubReport ------------------[/comment] + +[template public getSubReportFieldName(aClass : Class, aProperty : Property)] +the[getReportName(aClass)/].[aProperty.name/] +[/template] + +[template public getSubReportField(aClass : Class, aProperty : Property)] +[if(aProperty.isBoolean())] +[''/] +[elseif(aProperty.isDateTime())] +[''/] +[elseif(aProperty.isDate())] +[''/] +[else] +[''/] +[/if] +[/template] + +[template public getSubReportRow(aProperty : Property)] +[if(aProperty.isNumeric())]RowRight[else]RowLeft[/if] +[/template] diff --git a/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/reports.mtl b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/reports.mtl new file mode 100644 index 0000000000000000000000000000000000000000..4eb3ee4ed123a82e60f6a41f58214f92dcba6846 --- /dev/null +++ b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/reports.mtl @@ -0,0 +1,170 @@ +[comment encoding = UTF-8 /] +[module reports('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[import it::mice::voila2::acceleogenerator::reports::reportUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] + +[comment] + Author: fabio.memoli +[/comment] + +[query public getReportUUID(arg0 : Class, arg1 : String) : String + = invoke('it.mice.voila2.acceleogenerator.reports.javaservice.ReportUtils', 'getReportUUID(org.eclipse.uml2.uml.Class, java.lang.String)', Sequence{arg0, arg1}) +/] + +[template public genReportDetail(aClass : Class) post (trim())] +[file(getReportDetailFile(aClass), false, 'UTF-8')] + + + + + [genSubReportParameters(aClass)/] + + [''/] + + [genParentFieldElements(aClass)/] + [genFieldElements(aClass)/] + [genSubReportFieldElements(aClass)/] + + + + + <band height="50" splitType="Stretch"> + <image> + <reportElement style="ImageLeft" x="0" y="0" width="130" height="50" uuid="[getReportUUID(aClass, 'Image')/]"/> + <imageExpression>[getReportResourceImage('logo')/]</imageExpression> + </image> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Title" x="130" y="0" width="295" height="30" uuid="[getReportUUID(aClass, 'Title')/]"/> + <textFieldExpression>[getReportResourceTextField(aClass, 'title')/]</textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="SubTitle" x="130" y="30" width="295" height="20" uuid="[getReportUUID(aClass, 'SubTitle')/]"/> + <textFieldExpression>[getReportResourceTextField(aClass, 'subTitle')/]</textFieldExpression> + </textField> + <textField textAdjust="StretchHeight" isBlankWhenNull="true"> + <reportElement style="Date" x="425" y="0" width="130" height="50" uuid="[getReportUUID(aClass, 'Date')/]"/> + <textFieldExpression>[getReportStaticResourceDateField()/]</textFieldExpression> + </textField> + </band> + + + + + + + + + [getReportResourceTextField(aClass, 'tableHeader')/] + + + + + [genParentTextFieldElements(aClass)/] + [genTextFieldElements(aClass)/] + [genSubReportElements(aClass)/] + + + + + + + + + [getReportStaticResourceTextField('footer.text')/] + + + + [getReportStaticResourcePageNumberField()/] + + + + + + + +[/file] +[/template] + +[template public genSubReportParameters(aClass : Class) post (trim())] +[for(aChildClass : Class | aClass.getChildClasses())] + +[/for] +[/template] + +[template public genFieldElements(aClass : Class) post (trim())] +[for (aProperty : Property | aClass.getFiltrableAttributes())] + +[/for] +[/template] + +[template public genParentFieldElements(aClass : Class) post (trim())] +[for(parentAss : Association | aClass.getParentAssociations())] + [if(aClass.getParentClass(parentAss) <> aClass)] + + [/if] +[/for] +[/template] + + +[template public genParentTextFieldElements(aClass : Class) post (trim())] +[comment][for(aParentClass : Class | aClass.getParentClasses())][/comment] +[for(parentAss : Association| aClass.getParentAssociations())] +[comment] [if(aParentClass <> aClass)][/comment] + + + + [getReportGenericResourceParentTextField(aClass.getParentClass(parentAss), 'objectTitle')/] + + + + [getReportGenericParentTextField(aClass, parentAss, 'objectTitle')/] + + +[comment] [/if][/comment] +[/for] +[/template] + +[template public genSubReportFieldElements(aClass : Class) post (trim())] +[for(childAss : Association | aClass.getChildAssociations())] + +[/for] +[/template] + +[template public genTextFieldElements(aClass : Class) post (trim())] +[for (aProperty: Property | aClass.getFiltrableAttributes())] + + + + [getReportResource(aClass, aProperty)/] + + + + [getReportField(aClass, aProperty)/] + + +[/for] +[/template] + +[template public genSubReportElements(aClass : Class) post (trim())] +[for(childAss : Association | aClass.getChildAssociations())] + + + + + [''/] + + + [''/] + + [''/] + [''/] + + +[/for] +[/template] + diff --git a/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/subReports.mtl b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/subReports.mtl new file mode 100644 index 0000000000000000000000000000000000000000..20d0494f941dbaa91d6e26ea34439689d1a85ef5 --- /dev/null +++ b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/subReports.mtl @@ -0,0 +1,196 @@ +[comment encoding = UTF-8 /] +[module subReports('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[import it::mice::voila2::acceleogenerator::reports::reportUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] + +[comment] + Author: fabio.memoli +[/comment] + +[query public getReportUUID(arg0 : Class, arg1 : String) : String + = invoke('it.mice.voila2.acceleogenerator.reports.javaservice.ReportUtils', 'getReportUUID(org.eclipse.uml2.uml.Class, java.lang.String)', Sequence{arg0, arg1}) +/] + +[query public getAttributeNumber(arg0 : Class) : Integer + = invoke('it.mice.voila2.acceleogenerator.reports.javaservice.ReportUtils', 'getAttributeNumber(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentNumber(arg0 : Class) : Integer + = invoke('it.mice.voila2.acceleogenerator.reports.javaservice.ReportUtils', 'getParentNumber(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentsWithoutOwner(arg0 : Class, arg1 : Class) : Collection(OclAny) + = invoke('it.mice.voila2.acceleogenerator.reports.javaservice.ReportUtils', 'getParentsWithoutOwner(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Class)', Sequence{arg0, arg1}) +/] + +[query public getParentAssWithoutOwner(arg0 : Class, arg1 : Class) : Collection(OclAny) + = invoke('it.mice.voila2.acceleogenerator.reports.javaservice.ReportUtils', 'getParentAssWithoutOwner(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Class)', Sequence{arg0, arg1}) +/] +[query public getColumnWidthForRow(arg0 : Class) : Integer + = invoke('it.mice.voila2.acceleogenerator.reports.javaservice.ReportUtils', 'getColumnWidthForRow(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[template public genReportListForDetail(aClass : Class) post (trim())] +[for(aChildClass : Class | aClass.getChildClasses())] + [file(getReportListForDetailFile(aClass, aChildClass), false, 'UTF-8')] + + + + + + + + [''/] + + [genFieldElements(aChildClass)/] + [genParentFieldElements(aChildClass, aClass)/] + + + + + <band splitType="Stretch"/> + + + + + + [getReportResourceTextField(aChildClass, 'tableHeader')/] + + + + + + [genHeaderTextFieldElements(aChildClass)/] + [genHeaderParentTextFieldElements(aChildClass, aClass)/] + + + + + [genTextFieldElements(aChildClass)/] + [genParentTextFieldElements(aChildClass, aClass)/] + + + + + + + + + + + + + [/file] +[/for] +[/template] + +[comment]------------------ Fields ------------------[/comment] + +[template public genFieldElements(aChildClass : Class) post (trim())] +[for (aProperty : Property | aChildClass.getFiltrableAttributes())] + +[/for] +[/template] + +[template public genParentFieldElements(aChildClass : Class, aClass : Class) post (trim())] +[for(parentAss : Association| aChildClass.getParentAssociations())] + [if(aChildClass.getParentClass(parentAss) <> aClass)] + + + [/if] +[/for] +[/template] + +[comment]------------------ Header ------------------[/comment] + +[template public genHeaderTextFieldElements(aChildClass : Class) post (trim())] +[for (aProperty : Property | aChildClass.getFiltrableAttributes())] + + + [getReportResource(aChildClass, aProperty)/] + +[/for] +[/template] + +[template public genHeaderParentTextFieldElements(aChildClass : Class, aClass : Class) post (trim())] +[for(aParentClass : Class | aChildClass.getParentsWithoutOwner(aClass))] + + + [getReportGenericResourceParentTextField(aParentClass, 'objectKey')/] + + + + [getReportGenericResourceParentTextField(aParentClass, 'objectTitle')/] + +[/for] +[/template] + +[comment]------------------ TextFields ------------------[/comment] + +[template public genTextFieldElements(aChildClass: Class) post (trim())] +[for (aProperty : Property | aChildClass.getFiltrableAttributes())] + + + [getReportField(aChildClass, aProperty)/] + +[/for] +[/template] + +[template public genParentTextFieldElements(aChildClass: Class, aClass: Class) post (trim())] +[comment][for(aParentClass : Class | aChildClass.getParentsWithoutOwner(aClass))][/comment] +[for(parentAss: Association | aChildClass.getParentAssWithoutOwner(aClass))] + [if(aChildClass.getParentClass(parentAss) <> aClass)] + + + [getReportGenericParentTextField(aChildClass, parentAss, 'objectKey')/] + + + + [getReportGenericParentTextField(aChildClass, parentAss, 'objectTitle')/] + +[/if] +[/for] +[/template] + +[template getX(index: Integer, aChildClass: Class) post (trim())] +[((index - 1) * getColumnWidthForRow(aChildClass))/] +[/template] + +[template getFirstParentX(index: Integer, aChildClass: Class) post (trim())] +[if(index = 1)] +[((index + getAttributeNumber(aChildClass) - 1) * getColumnWidthForRow(aChildClass))/] +[else] +[((index + getAttributeNumber(aChildClass)) * getColumnWidthForRow(aChildClass))/] +[/if] +[/template] + +[template getSecondParentX(index: Integer, aChildClass: Class) post (trim())] +[if(index = 1)] +[((index + getAttributeNumber(aChildClass)) * getColumnWidthForRow(aChildClass))/] +[else] +[((index + getAttributeNumber(aChildClass) + 1) * getColumnWidthForRow(aChildClass))/] +[/if] +[/template] diff --git a/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/templates/default.jrtx b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/templates/default.jrtx new file mode 100644 index 0000000000000000000000000000000000000000..75262f77171de1d5ed1bb7e1a041ad13cfe4f9fe --- /dev/null +++ b/plugin-version/it.mice.voila2.acceleogenerator/src/it/mice/voila2/acceleogenerator/reports/templates/default.jrtx @@ -0,0 +1,30 @@ + + + + + + + + + + + +[/file] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentHtml.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentHtml.mtl new file mode 100644 index 0000000000000000000000000000000000000000..382591b0ca730cf54d4493c234c28994cd648559 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentHtml.mtl @@ -0,0 +1,122 @@ +[comment encoding = UTF-8 /] +[module listEntityComponentHtml('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils /] + + +[template public getListEntityComponentHtmlFileName(aClass : Class)] +[aClass.getEntityMSFEFolder()/]/list-[aClass.getDashedEntityClassName()/]/list-[aClass.getDashedEntityClassName()/].component.html +[/template] + + +[template public genListEntityComponentHtml(aClass: Class, aModel: Model) post(writeAndFormat(aClass.getListEntityComponentHtmlFileName())){ +ids: Collection(OclAny) = aClass.getClassIDs(); +attributes : Collection(OclAny) = aClass.getAttributesForPresentation(); +childs : Collection(OclAny) = aClass.getChildClasses(); +parentAssociations : Collection(OclAny) = aClass.getNotIdentifyingParentAssociations(); +microserviceName : String = getArtifact().substituteFirst(getRootArtifactId().concat('-'), ''); +}] + + + + + + [splitCamel(aClass.getEntityClassName())/] {{ 'header.list' | translate }} + + + + + + + + + + + [if(aClass.hasCompositeKey()._not())] + [for(attributeId : Property | ids)] + + [getNaturalLanguageName(attributeId)/] + +
{{[aClass.getEntityClassName().toLowerFirst()/].[attributeId.name/]}}
+ + [/for] + [else] + [for(attributeId : Property | ids)] + + [getNaturalLanguageName(attributeId)/] + +
{{[aClass.getEntityClassName().toLowerFirst()/].[aClass.getClassIdName().toLowerFirst()/].[attributeId.name/]}}
+ + [/for] + [for(parentAss : Association | aClass.getIdentifyingParentAssociations())] +[comment] [for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())][/comment] + + [splitCamel(aClass.getParentClass(parentAss).getEntityClassName())/] + +[comment] [if(aClass.getParentClass(parentAss).hasCompositeKey())] +
{{[aClass.getEntityClassName().toLowerFirst()/].[aClass.getClassIdName().toLowerFirst()/].[aClass.getParentClass(parentAss).getClassIdName().toLowerFirst()/].[parentId.name/]}}
+ [else][/comment] +
{{[aClass.getEntityClassName().toLowerFirst()/].[aClass.getClassIdName().toLowerFirst()/].[aClass.getTheParentPropertyName(parentAss)/]ObjectTitle}}
+[comment] [/if][/comment] + + +[comment] [/for][/comment] + [/for] + [/if] + + + + [for(attribute : Property | attributes)] + [if(not(attribute.isInID(aClass)))] + + [getNaturalLanguageName(attribute)/] + {{[aClass.getEntityClassName().toLowerFirst()/].[attribute.name/] [if(attribute.isDateTime())] | date:"dd/MM/yyyy HH:mm:ss" [/if]}} + [/if] + [/for] + + [for(parentAss : Association | parentAssociations)] +[comment] [for(id : Property | aClass.getParentClass(parentAss).getClassIDs())] + [if(not(id.isInID(aClass)))][/comment] + + [splitCamel(aClass.getParentClass(parentAss).getEntityClassName())/] + {{[aClass.getEntityClassName().toLowerFirst()/].[aClass.getTheParentPropertyName(parentAss)/]ObjectTitle}} +[comment] [/if] + [/for][/comment] + [/for] + + {{ 'label.noElements' | translate }} [aClass.getEntityClassName().splitCamel()/] + +
+ +
+ +
+ + + + + + + + + [if(aClass.isReportEnabled(aModel))][/if] + + + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentScss.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentScss.mtl new file mode 100644 index 0000000000000000000000000000000000000000..480131223c4abea684a9979b32cd2db7c4b88a84 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentScss.mtl @@ -0,0 +1,26 @@ +[comment encoding = UTF-8 /] +[module listEntityComponentScss('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] + + +[template public getListEntityComponentScssFileName(aClass : Class)] +[aClass.getEntityMSFEFolder()/]/list-[aClass.getDashedEntityClassName()/]/list-[aClass.getDashedEntityClassName()/].component.scss +[/template] + + +[template public genListEntityComponentScss(aClass: Class) post(writeAndFormat(aClass.getListEntityComponentScssFileName()))] + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentSpecTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentSpecTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..05ead4d07f721e7a0d523c4ea1325309cd811ffd --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentSpecTs.mtl @@ -0,0 +1,46 @@ +[comment encoding = UTF-8 /] +[module listEntityComponentSpecTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] + +[template public getListEntityComponentSpecTsFileName(aClass : Class)] +[comment][getArtifact()/]/fe/[aClass.getEntityClassName()/]/list-[aClass.getEntityClassName().toLowerFirst()/].component.spec.ts[/comment] +[aClass.getEntityMSFEFolder()/]/list-[aClass.getDashedEntityClassName()/]/list-[aClass.getDashedEntityClassName()/].component.spec.ts +[/template] + + +[template public genListEntityComponentSpecTs(aClass: Class) post(writeAndFormat(aClass.getListEntityComponentSpecTsFileName()))] + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { List[aClass.getEntityClassName()/]Component } from './list-[aClass.getEntityClassName().toLowerFirst()/].component'; + +describe('List[aClass.getEntityClassName()/]Component', () => { + let component: List[aClass.getEntityClassName()/]Component; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: ['['/] List[aClass.getEntityClassName()/]Component ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(List[aClass.getEntityClassName()/]Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..431794d75f12933e9ee893e4b52629828d1af47a --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/list/listEntityComponentTs.mtl @@ -0,0 +1,97 @@ +[comment encoding = UTF-8 /] +[module listEntityComponentTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils /] + +[template public getListEntityComponentTsFileName(aClass : Class)] +[aClass.getEntityMSFEFolder()/]/list-[aClass.getDashedEntityClassName().toLowerFirst()/]/list-[aClass.getDashedEntityClassName().toLowerFirst()/].component.ts +[/template] + + +[template public genListEntityComponentTs(aClass: Class, aModel: Model) post(writeAndFormat(aClass.getListEntityComponentTsFileName()))] +import { HttpParams } from '@angular/common/http'; +import { Component, ViewChild } from '@angular/core'; +import { PageObject, PaginationUtils } from 'blazing'; +import { BaseComponent } from '../../../../shared/base/base.component'; +import { [aClass.getInterfaceName()/] , [aClass.getInterfaceName()/]Dto } from '../[aClass.getDashedEntityClassName()/].interface'; +import { [aClass.getEntityClassName()/]ApiService } from '../[aClass.getDashedEntityClassName()/]-api.service'; +import { ButtonService } from '../../../../utilities/services/buttons.service'; +import { Search[aClass.getEntityClassName()/]Component } from './search-[aClass.getDashedEntityClassName()/]/search-[aClass.getDashedEntityClassName()/].component'; +import { Router } from '@angular/router'; +import { extractResponse, extractTotalPages, navigateToPath, getPrivilegesEnum, getPrivileges } from 'voila2-runtime-ng'; + + +@Component({ + selector: 'app-list-[aClass.getDashedEntityClassName()/]', + templateUrl: './list-[aClass.getDashedEntityClassName()/].component.html', + styleUrls: ['['/]'./list-[aClass.getDashedEntityClassName()/].component.scss'], + providers: ['['/][aClass.getEntityClassName()/]ApiService, ButtonService] +}) +export class List[aClass.getEntityClassName()/]Component extends BaseComponent<[aClass.getInterfaceName()/],[aClass.getInterfaceName()/]Dto> { + + + public [aClass.getEntityClassName().toLowerFirst()/]List: [aClass.getInterfaceName()/] ['['/]] = ['['/]]; + public [aClass.getEntityClassName().toLowerFirst()/]!: [aClass.getInterfaceName()/]; + public totalPages: number = 0; + public spinner: boolean = true; + public [aClass.getEntityClassName().toLowerFirst()/]Criteria !: any; + public pageSize: number = 5; + + public privileges: string['['/][']'/] = getPrivileges(); + + public get Privileges(): any { + return getPrivilegesEnum(); + } + + + @ViewChild(Search[aClass.getEntityClassName()/]Component) search[aClass.getEntityClassName()/] !: Search[aClass.getEntityClassName()/]Component; + + + constructor( + private [aClass.getEntityClassName().toLowerFirst()/]ApiService: [aClass.getEntityClassName()/]ApiService, + public router: Router, + ) { super() } + + + public paginateTable(object: any, criteria?: any): void { + const options: HttpParams = PaginationUtils.setOptionsForSpring(object, criteria); + this.[aClass.getEntityClassName().toLowerFirst()/]ApiService.get[aClass.getEntityClassName()/]ByCriteria(options).subscribe( + (data) => { + this.[aClass.getEntityClassName().toLowerFirst()/]List = extractResponse('[aClass.getEntityClassName().toLowerFirst()/]', data); + this.totalPages = extractTotalPages(data); + this.spinner = false; + }, + () => { + this.spinner = false; + } + ) + + } + + public searchWithCriteria() : void { this.[aClass.getEntityClassName().toLowerFirst()/]Criteria = this.search[aClass.getEntityClassName()/].search(); + const object: PageObject = { page: 0, pageSize: this.pageSize}; + this.paginateTable(object, this.[aClass.getEntityClassName().toLowerFirst()/]Criteria); + } + + + public navigateToView(id: number) : void { + navigateToPath('/pages/[getMsNameByArtifactId(getArtifact())/]/[aClass.getDashedEntityClassName()/]/detail-[aClass.getDashedEntityClassName()/]/' + id + '/view', this.router); + } + + [if(aClass.isReportEnabled(aModel))] + public printPdfReport(): void{ + this.[aClass.getEntityClassName().toLowerFirst()/]ApiService.printPdfReport(this.[aClass.getEntityClassName().toLowerFirst()/].objectKey); + } + [/if] + + +} + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mainAngularMS.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mainAngularMS.mtl new file mode 100644 index 0000000000000000000000000000000000000000..16d03a378cc58fc509eca06c1863b5e1bbf4fd77 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mainAngularMS.mtl @@ -0,0 +1,100 @@ +[module mainAngularMS('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::angular::templates::list::listEntityComponentTs/] +[import it::micegroup::voila2::cartridge::angular::templates::list::listEntityComponentSpecTs/] +[import it::micegroup::voila2::cartridge::angular::templates::list::listEntityComponentHtml/] +[import it::micegroup::voila2::cartridge::angular::templates::list::listEntityComponentScss/] +[import it::micegroup::voila2::cartridge::angular::templates::search::searchEntityComponentHtml/] +[import it::micegroup::voila2::cartridge::angular::templates::search::searchEntityComponentScss/] +[import it::micegroup::voila2::cartridge::angular::templates::search::searchEntityComponentTs/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::detailEntityComponentHtml/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::detailEntityComponentScss/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::detailEntityComponentTs/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::tabs::tabsEntityComponentHtml/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::tabs::tabsEntityComponentTs/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::tabs::tabsEntityComponentScss/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::tabs::tabChildEntity::tabChildEntityComponentHtml/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::tabs::tabChildEntity::tabChildEntityComponentTs/] +[import it::micegroup::voila2::cartridge::angular::templates::detail::tabs::tabChildEntity::tabChildEntityComponentScss/] +[import it::micegroup::voila2::cartridge::angular::templates::dialog::dialogListEntity::dialogListEntityComponentHtml/] +[import it::micegroup::voila2::cartridge::angular::templates::dialog::dialogListEntity::dialogListEntityComponentScss/] +[import it::micegroup::voila2::cartridge::angular::templates::dialog::dialogListEntity::dialogListEntityComponentTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityModuleTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityInterfaceTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityModelTs/] +[import it::micegroup::voila2::cartridge::angular::templates::mapperConfigTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityCriteriaTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityRoutingModuleTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityFormTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityConstantTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityApiServiceTs/] +[import it::micegroup::voila2::cartridge::angular::templates::microserviceMenuTs/] +[import it::micegroup::voila2::cartridge::angular::templates::microserviceModuleTs/] +[import it::micegroup::voila2::cartridge::angular::templates::microserviceRoutingModuleTs/] +[import it::micegroup::voila2::cartridge::angular::templates::assets::i18n::i18nEnJson/] +[import it::micegroup::voila2::cartridge::angular::templates::assets::i18n::i18nItJson/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::angular::templates::translateConfigTs/] +[import it::micegroup::voila2::cartridge::angular::templates::entityGroupApiServiceTs/] +[import it::micegroup::voila2::cartridge::angular::templates::security::privilegeEnumTs/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] + + +[template public genMainAngularMs(aModel: Model)] +[for(aClass : Class | aModel.getEntities())] + [consoleMessage(getInfoSeverity(), 'List Entity Component Generation for Entity: ' + aClass.name)/] + [aClass.genListEntityComponentTs(aModel)/] + [aClass.genListEntityComponentSpecTs()/] + [aClass.genListEntityComponentHtml(aModel)/] + [aClass.genListEntityComponentScss()/] + [consoleMessage(getInfoSeverity(), 'Search Entity Component Generation for Entity: ' + aClass.name)/] + [aClass.genSearchEntityComponentHtml()/] + [aClass.genSearchEntityComponentScss()/] + [aClass.genSearchEntityComponentTs()/] + [consoleMessage(getInfoSeverity(), 'Detail Entity Component Generation for Entity: ' + aClass.name)/] + [aClass.genDetailEntityComponentTs(aModel)/] + [aClass.genDetailEntityComponentHtml(aModel)/] + [aClass.genDetailEntityComponentScss()/] + [aClass.genTabsEntityComponentHtml()/] + [aClass.genTabsEntityComponentTs()/] + [aClass.genTabsEntityComponentScss()/] + [aClass.genEntityConstantTs()/] + [consoleMessage(getInfoSeverity(), 'Module Generation for Entity: ' + aClass.name)/] + [aClass.genEntityModuleTs()/] + [consoleMessage(getInfoSeverity(), 'Interface Generation for Entity: ' + aClass.name)/] + [aClass.genEntityInterfaceTs()/] + [consoleMessage(getInfoSeverity(), 'Module Generation for Model: ' + aClass.name)/] + [aClass.genEntityModelTs()/] + [consoleMessage(getInfoSeverity(), 'Criteria Generation for Entity: ' + aClass.name)/] + [aClass.genEntityCriteriaTs()/] + [consoleMessage(getInfoSeverity(), 'RoutingModule Generation for Entity: ' + aClass.name)/] + [aClass.genEntityRoutingModuleTs()/] + [consoleMessage(getInfoSeverity(), 'Form Generation for Entity: ' + aClass.name)/] + [aClass.genEntityFormTs()/] + [consoleMessage(getInfoSeverity(), 'ApiService Generation for Entity: ' + aClass.name)/] + [aClass.genEntityApiServiceTs()/] + [aClass.entityParentsApiServiceTs()/] + [for(childAss : Association | aClass.getChildAssociations())] + [childAss.genTabChildEntityComponentHtml(aClass)/] + [childAss.genTabChildEntityComponentTs(aClass)/] + [childAss.genTabChildEntityComponentScss(aClass)/] + [/for] + [if(aClass.hasChilds() or aClass.hasOneToOneRelation())] + [aClass.genDialogListEntityComponentHtml()/] + [aClass.genDialogListEntityComponentTs()/] + [aClass.genDialogListEntityComponentScss()/] + [/if] +[/for] +[consoleMessage(getInfoSeverity(), 'Menu generation')/] +[aModel.genMicroserviceMenuTs()/] +[aModel.genMsEntityModuleTs()/] +[aModel.genMsEntityRoutingModuleTs()/] +[aModel.geni18nItJson()/] +[aModel.geni18nEnJson()/] +[genPrivilegeEnumTs(aModel)/] +[genMapperConfigTs(aModel)/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mapperConfigGeneralTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mapperConfigGeneralTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..ee7bf4d7ec5607caa9ccf76397800afe21b1d91f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mapperConfigGeneralTs.mtl @@ -0,0 +1,27 @@ +[module mapperConfigGeneralTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + + + + + + +[template public genMapperConfigGeneralTs( aModel : Model) post(writeAndFormat(getMapperConfigGeneralFileName()))] + +[for(microservice : Component | aModel.getMicroservices()) ] +import { mapper[getNaturalMsName(microservice)/]Config } from "./pages/[getArtifact()/]-[getMsName(microservice)/]-fe/mapper.config"; +[/for] + +export function configureMapper() : void { + [for(microservice : Component | aModel.getMicroservices()) ] + mapper[getNaturalMsName(microservice)/]Config(); + [/for] +} + +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mapperConfigTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mapperConfigTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..7b24314de4431f8b2498e8eded6b53be4b0a13c3 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/mapperConfigTs.mtl @@ -0,0 +1,39 @@ +[module mapperConfigTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] + + +[template public getMicroserviceMapperConfigFileName(oclAny : OclAny)] +[getRootFEFolderName()/]/mapper.config.ts +[/template] + + +[template public genMapperConfigTs( aModel : Model) post(writeAndFormat(getMicroserviceMapperConfigFileName()))] + +import { BzAutoMapper, IMapOperation } from "blazing"; +import { inizializeMapper } from "../../shared/base/base.helper"; +import { convertIntoDate } from "src/app/utilities/function/helper"; + + +export function mapper[getMsNameByArtifactIdWOMsUpperFirst()/]Config() : void { + + const bzAutoMapper: BzAutoMapper = inizializeMapper(); + + [for(aClass : Class | aModel.getEntities())] + bzAutoMapper.createMap('[aClass.getEntityModelName()/]', '[aClass.getInterfaceName()/]'); + [for(attribute: Property |aClass.getAllAttributes())] + [if(attribute.isDateTime() or attribute.isLocalDate())] + .forMember('[attribute.name/]', { value: convertIntoDate, operation: IMapOperation.CHANGE}) + [/if] + [/for] + [/for] + +} + +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceMenuTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceMenuTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..fc574ea04f9a0659aeb22d7c56289dabb2c5d3f0 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceMenuTs.mtl @@ -0,0 +1,82 @@ +[comment encoding = UTF-8 /] +[module microserviceMenuTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] + + +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::subjectAreaUtils/] + +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] + +[template public getMicroserviceMenuTsFileName(oclAny : OclAny)] +[getRootFEFolderName()/]/[getMsNameByArtifactId(getArtifact())/]-menu.ts +[/template] + + +[template public genMicroserviceMenuTs(aModel: Model) post(writeAndFormat(getMicroserviceMenuTsFileName()))] + +import { MenuElement } from "blazing/lib/components/menu/menu-element"; +import {getPrivilegesEnum } from 'voila2-runtime-ng'; + +const Privileges = getPrivilegesEnum(); + +export const MENU_MS_[camelToUnderscore(getMsNameByArtifactIdWOMs(getArtifact())).toUpper()/]: MenuElement['['/]] = ['['/] + +[for(aClass : Class | aModel.getModelEntitiesFromMainSA()) separator(',')] + { + label:"[splitCamel(aClass.getEntityClassName())/]", + expectedPrivilege:Privileges.[camelToUnderscore(aClass.getEntityClassName()).toUpper()/]_FIND_PAGINATED, + path:"/pages/[getMsNameByArtifactId(getArtifact())/]/[aClass.getDashedEntityClassName().toLowerFirst()/]/list-[aClass.getDashedEntityClassName().toLowerFirst()/]", + basePath:"/pages/[getMsNameByArtifactId(getArtifact())/]/[aClass.getDashedEntityClassName().toLowerFirst()/]/" + } +[/for] +, +[if(isSecurityMicroservice())] +{ + label: 'Security', + iconClass: 'fas fa-lock', + children:['['/] +[else] +[if(isNotificationMicroservice())] +{ + label: 'Notification', + iconClass: 'fas fa-envelope-open-text', + children:['['/] +[/if] +[/if] +[for(subjectArea : Package| aModel.getSubjectAreas())separator(',')] +{ + label: '[subjectArea.name.toUpperFirst()/]', + iconClass: 'fas fa-stream', + children:['['/] +[for(aClass : Class | subjectArea.getEntitiesForSA()) separator(',')] + { + label:"[splitCamel(aClass.getEntityClassName())/]", + expectedPrivilege:Privileges.[camelToUnderscore(aClass.getEntityClassName()).toUpper()/]_FIND_PAGINATED, + path:"/pages/[getMsNameByArtifactId(getArtifact())/]/[aClass.getDashedEntityClassName().toLowerFirst()/]/list-[aClass.getDashedEntityClassName().toLowerFirst()/]", + basePath:"/pages/[getMsNameByArtifactId(getArtifact())/]/[aClass.getDashedEntityClassName().toLowerFirst()/]/" + } +[/for] + ] + } +[/for] +[if(isNotificationMicroservice() or isSecurityMicroservice())] + ] + } +[/if] +] + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceModuleTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceModuleTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..3431b2a88713e38a7c37b54ea98eacaf2f1ff4e7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceModuleTs.mtl @@ -0,0 +1,44 @@ +[comment encoding = UTF-8 /] +[module microserviceModuleTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] + +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] + +[template public getMsEntityModuleTsFileName(oclAny : OclAny)] +[getRootFEFolderName()/]/[getMsNameByArtifactId(getArtifact())/].module.ts +[/template] + + +[template public genMsEntityModuleTs(aModel: Model) post(writeAndFormat(getMsEntityModuleTsFileName()))] + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { [getMsNameByArtifactId(getArtifact()).dashToCamelCase().toUpperFirst()/]RoutingModule } from './[getMsNameByArtifactId(getArtifact())/]-routing.module'; + + +@NgModule({ + declarations: ['['/]], + imports: ['['/] + CommonModule, + [dashToCamelCase(getMsNameByArtifactId(getArtifact())).toUpperFirst()/]RoutingModule + ] +}) +export class [dashToCamelCase(getMsNameByArtifactId(getArtifact())).toUpperFirst()/]Module { } + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceRoutingModuleTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceRoutingModuleTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..36f1155b920e9d95cb6d18a41f5b28c3dba892ce --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/microserviceRoutingModuleTs.mtl @@ -0,0 +1,58 @@ +[comment encoding = UTF-8 /] +[module microserviceRoutingModuleTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] + + +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] + +[template public getMsEntityRoutingModuleTsFileName(oclAny : OclAny)] +[getRootFEFolderName()/]/[getMsNameByArtifactId(getArtifact())/]-routing.module.ts +[/template] + + +[template public genMsEntityRoutingModuleTs(aModel: Model) post(writeAndFormat(getMsEntityRoutingModuleTsFileName()))] + +import { NgModule } from "@angular/core"; +import { RouterModule, Routes } from "@angular/router"; + + +const routes: Routes = ['['/] + { + path: '', + children: ['['/] + [for(aClass : Class | aModel.getEntities())] + { + path: "[aClass.getDashedEntityClassName().toLowerFirst()/]", loadChildren: () => + import("./[aClass.getDashedEntityClassName().toLowerFirst()/]/[aClass.getDashedEntityClassName().toLowerFirst()/].module").then((m) => m.[aClass.getEntityClassName()/]Module), + }, + + [/for] + ] + } + + ]; + + @NgModule({ + imports: ['['/]RouterModule.forChild(routes)], + exports: ['['/]RouterModule] + }) + export class [dashToCamelCase(getMsNameByArtifactId(getArtifact())).toUpperFirst()/]RoutingModule { } + + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/pagesRouting.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/pagesRouting.mtl new file mode 100644 index 0000000000000000000000000000000000000000..6bc49468a7775e9f57999163b7e101b99dd3a7b3 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/pagesRouting.mtl @@ -0,0 +1,41 @@ +[module pagesRouting('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] + + +[template public genPagesRouting(aModel : Model) post(writeAndFormat(getPagesRoutingFileName()))] +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { HomepageComponent } from './homepage/homepage.component'; +import { PagesComponent } from './pages.component'; + + +const routes: Routes = ['['/] + { + path: '', component: PagesComponent, + children: ['['/] + { + path:'home', component: HomepageComponent + }, + [for(microservice : Component | aModel.getMicroservices()) separator(',')] + { + path: "[getMsName(microservice)/]", loadChildren: () => + import("./[getArtifact()/]-[getMsName(microservice)/]-fe/[getMsName(microservice)/].module").then((m) => m.[getMsAngularModuleName(microservice)/]), + } + [/for] + ] + } + +]; + +@NgModule({ + imports: ['['/]RouterModule.forChild(routes)], + exports: ['['/]RouterModule] +}) +export class PagesRoutingModule { } +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentHtml.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentHtml.mtl new file mode 100644 index 0000000000000000000000000000000000000000..67ab1e2725a0d30f7c57f77bce2dccd2e46fbae2 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentHtml.mtl @@ -0,0 +1,106 @@ +[comment encoding = UTF-8 /] +[module searchEntityComponentHtml('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] + +[template public getSearchEntityComponentHtmlFileName(aClass : Class)] +[aClass.getEntityMSFEFolder()/]/list-[aClass.getDashedEntityClassName()/]/search-[aClass.getDashedEntityClassName()/]/search-[aClass.getDashedEntityClassName()/].component.html +[/template] + + +[template public genSearchEntityComponentHtml(aClass: Class) post(writeAndFormat(aClass.getSearchEntityComponentHtmlFileName())){ +attributes : Collection(OclAny) = aClass.getAttributesForPresentation(); +parentAssociations : Collection(OclAny) = aClass.getParentAssFromAllModels(); +}] + + + + + {{ 'header.search' | translate }} + + + + +
+ + [for(attribute : Property | attributes)] + + +
+
+ [if(attribute.isNumeric())] + + [/if] + [if(attribute.isDate())] + + [/if] + [if(attribute.isDateTime())] + + [/if] + [if(attribute.isString())] + + [/if] + [if(attribute.isBoolean())] + [getNaturalLanguageName(attribute)/] + [/if] +
+
+ [if(attribute.isNumeric())] + + [/if] + [if(attribute.isDate())] + + [/if] + [if(attribute.isDateTime())] + + [/if] +
+
+ + [/for] + + [for(parentAss : Association | parentAssociations)] +
+
+ [if(hasPopupParentSelection(parentAss))] + + + + [else] + + + + [/if] +
+
+[comment] [for(id : Property | aClass.getParentClass(parentAss).getClassIDs())] + +
+
+ +
+
+ + [/for][/comment] + + + [/for] + +
+
+
+ + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentScss.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentScss.mtl new file mode 100644 index 0000000000000000000000000000000000000000..29b1b3c5abd6e82d4ff7d2092d609bd659b60b9c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentScss.mtl @@ -0,0 +1,26 @@ +[comment encoding = UTF-8 /] +[module searchEntityComponentScss('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] + + +[template public getSearchEntityComponentScssFileName(aClass : Class)] +[aClass.getEntityMSFEFolder()/]/list-[aClass.getDashedEntityClassName()/]/search-[aClass.getDashedEntityClassName()/]/search-[aClass.getDashedEntityClassName()/].component.scss +[/template] + + +[template public genSearchEntityComponentScss(aClass: Class) post(writeAndFormat(aClass.getSearchEntityComponentScssFileName()))] + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..a4e6ec3c4808d329c818f3e4e7226f96adc26d00 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/search/searchEntityComponentTs.mtl @@ -0,0 +1,232 @@ +[comment encoding = UTF-8 /] +[module searchEntityComponentTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::utilities /] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] + + + +[template public getSearchEntityComponentTsFileName(aClass : Class)] +[aClass.getEntityMSFEFolder()/]/list-[aClass.getDashedEntityClassName().toLowerFirst()/]/search-[aClass.getDashedEntityClassName().toLowerFirst()/]/search-[aClass.getDashedEntityClassName().toLowerFirst()/].component.ts +[/template] + +[template public genFilterSection(aClass: Class, attribute: Property, parentAss: Association, isParent: Boolean)] +[if(attribute.isNumeric() or attribute.isDate() or attribute.isDateTime())] +const [attribute.getAttributeName(aClass, parentAss, isParent)/]From : [getAngularType(attribute.type)/] = this.search[aClass.getEntityName()/]Form.value.[attribute.getAttributeName(aClass, parentAss, isParent)/]From; +const [attribute.getAttributeName(aClass, parentAss, isParent)/]To : [getAngularType(attribute.type)/] = this.search[aClass.getEntityName()/]Form.value.[attribute.getAttributeName(aClass, parentAss, isParent)/]To; + +//[attribute.getAttributeName(aClass, parentAss, isParent)/] +if([attribute.getAttributeName(aClass, parentAss, isParent)/]From || [attribute.getAttributeName(aClass, parentAss, isParent)/]To ){ + [aClass.getEntityCriteriaName().toLowerFirst()/].[attribute.getAttributeName(aClass, parentAss, isParent)/] = new [getFilterType(attribute.type)/]; + [aClass.getEntityCriteriaName().toLowerFirst()/].[attribute.getAttributeName(aClass, parentAss, isParent)/].setGreaterOrEqualThan([attribute.getAttributeName(aClass, parentAss, isParent)/]From); + [aClass.getEntityCriteriaName().toLowerFirst()/].[attribute.getAttributeName(aClass, parentAss, isParent)/].setLessOrEqualThan([attribute.getAttributeName(aClass, parentAss, isParent)/]To); +} +[/if] + +[if(attribute.isString())] +const [attribute.getAttributeName(aClass, parentAss, isParent)/] : [getAngularType(attribute.type)/] = this.search[aClass.getEntityName()/]Form.value.[attribute.getAttributeName(aClass, parentAss, isParent)/]; + +//[attribute.getAttributeName(aClass, parentAss, isParent)/] +if([attribute.getAttributeName(aClass, parentAss, isParent)/]){ +[aClass.getEntityCriteriaName().toLowerFirst()/].[attribute.getAttributeName(aClass, parentAss, isParent)/] = new [getFilterType(attribute.type)/]; +[aClass.getEntityCriteriaName().toLowerFirst()/].[attribute.getAttributeName(aClass, parentAss, isParent)/].setContains(this.search[aClass.getEntityName()/]Form.value.[attribute.getAttributeName(aClass, parentAss, isParent)/]); +} +[/if] + +[if(attribute.isBoolean())] +const [attribute.getAttributeName(aClass, parentAss, isParent)/] : [getAngularType(attribute.type)/] = this.search[aClass.getEntityName()/]Form.value.[attribute.getAttributeName(aClass, parentAss, isParent)/]; + +//[attribute.getAttributeName(aClass, parentAss, isParent)/] +if([attribute.getAttributeName(aClass, parentAss, isParent)/]){ + [aClass.getEntityCriteriaName().toLowerFirst()/].[attribute.getAttributeName(aClass, parentAss, isParent)/] = new [getFilterType(attribute.type)/](); + [aClass.getEntityCriteriaName().toLowerFirst()/].[attribute.getAttributeName(aClass, parentAss, isParent)/].setSpecified([attribute.getAttributeName(aClass, parentAss, isParent)/]); +} +[/if] +[/template] + +[template public genSearchEntityComponentTs(aClass: Class) post(writeAndFormat(aClass.getSearchEntityComponentTsFileName())){ +attributes : Collection(OclAny) = aClass.getAttributesForPresentation(); +parents : Collection(OclAny) = aClass.getParentClasses(); +parentIds : Collection(OclAny) = aClass.getParentIds(); +attributesFilter : Collection(OclAny) = aClass.getAttributeAngularTypesNoDuplicates(getAttributesFromClassAndParents(aClass)); +parentAssociations : Collection(OclAny) = aClass.getParentAssFromAllModels(); +}] +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { DateService } from 'blazing'; +import { [aClass.getEntityClassName()/]GroupApiService } from '../../[aClass.getDashedEntityClassName().toLowerFirst()/]-group-api.service'; +import { +[for(attribute : String | attributesFilter) separator (',')] + [attribute/] +[/for] +[if not (aClass.getAttributeAngularTypesNoDuplicates(getAttributesFromClassAndParents(aClass)) -> includes('StringFilter'))] +, StringFilter +[/if] +, getListForDropdown +} from 'voila2-runtime-ng'; + +import { [aClass.getEntityClassName()/]Criteria } from '../../[aClass.getDashedEntityClassName().toLowerFirst()/].criteria'; + +[for(parent : Class | aClass.getParentClassesNoDup())] +import { I[parent.getEntityClassName()/] } from '../../../[parent.getDashedEntityClassName()/]/[parent.getDashedEntityClassName()/].interface'; +import { [parent.getEntityClassName()/]ApiService } from '../../../[parent.getDashedEntityClassName()/]/[parent.getDashedEntityClassName()/]-api.service'; +[/for] + +[for(parent : Association| aClass.getParentAssociations())] +[if(hasPopupParentSelection(parent))] +import { DialogList[aClass.getParentEntityNameCheckSelf(parent)/]Component } from '../../../dialog/dialog-list-[aClass.getParentClass(parent).getDashedEntityClassName()/]/dialog-list-[aClass.getParentClass(parent).getDashedEntityClassName()/].component'; +[/if] +[/for] +[if(aClass.hasPopUpParentSelection())] +import { OverlaysService } from 'src/app/utilities/services/overlays.service'; +[/if] +const PROVIDERS = ['['/] + [aClass.getEntityClassName()/]GroupApiService, + [if(aClass.hasPopUpParentSelection())]OverlaysService,[/if] + [for(parent : Class | aClass.getParentClassesNoDup())] + [parent.getEntityClassName()/]ApiService, + [/for] +] + +@Component({ + selector: 'app-search-[aClass.getDashedEntityClassName().toLowerFirst()/]', + templateUrl: './search-[aClass.getDashedEntityClassName().toLowerFirst()/].component.html', + styleUrls: ['['/]'./search-[aClass.getDashedEntityClassName().toLowerFirst()/].component.scss'], + providers: ['['/]...PROVIDERS ] +}) +export class Search[aClass.getEntityClassName()/]Component implements OnInit { + + public search[aClass.getEntityClassName()/]Form !: FormGroup; + [for(parentAss : Association | aClass.getParentAssociationsNoDup())] + [if(hasDropdownParentSelection(parentAss))] + public [aClass.getVirginParentEntityNameCheckSelf(parentAss).toLowerFirst()/]List : I[aClass.getVirginParentEntityNameCheckSelf(parentAss)/]['['/]] = ['['/]]; + [/if] + [/for] + constructor( + private formBuilder: FormBuilder, + private dateService: DateService, + private [aClass.getEntityClassName().toLowerFirst()/]GroupApiService : [aClass.getEntityClassName()/]GroupApiService, + [if(aClass.hasPopUpParentSelection())]private overlaysService: OverlaysService [/if] + ) { } + + ngOnInit(): void { + this.inizialize(); + [if(aClass.hasParents() and aClass.hasAtLeastOneDrpodownSelection())] + this.getParentsList(); + [/if] + } + + public search(): any { + let [aClass.getEntityClassName().toLowerFirst()/]Criteria: [aClass.getEntityClassName()/]Criteria = Object.assign({}); + + if (this.search[aClass.getEntityClassName()/]Form.value) { + + [comment]ATTRIBUTI INTERNI[/comment] + [for(attribute : Property | attributes)] + [aClass.genFilterSection(attribute, null, false)/] + [/for] + [for(parentAss : Association | aClass.getParentAssociations())] + // [aClass.getTheParentPropertyName(parentAss)/]ObjectKey + if(this.search[aClass.getEntityClassName()/]Form.value.[aClass.getTheParentPropertyName(parentAss)/]ObjectKey) + { + [aClass.getEntityCriteriaName().toLowerFirst()/].[aClass.getTheParentPropertyName(parentAss)/]ObjectKey = this.search[aClass.getEntityClassName()/]Form.value.[aClass.getTheParentPropertyName(parentAss)/]ObjectKey; + } + [/for] + [comment]ID PARENT ENTITY[/comment] +[comment] [for(parentAss : Association | aClass.getParentAssociations())] + [for(parentId : Property | aClass.getParentClass(parentAss).getClassIDsIncludingFK())] + [if not parentId.isInID(aClass)] [aClass.genFilterSection(parentId, parentAss, true)/] [/if] + [/for] + [/for][/comment] + } + + return [aClass.getEntityClassName().toLowerFirst()/]Criteria; + } + + public inizialize(): void { + this.search[aClass.getEntityClassName()/]Form = this.formBuilder.group( + { + [for(attribute : Property | attributes)] + [if(attribute.isNumeric() or attribute.isDate() or attribute.isDateTime())] + '[attribute.name/]From' : ['['/]null], + '[attribute.name/]To' : ['['/]null], + [ /if] + [if(attribute.isString())] + '[attribute.name/]' : ['['/]null], + [ /if] + [if(attribute.isBoolean())] + '[attribute.name/]' : ['['/]null], + [/if] + [/for] + [for(parentAss: Association | aClass.getParentAssociations())separator (',')] + '[aClass.getTheParentPropertyName(parentAss)/]ObjectKey' : ['['/]null] + [/for] + +[comment] [for(parent : Class | parents)] + [for(id : Property | parent.getClassIDs())] + [if(not id.isInID(aClass))] + [if(id.isNumeric() or id.isDate())] + '[id.name/]' : ['['/]null], + [/if] + [if(id.isString())] + '[id.name/]' : ['['/]null], + [/if] + [if(id.isBoolean())] + '[id.name/]' : ['['/]null], + [/if] + [/if] + [ /for] + [ /for][/comment] + } + ) + } + + [for(parentAss : Association | aClass.getParentAssociationsNoDup())] + [if(hasPopupParentSelection(parentAss))] + public show[aClass.getParentEntityNameCheckSelf(parentAss)/]ListDialog(): void { + this.overlaysService.dialog.showDialog(DialogList[aClass.getParentEntityNameCheckSelf(parentAss)/]Component).subscribe(data => { + if (data) { + this.search[aClass.getFormName().toUpperFirst()/].get('[aClass.getTheParentObjectKeyCheckSelf(parentAss).toLowerFirst()/]')?.patchValue(data.objectKey); + } + }); + } + [else] + [if(hasDropdownParentSelection(parentAss))] + public get[aClass.getVirginParentEntityNameCheckSelf(parentAss)/]List() : void { + this.[aClass.getEntityName().toLowerFirst()/]GroupApiService.[aClass.getVirginParentEntityNameCheckSelf(parentAss).toLowerFirst()/].get[aClass.getVirginParentEntityNameCheckSelf(parentAss)/]ByCriteria().subscribe( + (data) => { + this.[aClass.getVirginParentEntityNameCheckSelf(parentAss).toLowerFirst()/]List = getListForDropdown('[aClass.getVirginParentEntityNameCheckSelf(parentAss).toLowerFirst()/]', data); + } + ) + } + [/if] + [/if] + [/for] + + [if(aClass.hasParents() and aClass.hasAtLeastOneDrpodownSelection())] + private getParentsList() : void { + [for(parentAss : Association | aClass.getParentAssociationsNoDup())] + [if(hasDropdownParentSelection(parentAss))] + this.get[aClass.getVirginParentEntityNameCheckSelf(parentAss)/]List(); + [/if] + [/for] + } + [/if] + + +} + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/security/privilegeEnumTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/security/privilegeEnumTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..2b8157e7915c485b744a712abc8135432a5be273 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/security/privilegeEnumTs.mtl @@ -0,0 +1,41 @@ +[module privilegeEnumTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::common::utilities/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] + + +[template public genPrivilegeEnumTs(aModel: Model) post(writeAndFormat(getMsPrivilegeFileName())) ] + + +export enum [getMsNameByArtifactIdWOMsUpperFirst()/]Privileges { + [for(aClass : Class | aModel.getEntities())] + /// [getEntityClassName(aClass)/] + [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_PAGINATED = '[getPortNumber()/][i/]00', + [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_BY_ID = '[getPortNumber()/][i/]01', + [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_CREATE = '[getPortNumber()/][i/]02', + [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_UPDATE = '[getPortNumber()/][i/]03', + [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_DELETE = '[getPortNumber()/][i/]04', + [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_PDF_REPORT = '[getPortNumber()/][i/]05', + [genParentFEPermission(aClass, i, 5)/] + [/for] +} + +[/template] + +[template public genParentFEPermission(aClass : Class, index: Integer, offset: Integer)] +[for(parentAss: Association | getParentAssociations(aClass))] +[camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_BY_[camelToUnderscore(aClass.getParentPropertyName(parentAss)).toUpperCase()/] = '[getPortNumber()/][index/]0[intSum(offset, i)/]', +[/for] +[for(childAss : Association | getChildAssociations(aClass))] +[camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_BY_[camelToUnderscore(aClass.getTheChildPropertyName(childAss)).toUpperCase()/]_OBJECT_KEY = '[getPortNumber()/][index/]0[offset + aClass.getParentAssociations()->size()+ i/]', +[/for] +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/security/privilegesTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/security/privilegesTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..f579c35eb3d0fde740676de210b16fc675437280 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/security/privilegesTs.mtl @@ -0,0 +1,32 @@ +[module privilegesTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::common::utilities/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] + + +[template public genPrivilegeTs(aModel: Model) post(writeAndFormat(getPrivilegeFileName())) ] + +import { ObjectUtils } from 'blazing'; +import {setPrivilegesEnum} from 'voila2-runtime-ng'; +[for(microservice : Component | aModel.getMicroservices()) ] +import {[getMsNameUF(microservice)/]Privileges} from '../pages/[getFEArtifactForMs()/]/privilege.enum'; +[/for] + + +export function buildPrivilegesEnum() { + const privileges = ObjectUtils.merge( + [for(microservice : Component | aModel.getMicroservices()) ] + [getMsNameUF(microservice)/]Privileges, + [/for] + ) + setPrivilegesEnum(privileges); +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/securityConfigTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/securityConfigTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..19a81179c912cab5c45303779793922270a47ac7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/securityConfigTs.mtl @@ -0,0 +1,46 @@ +[comment encoding = UTF-8 /] +[module securityConfigTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + +[template public genSecurityConfigTs( aModel : Model) post(writeAndFormat(getSecurityConfigFileName()))] + +import { AuthGuard, SecurityService } from 'voila2-runtime-ng'; +import { environment } from 'src/environments/environment'; +import { APP_INITIALIZER, Provider } from '@angular/core'; +import {getFakeProvider} from 'blazing' + + export function securityConfig(securityInstance: SecurityService) { + return () => + securityInstance.init({ + config: { + url: environment.authUrl, + realm: '[getArtifact()/]', + clientId: environment.clientId, + }, + initOptions: { + onLoad: 'login-required' + }, + }); + } + + export function getAuthGuards() : any { + if(environment.securityOn) + return ['['/] AuthGuard ]; + } + + + export function manageSecurityConfig(): Provider { + if (environment.securityOn) + return { + provide: APP_INITIALIZER, + useFactory: securityConfig, + multi: true, + deps: ['['/] SecurityService], + } + return getFakeProvider(); +} + +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/sidebar-left-component.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/sidebar-left-component.mtl new file mode 100644 index 0000000000000000000000000000000000000000..072acc8f9b848c2149383f320b29758dcded83ce --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/sidebar-left-component.mtl @@ -0,0 +1,59 @@ +[module sidebar-left-component('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] + + + +[template public genSideBarLeft(aModel : Model) post(writeAndFormat(getSideBarLeftFileName()))] +import { ChangeDetectionStrategy, Component} from '@angular/core'; +import { MenuElement } from 'blazing/lib/components/menu/menu-element'; +import { MENU_HOME } from '../../pages/homepage/homepage-menu'; +import { getPrivileges } from 'voila2-runtime-ng'; + +[for(microservice : Component | aModel.getMicroservices()) ] +import {MENU_[getMSAngularMenuName(microservice)/]} from '../../pages/[getFEArtifactForMs()/]/ms-[microservice.getMicroServiceName()/]-menu'; +[/for] + +const MS_MENU_ITEMS : MenuElement['['/]] = ['['/] + ...MENU_HOME, +[for(ms : Component | aModel.getDemoMs()) separator(',\n')] + ...MENU_[getMSAngularMenuName(ms)/] +[/for] +[if( aModel.getDemoMs()->size() > 0)],[/if] +[for(ms : Component | aModel.getBusinessMs()) separator(',\n')] + ...MENU_[getMSAngularMenuName(ms)/] +[/for] +[if( aModel.getBusinessMs()->size() > 0)],[/if] +[for(ms : Component | aModel.getNotificationMs()) separator(',\n')] + ...MENU_[getMSAngularMenuName(ms)/] +[/for] +[if( aModel.getNotificationMs()->size() > 0)],[/if] +[for(ms : Component | aModel.getSecurityMs()) separator(',\n')] + ...MENU_[getMSAngularMenuName(ms)/] +[/for] +] + +@Component({ + selector: 'app-sidebar-left', + templateUrl: './sidebar-left.component.html', + styleUrls: ['['/]'./sidebar-left.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class SidebarLeftComponent { + + public privileges: string['['/]] = getPrivileges(); + + public MENU_ELEMENTS: MenuElement['['/]] = ['['/]...MS_MENU_ITEMS]; + + +} + + + +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/translateConfigTs.mtl b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/translateConfigTs.mtl new file mode 100644 index 0000000000000000000000000000000000000000..7aad9d036dc799c30f03b7bb5b20d2878d55d20c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.angular/src/it/micegroup/voila2/cartridge/angular/templates/translateConfigTs.mtl @@ -0,0 +1,34 @@ +[comment encoding = UTF-8 /] +[module translateConfigTs('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] + + +[template public genTranslateConfigTs( aModel : Model) post(writeAndFormat(getTranslateConfigFileName()))] + +import { Observable } from "rxjs"; +import { TranslateLoader, TranslateService } from "translate-ng"; + + +export class LazyTranslateLoader implements TranslateLoader { + getTranslation(lang: string): Observable { + return TranslateService.getTranslationsFiles(I18NFiles(lang)); + } +} + + +export function I18NFiles( lang: string) { + return ['['/] + import(`../assets/i18n/${lang}.json`), + [for(microservice : Component | aModel.getMicroservices()) ] + import(`../app/pages/[getArtifact()/]-[getMsName(microservice)/]-fe/assets/i18n/${lang}.json`), + [/for] + [']'/] +} + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/.classpath b/plugin-version/it.micegroup.voila2.cartridge.library/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..09087533df9bcb5b21c00e6a1bc5743b0d562184 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/.classpath @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/.project b/plugin-version/it.micegroup.voila2.cartridge.library/.project new file mode 100644 index 0000000000000000000000000000000000000000..5693b1a37c662dce4524c94e190b6cf3d3ee0130 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/.project @@ -0,0 +1,50 @@ + + + it.micegroup.voila2.cartridge.library + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.acceleo.ide.ui.acceleoBuilder + + + compilation.kind + compilation.absolute.path + + + compliance + pragmatic + + + resource.kind + xmi + + + trim-position + false + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.acceleo.ide.ui.acceleoNature + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/.settings/org.eclipse.jdt.core.prefs b/plugin-version/it.micegroup.voila2.cartridge.library/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..c9545f06a4120d5b4a1228fb19f67a1171bc0f5b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/META-INF/MANIFEST.MF b/plugin-version/it.micegroup.voila2.cartridge.library/META-INF/MANIFEST.MF new file mode 100644 index 0000000000000000000000000000000000000000..e1fe7cf61f90bf2cdacdebd6234b241cf6bfa20f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/META-INF/MANIFEST.MF @@ -0,0 +1,26 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Library +Bundle-SymbolicName: it.micegroup.voila2.cartridge.library;singleton:=true +Bundle-Version: 1.0.0.qualifier +Automatic-Module-Name: it.micegroup.voila2.cartridge.library +Bundle-RequiredExecutionEnvironment: JavaSE-11 +Export-Package: it.micegroup.voila2.cartridge.library.formatters, + it.micegroup.voila2.cartridge.library, + it.micegroup.voila2.cartridge.library.javaservice.wrapper, + it.micegroup.voila2.cartridge.library.javaservice;uses:="org.eclipse.uml2.uml" +Require-Bundle: org.eclipse.emf.common;bundle-version="2.22.0", + org.eclipse.emf.transaction;bundle-version="1.9.1", + org.eclipse.uml2.uml;bundle-version="5.5.0", + org.apache.log4j;bundle-version="1.2.15", + org.apache.commons.lang3;bundle-version="3.1.0", + org.apache.commons.io;bundle-version="2.6.0", + org.eclipse.ui;bundle-version="3.118.100", + org.eclipse.ui.console;bundle-version="3.10.0", + org.eclipse.emf.mwe.core;bundle-version="1.6.0", + org.eclipse.jdt.core;bundle-version="3.24.0", + org.eclipse.jface.text;bundle-version="3.16.500", + org.eclipse.uml2.uml;visibility:=reexport, + org.eclipse.acceleo.engine;bundle-version="3.7.11";visibility:=reexport +Bundle-ActivationPolicy: lazy +Bundle-Activator: it.micegroup.voila2.cartridge.library.Activator diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/build.properties b/plugin-version/it.micegroup.voila2.cartridge.library/build.properties new file mode 100644 index 0000000000000000000000000000000000000000..98bec33aed6d7f36d1b3faa87ec4ef3da8ef5bcc --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/build.properties @@ -0,0 +1,3 @@ +output.. = bin/ +bin.includes = META-INF/,\ + plugin.xml diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/libs/ant-1.7.1.jar b/plugin-version/it.micegroup.voila2.cartridge.library/libs/ant-1.7.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..704717779f6d0d7eb026dc7af78a35e51adeec8b Binary files /dev/null and b/plugin-version/it.micegroup.voila2.cartridge.library/libs/ant-1.7.1.jar differ diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/libs/ant-launcher-1.7.1.jar b/plugin-version/it.micegroup.voila2.cartridge.library/libs/ant-launcher-1.7.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..7c8f849ec3f985f1f0783207ce9f249942b7c3ab Binary files /dev/null and b/plugin-version/it.micegroup.voila2.cartridge.library/libs/ant-launcher-1.7.1.jar differ diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/libs/antlr-2.7.7.jar b/plugin-version/it.micegroup.voila2.cartridge.library/libs/antlr-2.7.7.jar new file mode 100644 index 0000000000000000000000000000000000000000..5e5f14b35584eac2a9f0f888769f0ab93ca6d849 Binary files /dev/null and b/plugin-version/it.micegroup.voila2.cartridge.library/libs/antlr-2.7.7.jar differ diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/libs/jalopy-1.5-RC3P1.jar b/plugin-version/it.micegroup.voila2.cartridge.library/libs/jalopy-1.5-RC3P1.jar new file mode 100644 index 0000000000000000000000000000000000000000..cbd6afb0a1407f3a129abaf6798b6d25e2c32637 Binary files /dev/null and b/plugin-version/it.micegroup.voila2.cartridge.library/libs/jalopy-1.5-RC3P1.jar differ diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/plugin.xml b/plugin-version/it.micegroup.voila2.cartridge.library/plugin.xml new file mode 100644 index 0000000000000000000000000000000000000000..f422d55d6a3db6c2e32d71d3d05c09ecefd8ef34 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/plugin.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/Activator.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/Activator.java new file mode 100644 index 0000000000000000000000000000000000000000..89cf78b15753a6e0fb2e60095c90a67a64103cc9 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/Activator.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2008, 2011 Obeo. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package it.micegroup.voila2.cartridge.library; + +import org.eclipse.core.runtime.Plugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle. + */ +public class Activator extends Plugin { + + /** + * The plug-in ID. + */ + public static final String PLUGIN_ID = "it.micegroup.voila2.cartridge.library"; + + /** + * The shared instance. + */ + private static Activator plugin; + + /** + * The constructor. + */ + public Activator() { + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance. + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/entityUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/entityUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..3b32227ab9b47705c728c8b839526a476214f591 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/entityUtils.mtl @@ -0,0 +1,307 @@ +[comment encoding = UTF-8 /] +[module entityUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::angular::folderUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + + + + +[template public getEntityName(aClass : Class)] +[aClass.name/] +[/template] + +[template public getFormName(aType : Type)] +[aType.name.toLowerFirst()/]Form +[/template] + +[template public getEntityTabsName(aClass : Class)] +Tab[aClass.name/] +[/template] + +[template public getEntityDetailName(aClass : Class)] +detail[aClass.getEntityName()/] +[/template] + +[template public getEntityFormName(aClass : Class)] +[aClass.getEntityName().toLowerFirst()/]Form +[/template] + +[template public getDetailComponentName(aClass : Class)] +Detail[getEntityName()/]Component +[/template] + +[template public getSearchComponentName(aClass : Class)] +Search[getEntityName()/]Component +[/template] + +[template public getListAndSearchComponentName(aClass : Class)] +ListAndSearch[getEntityName()/]Component +[/template] + +[template public getListComponentName(aClass : Class)] +List[getEntityName()/]Component +[/template] + +[template public getTabsComponentName(aClass : Class)] +Tabs[getEntityName()/]Component +[/template] + +[template public getEntityCriteriaName(aClass : Class)] +[getEntityName()/]Criteria +[/template] + +[template public getEntityServiceName(aClass : Class)] +[getEntityName()/]Service +[/template] + +[template public getEntityPageableName(aClass : Class)] +[getEntityName()/]Pageable +[/template] + +[template public getEntityPageName(aClass : Class)] +[getEntityName()/]Page +[/template] + +[template public getEntityListName(aClass : Class)] +[getEntityName()/]List +[/template] + +[template public getEntityDetailDashedName(aClass : Class)] +detail-[camelToDash(aClass.getEntityName())/] +[/template] + +[template public getEntityTabsDashedName(aClass : Class)] +tabs-[camelToDash(aClass.getEntityName())/] +[/template] + +[template public getEntitySearchDashedName(aClass : Class)] +search-[camelToDash(aClass.getEntityName())/] +[/template] + +[template public getTabsDashedName(aClass : Class)] +tabs-[camelToDash(aClass.getEntityName())/] +[/template] + +[comment]FILE NAME[/comment] +[template public getBaseServiceFileFullPath(oclAny : OclAny)] +[getServiceFolderName().concat('/base.service.ts')/] +[/template] + +[template public getBaseEntityFileFullPath(oclAny : OclAny)] +[getEntityFolderName().concat('/baseEntity.ts')/] +[/template] + +[template public getEntityModelFileFullPath(aClass : Class)] +[getEntityFolderName().concat('/').concat(aClass.getEntityClassName().toLowerFirst()).concat('.ts')/] +[/template] + +[template public getEntityFormFileFullPath(aClass : Class)] +[getFormFolderName().concat('/').concat(aClass.getFormName().toLowerFirst()).concat('.ts')/] +[/template] + +[template public getEntityCriteriaFileFullPath(aClass : Class)] +[getCriteriaFolderName().concat('/').concat(aClass.getEntityClassName().toLowerFirst()).concat('Criteria.ts')/] +[/template] + +[template public getEntityServiceFileFullPath(aClass : Class)] +[getServiceFolderName().concat('/').concat(aClass.getEntityClassName().toLowerFirst()).concat('.service.ts')/] +[/template] + +[template public getEntityDetailComponentFileFullPath(aClass : Class, extension : String)] +[getComponentDetailFolderName(aClass).concat('/detail-').concat(camelToDash(aClass.getEntityName())).concat('.component').concat('.').concat(extension)/] +[/template] + +[template public getListAndSearchComponentFileFullPath(aClass : Class, extension : String)] +[getComponentListAndSearchFolderName(aClass).concat('/list-and-search-').concat(camelToDash(aClass.getEntityName())).concat('.component').concat('.').concat(extension)/] +[/template] + +[template public getSearchComponentFileFullPath(aClass : Class, extension : String)] +[getComponentSearchFolderName(aClass).concat('/search-').concat(camelToDash(aClass.getEntityName())).concat('.component').concat('.').concat(extension)/] +[/template] + +[template public getListComponentFileFullPath(aClass : Class, extension : String)] +[getComponentListFolderName(aClass).concat('/list-').concat(camelToDash(aClass.getEntityName())).concat('.component').concat('.').concat(extension)/] +[/template] + +[template public getTabsComponentFileFullPath(aClass : Class, extension : String)] +[getComponentTabsFolderName(aClass).concat('/tabs-').concat(camelToDash(aClass.getEntityName())).concat('.component').concat('.').concat(extension)/] +[/template] + +[template public getEntityDetailModuleFileFullPath(aClass : Class)] +[getComponentDetailFolderName(aClass).concat('/detail-').concat(camelToDash(aClass.getEntityName())).concat('.module').concat('.ts')/] +[/template] + +[template public getEntityDetailRoutingModuleFileFullPath(aClass : Class)] +[getComponentDetailFolderName(aClass).concat('/detail-').concat(camelToDash(aClass.getEntityName())).concat('-routing.module').concat('.ts')/] +[/template] + +[template public getBaseComponentFileFullPath(extension : String)] +[getComponentFolderName().concat('/base_component/base.component.').concat(extension)/] +[/template] + +[template public getBaseEntityComponentFileFullPath(extension : String)] +[getComponentFolderName().concat('/base_entity_component/base-entity.component.').concat(extension)/] +[/template] + + +[comment]MODULES[/comment] +[template public getBaseComponentModuleFileFullPath(oclAny : OclAny)] +[getComponentFolderName().concat('/base_component/base-component.module.ts')/] +[/template] + +[template public getBaseComponentRoutingModuleFileFullPath(oclAny : OclAny)] +[getComponentFolderName().concat('/base_component/base-component-routing.module.ts')/] +[/template] + +[template public getListAndSearchModuleFileFullPath(aClass : Class)] +[getComponentListAndSearchFolderName(aClass).concat('/list-and-search-').concat(camelToDash(aClass.getEntityName())).concat('.module').concat('.').concat('ts')/] +[/template] + +[template public getSearchModuleFileFullPath(aClass : Class)] +[getComponentSearchFolderName(aClass).concat('/search-').concat(camelToDash(aClass.getEntityName())).concat('.module').concat('.').concat('ts')/] +[/template] + +[template public getListModuleFileFullPath(aClass : Class)] +[getComponentListFolderName(aClass).concat('/list-').concat(camelToDash(aClass.getEntityName())).concat('.module').concat('.').concat('ts')/] +[/template] + +[template public getSearchRoutingModuleFileFullPath(aClass : Class)] +[getComponentSearchFolderName(aClass).concat('/search-').concat(camelToDash(aClass.getEntityName())).concat('-routing.module.ts')/] +[/template] + +[template public getListRoutingModuleFileFullPath(aClass : Class)] +[getComponentListFolderName(aClass).concat('/list-').concat(camelToDash(aClass.getEntityName())).concat('-routing.module.ts')/] +[/template] + +[template public getListAndSearchRoutingModuleFileFullPath(aClass : Class)] +[getComponentListAndSearchFolderName(aClass).concat('/list-and-search-').concat(camelToDash(aClass.getEntityName())).concat('-routing.module.ts')/] +[/template] + +[template public getTabsRoutingModuleFileFullPath(aClass : Class)] +[getComponentTabsFolderName(aClass).concat('/tabs-').concat(camelToDash(aClass.getEntityName())).concat('-routing.module.ts')/] +[/template] + +[template public getTabsModuleFileFullPath(aClass : Class)] +[getComponentTabsFolderName(aClass).concat('/tabs-').concat(camelToDash(aClass.getEntityName())).concat('.module.ts')/] +[/template] + +[template public getListModuleName(aClass : Class)] +List[getEntityName()/]Module +[/template] + +[template public getListAndSearchModuleName(aClass : Class)] +ListAndSearch[getEntityName()/]Module +[/template] + +[template public getSearchModuleName(aClass : Class)] +Search[getEntityName()/]Module +[/template] + +[template public getListAndSearchRoutingModuleName(aClass : Class)] +ListAndSearch[getEntityName()/]RoutingModule +[/template] + +[template public getTabsModuleName(aClass : Class)] +Tabs[getEntityName()/]Module +[/template] + +[template public getSearchRoutingModuleName(aClass : Class)] +SearchRouting[getEntityName()/]Module +[/template] + +[template public getListRoutingModuleName(aClass : Class)] +List[getEntityName()/]RoutingModule +[/template] + +[template public getTabsRoutingModuleName(aClass : Class)] +TabsRouting[getEntityName()/]Module +[/template] + +[comment]FILEs[/comment] +[template public getListModuleFileName(aClass : Class)] +list-[camelToDash(getEntityName())/]/list-[camelToDash(getEntityName())/].module +[/template] + +[template public getSearchModuleFileName(aClass : Class)] +search-[camelToDash(getEntityName())/]/search-[camelToDash(getEntityName())/].module +[/template] + +[comment]COMPONENTS[/comment] +[template public getListAndSearchComponentFileName(aClass : Class)] +list-and-search-[camelToDash(getEntityName())/].component +[/template] + +[template public getListComponentFileName(aClass : Class)] +list-[camelToDash(getEntityName())/].component +[/template] + +[template public getSearchComponentFileName(aClass : Class)] +search-[camelToDash(getEntityName())/].component +[/template] + +[template public getTabsComponentFileName(aClass : Class)] +tabs-[camelToDash(getEntityName())/].component +[/template] + +[comment]ROUTING MODULE[/comment] +[template public getListAndSearchRoutingModuleFileName(aClass : Class)] +list-and-search-[camelToDash(getEntityName())/]-routing.module +[/template] + +[template public getListRoutingModuleFileName(aClass : Class)] +list-[camelToDash(getEntityName())/]-routing.module +[/template] + +[template public getSearchRoutingModuleFileName(aClass : Class)] +search-[camelToDash(getEntityName())/]-routing.module +[/template] + +[template public getTabsRoutingModuleFileName(aClass : Class)] +tabs-[camelToDash(getEntityName())/]-routing.module +[/template] + +[template public getParentIdName(id : Property, aClass : Class, parentAss : Association)post(trim())] +[if((aClass.getParentEnd(parentAss).name = null)._not())][id.name.concat(aClass.getParentEnd(parentAss).name.toUpperFirst())/] +[else][id.name/][/if] +[/template] + +[template public getSearchFormFileFullPath(aClass : Class)] +[getFormFolderName().concat('/search').concat(aClass.getEntityName().toUpperFirst()).concat('Form.ts')/] +[/template] + +[template public getEntityModuleFileFullPath(aClass : Class)] +[getComponentFolderName().concat('/').concat(camelToUnderscore(aClass.getEntityName())).concat('/').concat(camelToDash(aClass.getEntityName())).concat('.module.ts')/] +[/template] + +[template public getEntityRouteFileFullPath(aClass : Class)] +[getComponentFolderName().concat('/').concat(camelToUnderscore(aClass.getEntityName())).concat('/').concat(camelToDash(aClass.getEntityName())).concat('.route.ts')/] +[/template] + +[template public getAllEntityModuleFileFullPath(oclAny: OclAny)] +[getComponentFolderName().concat('/').concat('entity.module.ts')/] +[/template] + +[template public getParentApiService(aClass : Class, parent : Association)] +[aClass.getParentPropertyName(parent)/]ApiService +[/template] + +[template public getParentDashName(aClass : Class, parent : Association)] +[camelToDash(aClass.getParentPropertyName(parent).toLowerFirst())/] +[/template] + +[template public getVirginParentDashName(aClass : Class, parent : Association)] +[camelToDash(aClass.getParentClass(parent).getEntityClassName().toLowerFirst())/] +[/template] + +[template public getParentFEArtifact(aClass : Class , parent : Association)] +[getRootArtifactId()/]-ms-[aClass.getParentClass(parent).getModel().name.toString().toLowerFirst().replace('_model','')/]-fe +[/template] + +[template public getParentFEArtifact(aClass : Class , parent : Class)] +[getRootArtifactId()/]-ms-[parent.getModel().name.toString().toLowerFirst().replace('_model','')/]-fe +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/folderUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/folderUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..937e1fbbc1874312f7cd38b6d7dbba37c99709e5 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/folderUtils.mtl @@ -0,0 +1,62 @@ +[comment encoding = UTF-8 /] +[module folderUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils] + +[template public getModuleName(oclAny : OclAny)] +[getArtifact().concat('-angular2')/] +[/template] + +[template public getSrcFolderName(oclAny : OclAny)] +[getModuleFolderName().concat('/src')/] +[/template] + +[template public getAppFolderName(oclAny : OclAny)] +[getSrcFolderName().concat('/app')/] +[/template] + +[template public getModuleFolderName(oclAny : OclAny)] +[getArtifact().concat('/modules/').concat(getModuleName())/] +[/template] + +[template public getServiceFolderName(oclAny : OclAny)] +[getAppFolderName().concat('/service')/] +[/template] + +[template public getComponentFolderName(oclAny : OclAny)] +[getAppFolderName().concat('/entity')/] +[/template] + +[template public getComponentDetailFolderName(aClass : Class)] +[getComponentFolderName().concat('/').concat(camelToUnderscore(aClass.name)).concat('/').concat('detail-').concat(camelToDash(aClass.name))/] +[/template] + +[template public getComponentListAndSearchFolderName(aClass : Class)] +[getComponentFolderName().concat('/').concat(camelToUnderscore(aClass.name)).concat('/').concat('list-and-search-').concat(camelToDash(aClass.name))/] +[/template] + +[template public getComponentSearchFolderName(aClass : Class)] +[getComponentFolderName().concat('/').concat(camelToUnderscore(aClass.name)).concat('/').concat('search-').concat(camelToDash(aClass.name))/] +[/template] + +[template public getComponentListFolderName(aClass : Class)] +[getComponentFolderName().concat('/').concat(camelToUnderscore(aClass.name)).concat('/').concat('list-').concat(camelToDash(aClass.name))/] +[/template] + +[template public getComponentTabsFolderName(aClass : Class)] +[getComponentDetailFolderName().concat('/').concat('tabs-').concat(camelToDash(aClass.name))/] +[/template] + +[template public getEntityFolderName(oclAny : OclAny)] +[getAppFolderName().concat('/model')/] +[/template] + +[template public getFormFolderName(oclAny : OclAny)] +[getAppFolderName().concat('/form')/] +[/template] + +[template public getCriteriaFolderName(oclAny : OclAny)] +[getAppFolderName().concat('/criteria')/] +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/generalUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/generalUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..07723ef5f5411e6aae4a46eb7e8120c883df4774 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/angular/generalUtils.mtl @@ -0,0 +1,91 @@ +[comment encoding = UTF-8 /] +[module generalUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::angular::folderUtils/] +[import it::micegroup::voila2::cartridge::library::angular::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] + +[template public getAppRoutingModuleFileName(oclAny : OclAny)] +[getAppFolderName().concat('/app-routing.module.ts')/] +[/template] + +[template public getAppModuleFileName(oclAny : OclAny)] +[getAppFolderName().concat('/app.module.ts')/] +[/template] + +[template public getAppComponentFileName(extension : String)] +[getAppFolderName().concat('/app.component.').concat(extension)/] +[/template] + +[template public getConfigMenuFileName(oclAny : OclAny)] +[getAppFolderName().concat('/configMenu.json')/] +[/template] + +[template public getConfigFileName(oclAny : OclAny)] +[getAppFolderName().concat('/config.json')/] +[/template] + +[template public getI18nFileName(language : String)] +[getSrcFolderName().concat('/assets/i18n/').concat(language).concat('.json')/] +[/template] + +[template public genInputComponent(aClass : Class, + property : Property, + value: String, + type : String, + _placeholder : String, + arrayName : String, + formGroup : String, + controlName:String, + errorMessage:String, + label : String, + buttonIcon : String, + col: String)] +[if(col.oclIsUndefined()._not())]
[/if] + + +[if(col.oclIsUndefined()._not())]
[/if] +[/template] + +[template public genInputComponentForDetail(aClass : Class, + property : Property, + type : String, + _placeholder : String, + arrayName : String, + formGroup : String, + controlName:String, + label : String, + buttonIcon : String, + col: String)] +[genInputComponent(aClass, property, aClass.getEntityName().toLowerFirst().concat('.').concat(property.name), type, _placeholder, arrayName, formGroup, controlName, aClass.getEntityDetailName().concat('.validation.required.').concat(property.name), label, buttonIcon, col)/] +[/template] + +[template public genInputComponentForSearch(aClass : Class, + property : Property, + type : String, + _placeholder : String, + arrayName : String, + formGroup : String, + controlName:String, + label : String, + buttonIcon : String, + col: String)] +[genInputComponent(aClass, property, null, type, _placeholder, arrayName, formGroup, controlName, null, label, buttonIcon, col)/] +[/template] + +[template public getAngularJsonFileName(oclAny : OclAny)] +[getModuleFolderName().concat('/angular.json')/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/associationUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/associationUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..36430f7381ac55d01a9d72a8c9b2a60700fb3b24 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/associationUtils.mtl @@ -0,0 +1,111 @@ +[comment encoding = UTF-8 /] +[module associationUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::common::entityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::common::utilities/] + + + + +[** + * Get theParent property name for the ownerClass + * @author: Vittorio Niespolo +*/] +[template public getTheParentPropertyName(ownerClass : Class, aAssociation : Association) post(trim())] +[comment][consoleMessage(getErrorSeverity(), 'ownerClass: '+ ownerClass.name +' Ass: ' + aAssociation + ' ParentEnd: ' + ownerClass.getParentEnd(aAssociation) + ' ParentEndNAme: ' + ownerClass.getParentEnd(aAssociation).name + ' ParentClassName: ' + ownerClass.getParentClass(aAssociation).name)/] [/comment] +the[getParentPropertyName(ownerClass, aAssociation)/] +[/template] + +[** + * Get theSelf property name for the ownerClass + * @author: Vittorio Niespolo +*/] +[template public getTheSelfPropertyName(ownerClass : Class,aAssociation : Association)post(trim())] +[comment][consoleMessage(getErrorSeverity(), 'TheSelf property name ownerClass: '+ ownerClass.name +' Ass: ' + aAssociation + ' ParentEnd: ' + ownerClass.getParentEnd(aAssociation) + ' ParentEndNAme: ' + ownerClass.getParentEnd(aAssociation).name + ' ParentClassName: ' + ownerClass.getParentClass(aAssociation).name)/] [/comment] +[if(ownerClass.getParentEnd(aAssociation) = null or (ownerClass.getParentEnd(aAssociation).name = null or ownerClass.getParentEnd(aAssociation).name.equalsIgnoreCase('')))] +the[ownerClass.getParentClass(aAssociation).name.toUpperFirst()/] +[else] +the[ownerClass.getParentClass(aAssociation).name.concat(ownerClass.getParentEnd(aAssociation).name.toUpperFirst())/] +[/if] +[/template] + +[** + * Get theChild property name for the ownerClass + * @author: Vittorio Niespolo , Jessica Pascarella +*/] +[template public getTheChildPropertyName(ownerClass : Class, aAssociation : Association) post(trim())] +[if(ownerClass.getChildEnd(aAssociation).name = null or ownerClass.getChildEnd(aAssociation).name.equalsIgnoreCase(''))] +the[ownerClass.getChildClass(aAssociation).name.toUpperFirst()/] +[else] +the[ownerClass.getChildClass(aAssociation).name.concat(ownerClass.getChildEnd(aAssociation).name.toUpperFirst())/] +[/if] +[/template] + +[template public getParentEntityName(aClass : Class, parentAss : Association)] +[aClass.getParentClass(parentAss).getEntityName()/][if(not aClass.getParentEnd(parentAss).name.oclIsUndefined())][aClass.getParentEnd(parentAss).name.toUpperFirst()/][/if] +[/template] + +[template public getChildEntityName(aClass : Class, childAss : Association)] +[aClass.getChildClass(childAss).getEntityName()/][if(not aClass.getChildEnd(childAss).name.oclIsUndefined())][aClass.getChildEnd(childAss).name.toUpperFirst()/][/if] +[/template] + +[template public getChildLinkName(aClass: Class, childAss : Association)] +[camelToUnderscore(aClass.getChildClass(childAss).getEntityName())/][if(not aClass.getChildEnd(childAss).name.oclIsUndefined())]['_'.concat(camelToUnderscore(aClass.getChildEnd(childAss).name))/][/if] +[/template] + +[template public getParentLinkName(aClass: Class, parentAss : Association)] +[camelToUnderscore(getParentClass(aClass, parentAss).getEntityName())/][if(not aClass.getParentEnd(parentAss).name.oclIsUndefined())]['_'.concat(camelToUnderscore(aClass.getParentEnd(parentAss).name))/][/if] +[/template] + +[template public getParentPropertyName(ownerClass : Class, aAssociation : Association) post(trim())] +[comment][consoleMessage(getErrorSeverity(), 'ParentPropertyName ownerClass: '+ ownerClass.name +' Ass: ' + aAssociation + ' ParentEnd: ' + ownerClass.getParentEnd(aAssociation) + ' ParentEndNAme: ' + ownerClass.getParentEnd(aAssociation).name + ' ParentClassName: ' + ownerClass.getParentClass(aAssociation).name)/] [/comment] +[if(ownerClass.getParentEnd(aAssociation) = null or + ownerClass.getParentEnd(aAssociation).oclIsUndefined() or + ownerClass.getParentEnd(aAssociation).name = null or + ownerClass.getParentEnd(aAssociation).name.equalsIgnoreCase(''))] +[ownerClass.getParentClass(aAssociation).name.toUpperFirst()/] +[else] +[ownerClass.getParentClass(aAssociation).name.concat(ownerClass.getParentEnd(aAssociation).name.toUpperFirst())/] +[/if] +[/template] + +[template public getParentEntityNameCheckSelf(aClass : Class, parentAss: Association)] +[if(not parentAss.isSelfRelation())][aClass.getParentPropertyName(parentAss)/][else][aClass.getEntityName()/][/if] +[/template] + +[template public getVirginParentEntityNameCheckSelf(aClass : Class, parentAss: Association)] +[if(not parentAss.isSelfRelation())][aClass.getParentClass(parentAss).getEntityClassName()/][else][aClass.getEntityName()/][/if] +[/template] + +[template public getChildEntityNameCheckSelf(aClass : Class, childAss : Association)] +[if(not childAss.isSelfRelation())][aClass.getChildEntityName(childAss)/][else][aClass.getEntityName()/][/if] +[/template] + +[template public getVirginChildEntityNameCheckSelf(aClass : Class, childAss : Association)] +[if(not childAss.isSelfRelation())][aClass.getChildClass(childAss).getEntityName()/][else][aClass.getEntityName()/][/if] +[/template] + +[template public getTheParentEntityNameCheckSelf(aClass : Class, parentAss: Association)] +[if(not parentAss.isSelfRelation())][aClass.getTheParentPropertyName(parentAss)/][else][aClass.getEntityName()/]Padre[/if] +[/template] + +[template public getTheParentObjectKeyCheckSelf(aClass : Class, parentAss: Association)] +[if(not parentAss.isSelfRelation())][aClass.getTheParentPropertyName(parentAss)/]ObjectKey[else]the[aClass.getEntityName()/]PadreObjectKey[/if] +[/template] + +[template public genParentPermission(aClass : Class, index: Integer, offset: Integer)] + [for(parentAss: Association | getParentAssociations(aClass))] + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_BY_[camelToUnderscore(aClass.getParentPropertyName(parentAss)).toUpperCase()/] = [getPortNumber()/][index/]0[intSum(offset, i)/]; + [/for] + [for(childAss : Association | getChildAssociations(aClass))] + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_BY_[camelToUnderscore(aClass.getTheChildPropertyName(childAss)).toUpperCase()/]_OBJECT_KEY = [getPortNumber()/][index/]0[offset + aClass.getParentAssociations()->size()+ i/]; + [/for] +[/template] + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/entityUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/entityUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..dce151abc5fc1246f2e8cc2806a102ac61fb1325 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/entityUtils.mtl @@ -0,0 +1,12 @@ +[comment encoding = UTF-8 /] +[module entityUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::angular::folderUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] + + +[template public getEntityName(aClass : Class)] +[aClass.name/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/idUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/idUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..4debe15215e5bf3be243c79edf4ff3a04e0ed0b8 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/idUtils.mtl @@ -0,0 +1,124 @@ +[comment encoding = UTF-8 /] +[module idUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] + +[** + * Get ParentId name of the Class for the specific association + * @author: Vittorio Niespolo +*/] +[template public getParentIdName(childClass : Class, association : Association) post(trim())] +[if((childClass.getParentEnd(association).name = null)._not())] +[childClass.getParentClass(association).getClassIdName().concat(childClass.getParentEnd(association).name.toUpperFirst())/] +[else] +[childClass.getParentClass(association).getClassIdName()/] +[/if] +[/template] + +[template public genGetObjectKey(aClass : Class)] +/** + * Restituisce l'identificativo della chiave in formato stringa. Ritorna + * conveniente nelle selezioni da lista. + * + * @return L'identificativo della chiave in formato pk1||pk2||pk3... + */ +public String getObjectKey() { + return getObjectKeyById(get[aClass.getClassIdName().toUpperFirst()/]()); +} + +public String getObjectKeyById([aClass.getClassIdType()/] identification){ + if(identification == null){ + return null; + } + StringBuilder output = new StringBuilder(); + [if(aClass.hasCompositeKey())] + [for(p: Property | aClass.getCompositeKeyAttributesWithMappedNames(true)) separator('\toutput.append(getRowIdFieldDelimiter());\n')] + output.append(identification.get[p.name.toUpperFirst()/]()); + [/for] + [else] + output.append(identification); + [/if] +[comment] [if(getCompositeKeyAttributesWithMappedNames(aClass, true) -> size() > 0 and aClass.hasParentsWithCK())] + output.append(getRowIdFieldDelimiter()); + [/if][/comment] +[comment] [for(parentAss: Association | aClass.getParentAssociationHavingCK()) separator('\toutput.append(getRowIdFieldDelimiter());\n')] + output.append(identification.get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey()); + [/for][/comment] + return output.toString(); +} +[/template] + +[template public genSetObjectKey(aClass : Class)] +/** + * Inizializza la parte identificativa del bean in base alla stringa tokenizzata + * da "||" fornita in input. + * + * @param key L'identificativo della chiave in formato pk1||pk2||pk3... + */ +public void setObjectKey(String key) { + if (key == null || key.trim().length() == 0) { + return; + } + String['['/]] array = StringUtils.splitByWholeSeparatorPreserveAllTokens(key, getRowIdFieldDelimiter()); + int ctr = 0; + + [if(aClass.hasCompositeKey())] + [aClass.name.concat('Key').toLowerFirst()/] = new [aClass.name.concat('Key')/](); +[comment] [for(parentAss: Association | aClass.getParentAssociationHavingCK())separator('\tctr++;\n')] + [aClass.getClassIdName().toLowerFirst()/].set[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey(getStringCheckedAgainstNullContent(array['['/]ctr])); + [/for] + + [if(aClass.getCompositeKeyAttributesWithMappedNames(false) -> size() > 0 and aClass.hasParentsWithCK())] + ctr++;[/if][/comment] + [for(p: Property | aClass.getCompositeKeyAttributesWithMappedNames(true))separator('\tctr++;\n')] + [aClass.getClassIdName().toLowerFirst()/].set[p.name.toUpperFirst()/](get[getJavaType(p.type)/]CheckedAgainstNullContent(array['['/]ctr])); + [/for] + [else] + set[aClass.getClassIdName().toUpperFirst()/](get[aClass.getClassIdType()/]CheckedAgainstNullContent(array['['/]ctr])); + [/if] +} +[/template] + + +[template public getClassIdType(aClass: Class) post(trim())] +[if(aClass.hasCompositeKey())] +[aClass.name.concat('Key')/] +[else] +[for(p:Property | aClass.getAttributeList())] +[if(p.isID)][p.type.getJavaType()/][/if] +[/for] +[/if] +[/template] + +[template public getAngularClassIdType(aClass: Class) post(trim())] +[if(aClass.hasCompositeKey())] +[aClass.name.concat('Key')/] +[else] +[for(p:Property | aClass.getAttributeList())] +[if(p.isID)][p.type.getAngularType()/][/if] +[/for] +[/if] +[/template] + +[template public getClassIdName(aClass: Class) post(trim())] +[if(aClass.hasCompositeKey())] +[aClass.name.concat('Key').toLowerFirst()/] +[else] +[for(p:Property | aClass.getAttributeList())] +[if(p.isID)][p.name/][/if] +[/for] +[/if] +[/template] + + +[template public getIdGetter(aClass : Class, relatedClass : Class)] +[aClass.name.toLowerFirst().concat('.get').concat(relatedClass.getClassIdName().toUpperFirst()).concat('()')/] +[/template] + +[template public getObjectKeyGetter(aClass : Class, relatedClass : Class)] +[aClass.name.toLowerFirst().concat('.getObjectKey()')/] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/utilities.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/utilities.mtl new file mode 100644 index 0000000000000000000000000000000000000000..3a2fa58f1db2e0aa20809f99d5672231a0106b96 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/common/utilities.mtl @@ -0,0 +1,22 @@ +[comment encoding = UTF-8 /] +[module utilities('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] + + +[query public getAttributesFromClassAndParents(arg0 : Class) : Collection(OclAny) + = getClassAttributesAsSequence(arg0.getAttributesForPresentation()) -> union(getParentIdAttributesAsSequence()) +/] + +[query public getParentIdAttributesAsSequence(arg0 : Class) : Sequence(OclAny) + = arg0.getParentIds().oclAsSet() -> asSequence() +/] + +[query public getClassAttributesAsSequence(arg0 : Collection(OclAny)) : Sequence(OclAny) + = arg0.oclAsSet() -> asSequence() +/] + +[query public intSum(a : Integer, b: Integer) : String = a + b + ''/] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/AbstractTypeReplacementStrategy.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/AbstractTypeReplacementStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..1b97ef7004d1a2cdf2b79800d307f74a798461c2 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/AbstractTypeReplacementStrategy.java @@ -0,0 +1,36 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** + * Abstract TypeReplacementStrategy implementation. + * + * @author Karsten Klein, hybrid labs + * + */ +public abstract class AbstractTypeReplacementStrategy implements TypeReplacementStrategy { + + public String modulateType(String type) { + return type; + } + + public String composeReplace(CharacterSequence type) { + CharSequence t = type.substring(type.lastIndexOf('.') + 1); + return t + "$1"; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/Beautifier.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/Beautifier.java new file mode 100644 index 0000000000000000000000000000000000000000..392e45c3c86b51a2bfa6e2c403be00bf4885019c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/Beautifier.java @@ -0,0 +1,35 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** + * Interface defining the signatures for all Beautifier. + * + * @author Karsten Klein, hybrid labs + * + */ +public interface Beautifier { + + /** + * Processes the characterSequence and beautifies its content. + * + * @param characterSequence The character sequence serving as input for + * the beautification. + */ + public void beautify(CharacterSequence characterSequence); + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/BeautifierContext.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/BeautifierContext.java new file mode 100644 index 0000000000000000000000000000000000000000..7e3aa23cd93042d3682f394d9570b889dc787753 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/BeautifierContext.java @@ -0,0 +1,144 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import java.util.ArrayList; +import java.util.IdentityHashMap; +import java.util.Set; +import java.util.TreeSet; + +import de.hunsicker.jalopy.language.antlr.JavaNode; + +/** + * Context object used during a beatification process. + * + * @author Karsten Klein, hybrid labs + * + */ +public class BeautifierContext implements ImportBeautifierJalopyConstants { + + private TypeContext currentTypeContext; + + private IdentityHashMap processedNodes = new IdentityHashMap(); + + private int packageLine = -1; + private int packageEnd = -1; + + private int importEndLine = -1; + private int importEnd = -1; + + private Set typeContexts = new TreeSet(); + + public BeautifierContext() { + initializeTypeContext(-1); + } + + public void preProcess(JavaNode javaNode) { + processedNodes.put(createKey(javaNode), null); + } + + private Object createKey(JavaNode javaNode) { + return javaNode; + } + + public boolean isProcessed(JavaNode javaNode) { + return processedNodes.containsKey(createKey(javaNode)); + } + + public void addToCurrentTypeContext(JavaNode javaNode) { + currentTypeContext.addComponent(javaNode.getText()); + } + + public TypeContext getCurrentTypeContext() { + return currentTypeContext; + } + + public void postProcess(JavaNode javaNode) { + if (javaNode.getType() == TYPE) { + terminateCurrentSequence(javaNode, -1); + } + } + + private void initializeTypeContext(int type) { + currentTypeContext = new TypeContext(type, new ArrayList()); + } + + public void terminateCurrentSequence(JavaNode javaNode, int typeOfSequenceScope) { + if (currentTypeContext != null) { + currentTypeContext.reviseType(); + + if (currentTypeContext.getType() == PACKAGE_ANNOTATION) { + if (packageEnd == -1) { + packageEnd = javaNode.getEndColumn(); + packageLine = javaNode.getEndLine(); + } + } + + if (currentTypeContext.getType() == IMPORT_STATEMENT || + currentTypeContext.getType() == STATIC_IMPORT_STATEMENT) { + if (javaNode.getEndLine() > importEndLine) { + importEndLine = javaNode.getEndLine(); + importEnd = javaNode.getEndColumn(); + } + } + + if (currentTypeContext.getType() == CLASS) { + if (currentTypeContext.getLength() == 1) { + typeContexts.add(currentTypeContext); + } + } + + if (currentTypeContext.getType() == PACKAGE_ANNOTATION) { + if (currentTypeContext.getLength() == 1) { + typeContexts.add(currentTypeContext); + } + } + + if (currentTypeContext.getLength() > 1) { + typeContexts.add(currentTypeContext); + } + } + + if (typeOfSequenceScope == -1) { + initializeTypeContext(javaNode.getType()); + } else { + initializeTypeContext(typeOfSequenceScope); + } + + } + + public Set getSequences() { + return typeContexts; + } + + public int getPackageEnd() { + return packageEnd; + } + + public int getPackageLine() { + return packageLine; + } + + public int getImportEndLine() { + return importEndLine; + } + + public int getImportEndColumn() { + return importEnd; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/CharacterSequence.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/CharacterSequence.java new file mode 100644 index 0000000000000000000000000000000000000000..2c7cda0b83f230a955bea1eae5fd59cef588464a --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/CharacterSequence.java @@ -0,0 +1,225 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** + * This implementation of the JDK CharSequence hides the details of the + * realization of the underlying implementation, while tryping to + * minimize conversions between strings, stringbuffers and charsequences. + * Moreover this class is used as part of the Beautifier interface definition. + * + * @author Karsten Klein, hybrid labs + * + */ +public final class CharacterSequence implements CharSequence, Comparable { + + private String string; + private CharSequence charSequence; + private StringBuffer stringBuffer; + + /** + * Constructs a CharacterSequence object based on the provided StringBuffer. + * + * @param stringBuffer The StringBuffer the Character Sequence is based on. + */ + public CharacterSequence(StringBuffer stringBuffer) { + set(stringBuffer); + } + + /** + * Constructs a CharacterSequence object based on the provided String. + * + * @param string The String the Character Sequence is based on. + */ + public CharacterSequence(String string) { + set(string); + } + + /** + * Constructs a CharacterSequence object based on the provided CharSequence. + * + * @param charSequence The CcharSequence the Character Sequence is based on. + */ + public CharacterSequence(CharSequence charSequence) { + set(charSequence); + } + + /** + * Returns the content of the CharacterSequence as String. + * + * @return The String representation. + */ + public String getString() { + if (string == null) { + if (charSequence != null) { + string = charSequence.toString(); + } else if (stringBuffer != null) { + string = stringBuffer.toString(); + } + } + return string; + } + + /** + * Returns the content of the CharacterSequence as StringBuffer. + * + * @return The StringBuffer representation. + */ + public StringBuffer getStringBuffer() { + if (stringBuffer == null) { + stringBuffer = new StringBuffer(getString()); + } + return stringBuffer; + } + + public CharSequence getCharSequence() { + return charSequence; + } + + public void set(StringBuffer stringBuffer) { + this.charSequence = stringBuffer; + this.stringBuffer = stringBuffer; + this.string = null; + } + + public void set(CharacterSequence characterSequence) { + this.charSequence = characterSequence.charSequence; + this.stringBuffer = characterSequence.stringBuffer; + this.string = characterSequence.string; + } + + public void set(CharSequence charSequence) { + this.charSequence = charSequence; + this.stringBuffer = charSequence instanceof StringBuffer ? (StringBuffer) charSequence : null;; + this.string = charSequence instanceof String ? (String) charSequence : null; + } + + public void set(String string) { + this.stringBuffer = null; + this.charSequence = string; + this.string = string; + } + + /** + * {@inheritDoc} + */ + public String toString() { + return getString(); + } + + /** + * {@inheritDoc} + */ + public int length() { + return getCharSequence().length(); + } + + /** + * {@inheritDoc} + */ + public char charAt(int index) { + return charSequence.charAt(index); + } + + /** + * {@inheritDoc} + */ + public CharSequence subSequence(int start, int end) { + return charSequence.subSequence(start, end); + } + + public int lastIndexOf(String string) { + if (stringBuffer != null) { + return stringBuffer.lastIndexOf(string); + } + return getString().lastIndexOf(string); + } + + public int lastIndexOf(char c) { + if (stringBuffer != null) { + return stringBuffer.lastIndexOf(String.valueOf(c)); + } + return getString().lastIndexOf(c); + } + + public boolean endsWith(char c) { + return charAt(length() - 1) == c; + } + + public boolean endsWith(String suffix) { + return getString().endsWith(suffix); + } + + public CharSequence substring(int start) { + return subSequence(start, length()); + } + + public boolean startsWith(String suffix) { + return getString().startsWith(suffix); + } + + public boolean startsWith(CharacterSequence sequence) { + return getString().startsWith(sequence.getString()); + } + + public int compareTo(CharacterSequence cs) { + return getString().compareTo(cs.getString()); + } + + public int hashCode() { + return getCharSequence().hashCode(); + } + + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj instanceof String) { + return getString().equals(obj); + } + if (obj instanceof StringBuffer) { + return getStringBuffer().equals(obj); + } + CharacterSequence cs = (CharacterSequence) obj; + return getStringBuffer().equals(cs.getStringBuffer()); + } + + public CharacterSequence subCharacterSequence(int start, int end) { + return new CharacterSequence(getString().substring(start, end)); + } + + public void append(CharacterSequence imports) { + append(imports.getCharSequence()); + } + + public void append(String string) { + getStringBuffer().append(string); + charSequence = stringBuffer; + string = null; + } + + public void append(CharSequence cs) { + getStringBuffer().append(cs); + charSequence = stringBuffer; + string = null; + } + + public void append(char c) { + getStringBuffer().append(c); + charSequence = stringBuffer; + string = null; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/DefaultTypeReplacementStrategy.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/DefaultTypeReplacementStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..e562611dc252d46eb6ac476e9b4d6dc75e121a4e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/DefaultTypeReplacementStrategy.java @@ -0,0 +1,38 @@ +package it.micegroup.voila2.cartridge.library.formatters; + + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** + * Default implementation of the TypeReplacement strategy. + * + * @author Karsten Klein, hybrid labs + * + */ +public class DefaultTypeReplacementStrategy extends AbstractTypeReplacementStrategy { + + private String suffix; + + public DefaultTypeReplacementStrategy(String suffix) { + this.suffix = "(" + suffix + ")"; + } + + public String composeMatch(CharacterSequence type) { + return type.getString().replaceAll("\\.", "\\\\s*\\.\\\\s*") + suffix; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/ImportBeautifierJalopyConstants.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/ImportBeautifierJalopyConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..55b02b578e23571a36c8ffa87beca019819c931a --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/ImportBeautifierJalopyConstants.java @@ -0,0 +1,46 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** + * Interface collecting the constants used in Jalopy to identify the different AST nodes. + * + * @author Karsten Klein, hybrid labs + * + */ +public interface ImportBeautifierJalopyConstants { + public static final int TYPE = 18; + public static final int CLASS = 19; + public static final int PACKAGE = 21; + public static final int EXTENDS_CLAUSE = 23; + public static final int IMPLEMENTS_CLAUSE = 24; + public static final int CAST = 32; + public static final int EXPRESSION = 33; + public static final int IMPORT_STATEMENT = 35; + public static final int STATIC_IMPORT_STATEMENT = 50; + public static final int PACKAGE_ANNOTATION = 55; + public static final int ANNOTATION = 56; + public static final int ANNOTATION_VALUE = 57; + public static final int GENERIC_UPPER_BOUNDS = 65; + public static final int SEMI = 74; + public static final int IDENT = 79; + public static final int DOT = 80; + public static final int COMMA = 85; + public static final int AT = 107; + public static final int THROWS = 118; + public static final int NEW = 168; +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/JavaBeautifier.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/JavaBeautifier.java new file mode 100644 index 0000000000000000000000000000000000000000..4d25023ee002f8a674672bf01c88efbb918f0efe --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/JavaBeautifier.java @@ -0,0 +1,208 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +/** + * Copyright 2008 hybrid labs + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.log4j.Appender; +import org.apache.log4j.Logger; + +import de.hunsicker.jalopy.Jalopy; +import de.hunsicker.jalopy.language.antlr.JavaNode; +import de.hunsicker.jalopy.storage.Loggers; + +/** + * Abstract implementation of the Beautifier interface focussing on Java + * beautification. + * + * @author Karsten Klein, hybrid labs + * + */ +public abstract class JavaBeautifier implements Beautifier, + ImportBeautifierJalopyConstants { + + private static final Pattern PATTERN_NEWLINE = Pattern.compile("\\n"); + + private static Logger LOG = Logger.getLogger(JavaBeautifier.class); + + private String conventionFilePath; + + private boolean conventionFileInitialized = false; + + public String getConventionFilePath() { + return conventionFilePath; + } + + public void setConventionFilePath(String conventionFilePath) { + this.conventionFilePath = conventionFilePath; + conventionFileInitialized = false; + } + + protected JavaNode createJavaNode( + it.micegroup.voila2.cartridge.library.formatters.CharacterSequence sequence, + File file) { + initialize(); + + Jalopy jalopy = initializeJalopy(); + JavaNode node; + try { + jalopy.setInput(sequence.getString(), file.getAbsolutePath()); + + node = jalopy.parse(); + } finally { + cleanupJalopy(jalopy); + } + + return node; + } + + @SuppressWarnings("unchecked") + private synchronized void cleanupJalopy(Jalopy jalopy) { + try { + List toBeDeleted = new ArrayList(); + + Logger logger = Loggers.ALL; + + for (Enumeration it = logger.getAllAppenders(); it + .hasMoreElements();) { + Object obj = it.nextElement(); + String name = obj.getClass().getName(); + if (name.equals("de.hunsicker.jalopy.Jalopy$SpyAppender")) + toBeDeleted.add((Appender) obj); + } + + for (Appender appender : toBeDeleted) + logger.removeAppender(appender); + } catch (Exception e) { + } + + try { + jalopy.reset(); + } catch (Exception e) { + } + } + + private URL testUrl(URL url) { + if (url != null) { + InputStream inputStream = null; + try { + inputStream = url.openStream(); + } catch (IOException e) { + return null; + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + // ignore + } + } + } + return url; + } + return null; + } + + private void initialize() { + initializeConventionFileUrl(); + } + + private void initializeConventionFileUrl() { + if (conventionFileInitialized) { + return; + } + conventionFileInitialized = true; + + URL url = null; + if (conventionFilePath != null) { + url = testUrl(getClass().getResource(conventionFilePath)); + + if (url == null) { + try { + url = testUrl(new URL("file:" + conventionFilePath)); + } catch (MalformedURLException e) { + LOG.error("Cannot read convention file from 'file:" + + conventionFilePath + "'.", e); + } + } + } + + if (url == null) { + url = testUrl(getClass().getResource("/default-convention.xml")); + } + + if (url != null) { + try { + Jalopy.setConvention(url); + } catch (IOException e) { + LOG.error("Cannot read convention file from '" + url + "'.", e); + } + } + } + + protected int findPositionInCharacterSequence(CharacterSequence sequence, + int line, int column) { + Pattern newlinePattern = PATTERN_NEWLINE; + Matcher newLineMatcher = newlinePattern.matcher(sequence); + int pos = 0; + line--; + while (line > 0) { + newLineMatcher.find(); + pos = newLineMatcher.end(); + line--; + } + pos += column; + + if (pos >= 0) { + while (pos < sequence.length() + && (sequence.charAt(pos) == '\r' || sequence.charAt(pos) == '\n')) { + pos++; + } + } + + return pos; + } + + protected void format(CharacterSequence sequence, File file) { + Jalopy jalopy = initializeJalopy(); + jalopy.setInput(sequence.getString(), file.getAbsolutePath()); + StringBuffer sb = new StringBuffer(); + jalopy.setOutput(sb); + jalopy.format(); + sequence.set(sb); + } + + private Jalopy initializeJalopy() { + Jalopy jalopy = new Jalopy(); + jalopy.setInspect(false); + jalopy.setBackup(false); + jalopy.setForce(false); + // NOTE: the convention file is static (done during first initialize() + // invocation) + return jalopy; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/JavaImportBeautifierImpl.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/JavaImportBeautifierImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..90e652230882ecb0014184f17f72236bfc49dda2 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/JavaImportBeautifierImpl.java @@ -0,0 +1,489 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import java.io.File; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.log4j.Logger; + +import de.hunsicker.jalopy.language.antlr.JavaNode; +import it.micegroup.voila2.cartridge.library.formatters.DefaultTypeReplacementStrategy; +import it.micegroup.voila2.cartridge.library.formatters.TypeReplacementStrategy; + +/** + * Simple oAW beautifier implementation based on Jalopy and the antlr JavaNode. The + * implementation substitutes fully qualified class names (as long as there is + * no conflict) with the short name and the according import statement. + * + * @author Karsten Klein, hybrid labs + * @author Jan Labrie + */ +public class JavaImportBeautifierImpl extends JavaBeautifier { + + private static Logger LOG = Logger.getLogger(JavaImportBeautifierImpl.class); + + private static final String LINESEP = System.getProperty("line.separator"); + + private static final CharacterSequence DEFAULT_PACKAGE = new CharacterSequence(new StringBuffer()); + + private static Set startSequenceTypeSet = new HashSet(); + private static Set terminateSequenceTypeSet = new HashSet(); + + static { + startSequenceTypeSet.add(new Integer(PACKAGE)); + startSequenceTypeSet.add(new Integer(IMPORT_STATEMENT)); + startSequenceTypeSet.add(new Integer(GENERIC_UPPER_BOUNDS)); + startSequenceTypeSet.add(new Integer(EXTENDS_CLAUSE)); + startSequenceTypeSet.add(new Integer(IMPLEMENTS_CLAUSE)); + startSequenceTypeSet.add(new Integer(TYPE)); + startSequenceTypeSet.add(new Integer(EXPRESSION)); + startSequenceTypeSet.add(new Integer(NEW)); + startSequenceTypeSet.add(new Integer(PACKAGE_ANNOTATION)); + startSequenceTypeSet.add(new Integer(ANNOTATION)); + startSequenceTypeSet.add(new Integer(ANNOTATION_VALUE)); + startSequenceTypeSet.add(new Integer(CAST)); + startSequenceTypeSet.add(new Integer(CLASS)); + startSequenceTypeSet.add(new Integer(AT)); + startSequenceTypeSet.add(new Integer(SEMI)); + startSequenceTypeSet.add(new Integer(STATIC_IMPORT_STATEMENT)); + startSequenceTypeSet.add(new Integer(DOT)); + startSequenceTypeSet.add(new Integer(COMMA)); + startSequenceTypeSet.add(new Integer(THROWS)); + } + + static { + // these terminate a sequence AND inherit the scope of the current (separator types) + terminateSequenceTypeSet.add(new Integer(10)); + terminateSequenceTypeSet.add(new Integer(11)); + terminateSequenceTypeSet.add(new Integer(39)); + terminateSequenceTypeSet.add(new Integer(45)); + terminateSequenceTypeSet.add(new Integer(DOT)); + terminateSequenceTypeSet.add(new Integer(100)); + terminateSequenceTypeSet.add(new Integer(109)); + terminateSequenceTypeSet.add(new Integer(COMMA)); + } + + private boolean isOrganizeImports = true; + private boolean isStrict = true; + private boolean isFormat = true; + + private Map strategyMap = new HashMap(); + + public JavaImportBeautifierImpl() { + // populate strategy map + strategyMap.put(new Integer(NEW), new DefaultTypeReplacementStrategy("[\\,|\\<|\\)|\\[|\\<|\\(|\\s]")); + strategyMap.put(new Integer(GENERIC_UPPER_BOUNDS), new DefaultTypeReplacementStrategy( "[\\(|\\,|\\<|\\[|\\,|\\>|\\s]")); + strategyMap.put(new Integer(EXTENDS_CLAUSE), new DefaultTypeReplacementStrategy("[\\(|\\>|\\<|\\[|\\,|\\;|\\{\\s]")); + strategyMap.put(new Integer(IMPLEMENTS_CLAUSE), new DefaultTypeReplacementStrategy("[\\(|\\>|\\<|\\[|\\,|\\;|\\{|\\s]")); + strategyMap.put(new Integer(THROWS), new DefaultTypeReplacementStrategy("[\\(|\\,|\\>|\\<|\\)|\\.|\\s*]")); + strategyMap.put(new Integer(TYPE), new DefaultTypeReplacementStrategy("[\\(|\\,|\\>|\\)\\[\\<|\\;|\\s|\\.class]")); + strategyMap.put(new Integer(EXPRESSION), new DefaultTypeReplacementStrategy("[\\(|\\,|\\>|\\<|\\)|\\.|\\s*]")); + strategyMap.put(new Integer(ANNOTATION), new DefaultTypeReplacementStrategy("[\\(|\\>|\\<|\\[\\,|\\;|\\{|\\s]")); + strategyMap.put(new Integer(AT), new DefaultTypeReplacementStrategy("[\\(|\\>|\\<|\\[\\,|\\;|\\{|\\s]")); + strategyMap.put(new Integer(CAST), new DefaultTypeReplacementStrategy("[\\(|\\)|\\>|\\<|\\[\\,|\\;|\\{|\\s|\\.]")); + strategyMap.put(new Integer(ANNOTATION_VALUE), new DefaultTypeReplacementStrategy("[\\(|\\>|\\<|\\[|\\,|\\;|\\{|\\s|\\.]")); + } + + public boolean isFormat() { + return isFormat; + } + + public void setFormat(boolean isFormat) { + this.isFormat = isFormat; + } + + public boolean isOrganizeImports() { + return isOrganizeImports; + } + + public void setOrganizeImports(boolean isOrganizeImports) { + this.isOrganizeImports = isOrganizeImports; + } + + public boolean isStrict() { + return isStrict; + } + + public void setStrict(boolean isOrganizeOnWildcards) { + this.isStrict = isOrganizeOnWildcards; + } + + public void beautify(CharacterSequence sb) { + File file = null; + try { + file = File.createTempFile("hybridlabs-beautifier-" + System.currentTimeMillis(), ".java"); + if (isOrganizeImports()) { + organizeImports(sb, file); + } + if (isFormat()) { + format(sb, file); + } + } catch (Exception e) { + handleError(e, sb); + } catch (Error e) { + handleError(e, sb); + } finally { + if (file != null) { + file.delete(); + } + } + } + + private void handleError (Throwable e, CharacterSequence sb) { + LOG.error(e.getClass().getSimpleName()+" occured during beautification. Content:" + LINESEP + sb.subSequence(0, sb.length()) + "...", e); + } + + private void organizeImports(CharacterSequence sequence, File file) { + + // create formatter context for this file + BeautifierContext formatterContext = new BeautifierContext(); + + // use formatter context to traverse the abstract syntax tree + JavaNode node = createJavaNode(sequence, file); + traverseAst(node, formatterContext, 0); + + Set sequences = formatterContext.getSequences(); + + // dump all detected sequences to system out in DEBUG mode + if (LOG.isDebugEnabled()) { + printSequences(sequences); + } + + // extract package from ast + CharacterSequence currentPackage = DEFAULT_PACKAGE; + for (TypeContext typeContext : sequences) { + if (typeContext.getType() == PACKAGE_ANNOTATION) { + currentPackage = typeContext.getQualifiedName(); + break; + } + } + + // determine absolute position of package declaration + int packageEndPos = findPositionInCharacterSequence(sequence, + formatterContext.getPackageLine(), formatterContext.getPackageEnd()); + + // determine absolute position of import declaration + int importEndPos = findPositionInCharacterSequence(sequence, + formatterContext.getImportEndLine(), formatterContext.getImportEndColumn()); + + // split the file in header (including the package declaration) ... + CharacterSequence result; + if (DEFAULT_PACKAGE.equals(currentPackage)) { + result = new CharacterSequence(new StringBuffer()); + packageEndPos = 0; + } else { + result = sequence.subCharacterSequence(0, packageEndPos); + } + + if (LOG.isDebugEnabled()) { + LOG.debug("Package: " + currentPackage + "[" + packageEndPos + "]"); + LOG.debug("Imports end at: " + importEndPos); + } + + if (importEndPos == -1) { + importEndPos = packageEndPos; + } + + CharSequence imports = sequence.subSequence(packageEndPos, importEndPos); + // do not organize anything if there is a wildcard import - this could lead to ambiguity + if (isStrict && imports.toString().contains(".*")) { + LOG.info("Did not organize import "+file.getAbsolutePath()+" - file contains wildcard imports."); + } else { + // and the body part (imports, comments, classes/interfaces) + CharSequence body = sequence.subSequence(importEndPos, sequence.length()); + + // extract the detected imports sequences + Set importTypes = extractImports(sequences); + + // set for monitoring the already replaced types + Set replacedSet = new TreeSet(); + + for (TypeContext typeContext : sequences) { + if (typeContext.getType() == CLASS) { + if (currentPackage == null) { + importTypes.add(typeContext.getQualifiedName()); + } else { + CharacterSequence sb = new CharacterSequence(new StringBuffer(100)); + sb.append(currentPackage); + sb.append('.'); + sb.append(typeContext.getQualifiedName()); + importTypes.add(sb); + } + } + } + + body = replaceFullQualifiedClassNames(body, sequences, importTypes, replacedSet); + + if (imports.length() > 0) { + result.append(imports); + } + + // populate header with imports + int numNewImports = 0; + for (CharacterSequence type : replacedSet) { + if (!isRedundant(type, importTypes)) { + + int index = type.lastIndexOf('.'); + CharSequence typePackage = index == -1 ? DEFAULT_PACKAGE : type.subSequence(0, index); + + // make sure the import is not redundant, because it is part of the current package + // and also the java.lang package does not need to be imported + if (!currentPackage.equals(typePackage) && !typePackage.equals("java.lang")) { + result.append("import "); + result.append(type); + result.append(";"); + result.append(LINESEP); + numNewImports += 1; + } + } + } + + // separate existing imports from added imports + if (numNewImports > 0) { + result.append(LINESEP); + } + + // supplement the rest of the source + result.append(body); + + sequence.set(result); + } + } + + private CharSequence replaceFullQualifiedClassNames(CharSequence body, Set sequences, Set importTypes, Set replacedSet) { + + // body consists of import, comment, classes etc + // the existing imports should not be touched by the replacement + + Set conflictCache = new HashSet(); + + // At first replace all java.lang imports + for (TypeContext typeContext : sequences) { + if (typeContext.getQualifiedName().startsWith("java.lang")) { + body = replaceFullQualifiedClassNames(typeContext, body, importTypes, replacedSet, conflictCache); + } + } + + // And then the 'ordinary' ones + for (TypeContext typeContext : sequences) { + body = replaceFullQualifiedClassNames(typeContext, body, importTypes, replacedSet, conflictCache); + } + + return body; + } + + private CharSequence replaceFullQualifiedClassNames( + TypeContext typeContext, + CharSequence body, + Set importTypes, + Set replacedSet, + Set conflictCache) { + + CharacterSequence type = typeContext.getQualifiedName(); + + if (!replacedSet.contains(type)) { + if (typeContext.isValidType()) { + // ensure there are no conflicts + if (!isConflict(type, importTypes, replacedSet, conflictCache)) { + // access the replacement strategy + TypeReplacementStrategy strategy = (TypeReplacementStrategy) + strategyMap.get(new Integer(typeContext.getType())); + + if (strategy != null) { + String replacement = strategy.composeReplace(type); + Pattern pattern = Pattern.compile(strategy + .composeMatch(type)); + Matcher matcher = pattern.matcher(body); + + // check whether the pattern was matched + if (matcher.find()) { + // match and replace the type by the short form (in the sub string) + body = matcher.replaceAll(replacement); + + // mark type as replaced + replacedSet.add(type); + } + } + } + } + } + return body; + } + + private Set extractImports(Set sequences) { + if (LOG.isDebugEnabled()) { + LOG.debug("These are the existing imports:"); + } + Set importTypes = new TreeSet(); + + for (TypeContext typeContext : sequences) { + if (typeContext.getType() == IMPORT_STATEMENT) { + CharacterSequence sb = typeContext.getQualifiedName(); + importTypes.add(sb); + if (LOG.isDebugEnabled()) { + LOG.debug(sb); + } + } else if (typeContext.getType() == STATIC_IMPORT_STATEMENT) { + CharacterSequence sb = new CharacterSequence(new StringBuffer(200)); + sb.append("static "); + sb.append(typeContext.getQualifiedName()); + importTypes.add(sb); + if (LOG.isDebugEnabled()) { + LOG.debug(sb); + } + } + } + return importTypes; + } + + private void printSequences(Set sequences) { + LOG.debug("These are the symbols that are candidate to be replaced by imports:"); + for (TypeContext typeContext : sequences) { + LOG.debug(typeContext); + } + } + + private boolean isConflict(CharacterSequence type, Set importList, Set replacedSet, Set conflictCache) { + if (isConflict(type, replacedSet, conflictCache)) { + return true; + } + + if (isConflict(type, importList, conflictCache)) { + return true; + } + return false; + } + + private boolean isConflict(CharacterSequence type, Set testSet, Set conflictCache) { + if (testSet.contains(type)) { + return false; + } + + if (conflictCache.contains(type)) { + return true; + } + + for (CharacterSequence importType : testSet) { + if (!importType.endsWith('*')) { + if (!type.equals(importType)) { + CharSequence t = importType + .substring(importType.lastIndexOf('.') + 1); + if (type.endsWith("." + t) && !importType.startsWith("static ")) { + conflictCache.add(type); + return true; + } + } + } + } + return false; + } + + /** + * Method to calculate whether a symbol is already covered by a set of import sequences + * @param type The type which is checked + * @param importList The list of import statements in which regard the checking is done + * @return true when the symbol is covered by the import list + */ + private final boolean isRedundant(CharacterSequence type, Set importList) { + for (CharacterSequence importType : importList) { + if (importType.equals(type) || + importType.endsWith('*') && + notLastPart(type).equals(notLastPart(importType))) { + return true; + } + } + return false; + } + + private String notLastPart(CharacterSequence charSeq) { + String result= ""; + int i = charSeq.lastIndexOf('.'); + if (i >= 0) { + result = charSeq.subCharacterSequence(0, i).toString(); + } + return result; + } + + private int traverseAst(JavaNode ast, BeautifierContext context, int depth) { + + // print this node + if (LOG.isDebugEnabled()) { + preparePrintln(depth); + LOG.debug(ast); + } + + if (context.isProcessed(ast)) { + return -1; + } + + context.preProcess(ast); + + // check whether this subtree is to be ignored completely + Integer astType = new Integer(ast.getType()); + + if (terminateSequenceTypeSet.contains(astType)) { + context.terminateCurrentSequence(ast, context.getCurrentTypeContext().getType()); + } else if (startSequenceTypeSet.contains(astType)) { + context.terminateCurrentSequence(ast, -1); + } + + if (LOG.isDebugEnabled()) { + LOG.debug("TRAVERSING: " + ast.getType()); + } + + // traverse all children + JavaNode child = (JavaNode) ast.getFirstChild(); + if (child != null) { + traverseAst(child, context, depth + 1); + } + + context.postProcess(ast); + + // print if a type was detected + if (ast.getType() == IDENT) { + context.addToCurrentTypeContext(ast); + if (LOG.isDebugEnabled()) { + LOG.debug(preparePrintln(depth)+context.getCurrentTypeContext()); + } + } + + // continue visiting the tree (traverse siblings) + JavaNode next = (JavaNode) ast.getNextSibling(); + while (next != null) { + traverseAst(next, context, depth); + next = (JavaNode) next.getNextSibling(); + } + + return -1; + } + + private String preparePrintln(int depth) { + StringBuilder result = new StringBuilder(); + for (int i = 0; i < depth; i++) { + result.append(" "); + } + return result.toString(); + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/PrettierFormatter.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/PrettierFormatter.java new file mode 100644 index 0000000000000000000000000000000000000000..c885f3ca25d9f3bd63d66599b0e7bd8bada3002b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/PrettierFormatter.java @@ -0,0 +1,120 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +import java.io.File; +import java.io.IOException; +import java.util.Scanner; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; + +public class PrettierFormatter { + private String[] cmd; + + public PrettierFormatter() { + cmd = new String[] { + "cmd.exe" , "/c", "prettier", + "--write", + "--print-width", "180", + "--tab-width", "4", + "--trailing-comma", "none", + "--single-quote", + "--arrow-parens", "avoid", + "--end-of-line", "crlf", + "" + }; + } + + public String format(String input, String fileName) { + String formattedOutput = input; + File temp = null; + try { + temp = File.createTempFile("acceleo-"+ System.currentTimeMillis(), "." + FilenameUtils.getExtension(fileName)); + FileUtils.writeStringToFile(temp, input, "utf-8"); + + cmd[cmd.length - 1] = temp.getAbsolutePath(); + + ProcessBuilder builder = new ProcessBuilder(cmd); + Process p = builder.start(); + int result = p.waitFor(); + if (result != 0) { + Scanner scanner = new Scanner(p.getErrorStream()); + while (scanner.hasNext()) { + System.err.println(scanner.nextLine()); + } + scanner.close(); + } else { + formattedOutput = FileUtils.readFileToString(temp, "utf-8"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (temp != null) + FileUtils.deleteQuietly(temp); + } + return formattedOutput; + } + + public void formatAll(File remoteDir) { + try { +// String[] paths = { +// "\"**/src/app/entity/**/list*.+(html)\"", +// "\"**/src/app/entity/**/list*.+(ts)\"", +// "\"**/src/app/entity/**/detail*.+(html)\"", +// "\"**/src/app/entity/**/detail*.+(ts)\"", +// "\"**/src/app/entity/**/search*.+(html)\"", +// "\"**/src/app/entity/**/search*.+(ts)\"", +// "\"**/src/app/entity/**/tabs*.+(html)\"", +// "\"**/src/app/entity/**/tabs*.+(ts)\"", +// "\"**/src/*.+(html|ts)\"", +// "\"**/src/app/*.+(html|ts)\"", +// "\"**/src/app/criteria/*.+(html|ts)\"", +// "\"**/src/app/model/*.+(html|ts)\"", +// "\"**/src/app/entity/base_*/base*.+(html|ts)\"", +// "\"**/src/app/form/*.+(html|ts)\"", +// "\"**/src/app/home-component/**/*.+(html|ts)\"", +// "\"**/src/app/layout-component/**/*.+(html|ts)\"", +// "\"**/src/app/login-component/**/*.+(html|ts)\"", +// "\"**/src/app/security/**/*.+(html|ts)\"", +// "\"**/src/app/service/**/*.+(html|ts)\"", +// "\"**/src/**/*.+(js|xml)\"" +// }; + String[] paths = { + "\"**-fe/**/*.+(html)\"", + "\"**-fe/**/*.+(ts)\"", + "\"**-fe/**/*.+(json)\"", + "\"**-fe/**/*.+(js|xml)\"" + }; + doFormat(paths, remoteDir); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void doFormat(String[] paths, File remoteDir) throws Exception { + Process[] processes = new Process[paths.length]; + long startTime = System.currentTimeMillis(); + for (int i = 0; i < paths.length; i++) { + cmd[cmd.length - 1] = paths[i]; + ProcessBuilder builder = new ProcessBuilder(cmd); + builder.inheritIO(); + builder.directory(remoteDir); + processes[i] = builder.start(); + } + int result = 0; + for (int i = 0; i < paths.length; i++) { + result += processes[i].waitFor(); + } + long endTime = System.currentTimeMillis(); + System.out.println("doformat Millisecondi per formattare: " + (endTime - startTime)); + + if (result != 0) { + for (int i = 0; i < paths.length; i++) { + Scanner scanner = new Scanner(processes[i].getErrorStream()); + while (scanner.hasNext()) { + System.err.println(scanner.nextLine()); + } + scanner.close(); + } + } + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/SimpleXmlFormatterPostProcessor.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/SimpleXmlFormatterPostProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..d3be1085eedbd029124dfb13d29c55dd72e09025 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/SimpleXmlFormatterPostProcessor.java @@ -0,0 +1,48 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.apache.commons.lang3.StringUtils; + +public class SimpleXmlFormatterPostProcessor { + public String format(String input) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + String[] lines = input.trim().split("\n"); + int lastIndent = 0; + try { + for (int i = 0; i < lines.length; i++) { + if (!lines[i].trim().equals("")) { + lastIndent = writeLine(baos, lines[i], lastIndent); + baos.write("\n".getBytes()); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return baos.toString(); + } + + private int writeLine(ByteArrayOutputStream baos, String line, int lastIndent) + throws IOException { + line = convertSpacesToTabs(line); + if (line.trim().startsWith("<")) { + int pos = line.indexOf("<"); + int newpos = pos; + if (pos > lastIndent) { + newpos = lastIndent + 1; + line = StringUtils.repeat("\t", newpos) + line.trim(); + lastIndent = newpos; + } + } + baos.write(line.getBytes()); + return lastIndent; + } + + private String convertSpacesToTabs(String line) { + while (line.startsWith(" ")) { + line = "\t" + line.substring(4); + } + return line; + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/TypeContext.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/TypeContext.java new file mode 100644 index 0000000000000000000000000000000000000000..a555c29181d614a116fdcca05497ff6832d36a10 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/TypeContext.java @@ -0,0 +1,141 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +import static it.micegroup.voila2.cartridge.library.formatters.ImportBeautifierJalopyConstants.CLASS; +import static it.micegroup.voila2.cartridge.library.formatters.ImportBeautifierJalopyConstants.EXTENDS_CLAUSE; +import static it.micegroup.voila2.cartridge.library.formatters.ImportBeautifierJalopyConstants.IMPLEMENTS_CLAUSE; +import static it.micegroup.voila2.cartridge.library.formatters.ImportBeautifierJalopyConstants.PACKAGE_ANNOTATION; +import static it.micegroup.voila2.cartridge.library.formatters.ImportBeautifierJalopyConstants.STATIC_IMPORT_STATEMENT; +import static it.micegroup.voila2.cartridge.library.formatters.ImportBeautifierJalopyConstants.THROWS; +import static it.micegroup.voila2.cartridge.library.formatters.ImportBeautifierJalopyConstants.TYPE; + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import java.util.List; + +/** + * The type context enable some convenient operation on a type extracted from + * an abstract systax tree. + * + * @author Karsten Klein, hybrid labs + * + */ +public class TypeContext implements Comparable { + + private int type; + private List sequence; + + private CharacterSequence qualifiedName = null; + + public TypeContext(int type, List sequence) { + this.type = type; + this.sequence = sequence; + } + + public CharacterSequence getQualifiedName() { + if (qualifiedName == null) { + StringBuffer sb = new StringBuffer(100); + for (int i = 0; i < sequence.size(); i++) { + if (sb.length() > 0) { + sb.append('.'); + } + sb.append(sequence.get(i)); + } + qualifiedName = new CharacterSequence(sb); + } + return qualifiedName; + } + + public int getType() { + return type; + } + + public String toString() { + return "" + getType() + " - " + getQualifiedName(); + } + + public void reviseType() { + int removeIndex = -1; + + if (type == STATIC_IMPORT_STATEMENT) return; + if (type == CLASS) return; + if (type == PACKAGE_ANNOTATION) return; + if (type == IMPLEMENTS_CLAUSE) return; + if (type == EXTENDS_CLAUSE) return; + if (type == TYPE) return; + + for (int i = 0; i < sequence.size(); i++) { + String pos = (String) sequence.get(i); + + // uses java conventions to revise type + if (pos.matches("[A-Z].*")) { + removeIndex = i +1; + break; + } + } + + if (removeIndex != -1 && removeIndex < sequence.size()) { + while(sequence.size() != removeIndex) { + sequence.remove(removeIndex); + qualifiedName = null; + } + } + } + + public int compareTo(TypeContext other) { + CharacterSequence qf1 = getQualifiedName(); + CharacterSequence qf2 = other.getQualifiedName(); + + // FIXME it is unclear why we need this. Normally the + // replacement patterns should have covered this. + + // changes the order of types that start with the same prefix + if (qf2.startsWith(qf1)) { + return -(qf1.compareTo(qf2)); + } + + return qf1.compareTo(qf2); + } + + public boolean isValidType() { + if (getType() == CLASS) return true; + if (getType() == PACKAGE_ANNOTATION) return true; + if (getType() == TYPE) return true; + if (getType() == IMPLEMENTS_CLAUSE) return true; + if (getType() == EXTENDS_CLAUSE) return true; + if (getType() == THROWS) return true; + + CharacterSequence type = getQualifiedName(); + int index = type.lastIndexOf('.'); + if (index != -1) { + CharSequence lastElement = type.substring(index + 1); + if (lastElement.toString().matches("^[A-Z]{1,}[a-z0-9]{1,}.*")) { + return true; + } + } + return false; + } + + public void addComponent(String component) { + sequence.add(component); + qualifiedName = null; + } + + public int getLength() { + return sequence.size(); + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/TypeReplacementStrategy.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/TypeReplacementStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..cdbb497fe335c65d533ee9b985d2147ef3c8acc3 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/TypeReplacementStrategy.java @@ -0,0 +1,33 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +/** +* Copyright 2008 hybrid labs +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** + * Interface defining the a type replacement strategy. + * + * @author Karsten Klein, hybrid labs + * + */ +public interface TypeReplacementStrategy { + + public String modulateType(String type); + + public String composeMatch(CharacterSequence type); + + public String composeReplace(CharacterSequence type); + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/XmlFormatter.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/XmlFormatter.java new file mode 100644 index 0000000000000000000000000000000000000000..cd57ba0dc289471eb0bda3833d67622ac40a9272 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/XmlFormatter.java @@ -0,0 +1,46 @@ +package it.micegroup.voila2.cartridge.library.formatters; + +import java.io.ByteArrayOutputStream; +import java.io.StringReader; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; + +/** + * Pretty-prints xml, supplied as a string. + *

+ * eg. + * String formattedXml = new XmlFormatter().format("hello"); + * + */ +public class XmlFormatter { + + public XmlFormatter() { + } + + public String serialize(String input) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Source xmlInput = new StreamSource(new StringReader(input)); + TransformerFactory tfactory = TransformerFactory.newInstance(); + Transformer serializer; + try { + serializer = tfactory.newTransformer(); + // Setup indenting to "pretty print" + serializer.setOutputProperty(OutputKeys.INDENT, "yes"); + serializer.setOutputProperty( + "{http://xml.apache.org/xslt}indent-amount", "4"); + + serializer.transform(xmlInput, new StreamResult(out)); + } catch (TransformerException e) { + // this is fatal, just dump the stack and throw a runtime exception + e.printStackTrace(); + throw new RuntimeException(e); + } + return out.toString(); + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/default-convention.xml b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/default-convention.xml new file mode 100644 index 0000000000000000000000000000000000000000..e526c7b076ec2700add7bfcda0d39b612bfc0cc1 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/formatters/default-convention.xml @@ -0,0 +1,347 @@ + + + + + + + + 15 + + + + + false + + + [A-Z][a-zA-Z0-9]+ + [A-Z][a-zA-Z0-9]+ + + + [a-z][\w]+ + [a-z][\w]+ + [a-zA-Z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-zA-Z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-zA-Z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-zA-Z][\w]+ + + [A-Z][a-zA-Z0-9]+ + \w+ + + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + [a-z][\w]+ + + [a-z]+(?:\.[a-z]+)* + + [a-z][\w]+ + [a-z][\w]+ + + [a-z][\w]* + + + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + false + + + + 6 + + + + 30000 + 30000 + 30000 + 30000 + 30000 + 30000 + + true + + + 1 + + + + true + false + true + false + false + + + bak + 2 + + + + 0 + -1 + 1 + 0 +

1
+
0
+ 1 + 1 + 1 + 1 + + + 0 + -1 + 1 + + 1 + 1 + 1 + + 0 + 0 +
0
+
0
+
+ 1 + + + + false + false + + + true + true + true + true + + + true + false + false + false + false + + + false + false + + + + true + true + + +
+ + 0 + false +
+
+ + 0 + false +
+ + disabled + + + + 2 + org:2|gnu:2|sun:1|java:2|javax:2|com:2|*:0 + + disabled + true + + + true + + true + false + + true + + + false + + + 1 + 1 + 0 + 1 + 2 + 65 + -1 + 4 + -1 + 0 + 4 + -1 + 1 + + + false + false + + + + false + false + false + false + true + false + + + + false + false + true + false + false + static|field|initializer|constructor|method|interface|class + false + + + true + public|protected|private|abstract|static|final|synchronized|transient|volatile|native|strictfp + + + + + true + true + true + + + true + false + false + false + + false + + + false + false + true + + + + true + false + + true + true + true + true + true + true + + false + false + + + + + + 0 + false + false + false + + false + + false + false + + false + + + false + false + false + false + + + false + false + false + + + + false + true + 80 + + + + true + false + false + + false + false + false + + + + false + + false + + + + false + + + + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/h2.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/h2.mtl new file mode 100644 index 0000000000000000000000000000000000000000..de723ae627bda40b55a99bdebebc70857393a431 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/h2.mtl @@ -0,0 +1,12 @@ +[comment encoding = UTF-8 /] +[module h2('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] + +[template public genH2(antFilterList: String, tokenValuePairs: String)] +[comment]H2[/comment] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/datasource', getWebResourceFolderName(), 'it.mice.voila2.acceleogenerator', null, null, null, antFilterList, false, tokenValuePairs, null, null)/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/AssociationUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/AssociationUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..f39752f99b2ec3eaa1335e4d6aa1b28844b3fa77 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/AssociationUtils.java @@ -0,0 +1,1160 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.transaction.RunnableWithResult; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.emf.transaction.util.TransactionUtil; +import org.eclipse.uml2.uml.Association; +import org.eclipse.uml2.uml.Class; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.EnumerationLiteral; +import org.eclipse.uml2.uml.Property; +import org.eclipse.uml2.uml.Stereotype; +import org.eclipse.uml2.uml.Type; + +public class AssociationUtils { + + /** + * Return true if the association is a OneToOneRelation + * + * @author Jessica Pascarella + * + * @param association + * @return true if the association is a OneToOneRelation + */ + public static boolean isOneToOneRelation(Association association) { + for (Property p : association.getMemberEnds()) { + if (p.getUpper() != 1) + return false; + } + return true; + } + + /** + * Return true if the association is a ManyToOneRelation + * + * @author Antonio Di Raffaele + * + * @param association + * @return true if the association is a OneToOneRelation + */ + public static boolean isManyToOneRelation(Association association) { + for (Property p : association.getMemberEnds()) { + if (p.getUpper() == -1) + return true; + } + return false; + } + + public static enum RelationType { + OneToOne, ManyToOne + } + + /** + * Return true if the association is a OneToOneRelation or a ManyToOneRelation + * + * @author Antonio Di Raffaele + * + * @param association + * @param relationType + * @return true if the association is a OneToOneRelation or a ManyToOneRelation + */ + public static boolean isAssociationInRelationType(Association association, RelationType relationType) { + if (relationType == RelationType.OneToOne) { + return isOneToOneRelation(association); + } else if (relationType == RelationType.ManyToOne) { + return isManyToOneRelation(association); + } + return false; + } + + /** + * Return true if the association is a SelfRelation + * + * @author Jessica Pascarella + * + * @param association + * @return true if the association is a SelfRelation + */ + public static boolean isSelfRelation(Association association) { + Set memberEnds = new HashSet<>(association.getEndTypes()); + if (memberEnds.size() > 1) + return false; + return true; + } + + /** + * Return true if both members of the relation are optional + * + * @author Jessica Pascarella + * @param association + * @return true if both members of the relation are optional + */ + public static boolean isBothOptional(Association association) { + EList properties = null; + properties = association.getMemberEnds(); + if (properties.get(0).getLower() == 0 && properties.get(1).getLower() == 0) { + return true; + } + return false; + } + + /** + * Return the optional member, if present, of a OneToOneRelation + * + * @author Jessica Pascarella + * + * @param association + * @return the optional member, if present, of a OneToOneRelation + * + **/ + public static Class getOptionalMember(Association association) { + EList properties = null; + Class optionalMember = null; + properties = association.getMemberEnds(); + if (properties.get(0).getLower() == 0) { + optionalMember = (Class) properties.get(0).getType(); + } else if (properties.get(1).getLower() == 0) { + optionalMember = (Class) properties.get(1).getType(); + } + return optionalMember; + } + + /** + * Return the optional member, if present, of a SelfRelation + * + * @author Jessica Pascarella + * + * @param association + * @return the optional member, if present, of a SelfRelation + * + **/ + public static Property getSelfOptionalMember(Association association) { + EList properties = null; + Property optionalMember = null; + properties = association.getMemberEnds(); + if (properties.get(0).getLower() == 0) { + optionalMember = properties.get(0); + } else if (properties.get(1).getLower() == 0) { + optionalMember = properties.get(1); + } + return optionalMember; + } + + /** + * Return true if the association has an optional member + * + * @author Jessica Pascarella + * + * @param association + * @return true if the association has an optional member + */ + public static boolean hasOptionalMember(Association association) { + for (Property p : association.getMemberEnds()) { + if (p.getLower() == 0) { + return true; + } + } + return false; + } + + /** + * Return true if the input class is the first processed by the generator during + * the association valutation + * + * @author Jessica Pascarella + * + * @param classe + * @param association + * @param property + * @return true if the input class is the first processed by the generator + * during the association valutation + */ + public static boolean isFirstMapped(Class classe, Association association, Property property) { + if (!isSelfRelation(association) && classe == getFirstMapped(association)) + return true; + else if (isSelfRelation(association) && property != null && property.getName() != null + && property.getName().equals(getSelfFirstMapped(association))) + return true; + return false; + } + + /** + * Return the first processed class by the generator during the association + * valutation + * + * @author Jessica Pascarella + * + * @param classe + * @param association + * @param property + * @return + */ + public static boolean isOptionalMember(Class classe, Association association, Property property) { + if (!isSelfRelation(association) && getOptionalMember(association) == classe) + return true; + else if (isSelfRelation(association) && property != null && property.getName() != null + && property.getName().equals(getSelfOptionalMember(association).getName())) + return true; + return false; + } + + /** + * Return the first processed class by the generator during the association + * valutation + * + * @author Jessica Pascarella + * + * @param classe + * @return the first processed class by the generator during the association + * valutation + */ + public static Class getFirstMapped(Association association) { + EList properties = null; + properties = association.getMemberEnds(); + return (Class) properties.get(0).getType(); + } + + /** + * Return the first processed member for a self-relation + * + * @author Jessica Pascarella + * + * @param classe + * @return the first processed member for a self-relation + * + */ + public static String getSelfFirstMapped(Association association) { + EList properties = null; + properties = association.getMemberEnds(); + return properties.get(0).getName(); + } + + /** + * Return true if the input class has a parent class referring to the input + * association + * + * @author Jessica Pascarella + * + * @param classe + * @param association + * @return true if the input class has a parent class referring to the input + * association + */ + public static boolean hasParentOneToOne(Class classe, Association association, Property property) { + return (isOneToOneRelation(association)) && ((!hasOptionalMember(association) + && !isFirstMapped(classe, association, property)) + || (hasOptionalMember(association) + && ((!isBothOptional(association) && isOptionalMember(classe, association, property)) + || (isBothOptional(association) && !isFirstMapped(classe, association, property))))); + + } + + /** + * Return true if the input class has a child class referring to the input + * association + * + * @author Jessica Pascarella + * + * @param classe + * @param association + * @return true if the input class has a child class referring to the input + * association + */ + public static boolean hasChildOneToOne(Class classe, Association association, Property property) { + return (isOneToOneRelation(association)) && ((!hasOptionalMember(association) + && isFirstMapped(classe, association, property)) + || (hasOptionalMember(association) + && ((!isBothOptional(association) && !isOptionalMember(classe, association, property)) + || (isBothOptional(association) && isFirstMapped(classe, association, property))))); + } + + /** + * Return true if the input property is a child for the input ownerClass + * + * @author Vittorio Niespolo + * @author Jessica Pascarella , + * + * @param ownerClass + * @param a + * @param p + * @return true if the input property is a child for the input ownerClass + */ + public static boolean isClassChild(Class ownerClass, Association a, Property p) { +// if (hasParentOneToOne((Class) p.getType(), a, p) && (p.getType() != ownerClass || isSelfRelation(a))) +// return true; +// else +// if (isOneToOneRelation(a) && (p.getType() != ownerClass || isSelfRelation(a))) +// return true; +// else + if ((!isOneToOneRelation(a)) && (p.getType() != ownerClass || isSelfRelation(a)) && (p.getUpper() == -1)) { + return true; + } + return false; + } + + /** + * Return true if the input property is a parent for the input ownerClass + * + * @author Vittorio Niespolo + * @author Jessica Pascarella + * @param ownerClass + * @param association + * @param property + * @return + */ + public static boolean isClassParent(Class ownerClass, Association association, Property property) { + if (isOneToOneRelation(association) && (property.getType() != ownerClass || isSelfRelation(association))) + return true; + else if ((!isOneToOneRelation(association)) && (property.getType() != ownerClass || isSelfRelation(association)) + && upper01(property)) { + return true; + } + return false; + } + + private static boolean upper01(Property property) { + return property.getUpper() == 1 || property.getUpper() == 0; + } + + /** + * Return the set of parentEnd for the given class from all the associations + * + * @author Vittorio Niespolo + * @author Jessica Pascarella + * @param classe + **/ + public Collection getParents(Class classe) { + Collection parents = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (hasChildOneToOne((Class) p.getType(), a, p) && (!p.getType().getName().equals(classe.getName()))) + parents.add(p); + else if ((!isOneToOneRelation(a)) && !p.getType().getName().equals(classe.getName()) + && PropertyUtils.isZeroOneMultiplicity(p)) + parents.add(p); + } + + } + return parents; + } + + /** + * Return the set of childEnd for the given class from all associations + * + * @author Vittorio Niespolo + * @author Jessica Pascarella + * @param classe + **/ + public Collection getChilds(Class classe) { + Collection childs = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (hasParentOneToOne((Class) p.getType(), a, p) && !p.getType().getName().equals(classe.getName())) + childs.add(p); + else if (!isOneToOneRelation(a) && !p.getType().getName().equals(classe.getName()) + && (p.getUpper() == -1)) { + childs.add(p); + } + } + } + return childs; + } + + /** + * Return the set of child classes for the given class + * + * @author Vittorio Niespolo + * @author Jessica Pascarella + * @param classe + **/ + public static Collection getChildClasses(Class classe) { + Collection childs = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (isClassChild(classe, a, p)) { + if (belongToSameModel(p.getType(), classe)) { + childs.add((Class) p.getType()); + } + } + } + } + return childs; + } + + /** + * Return the set of child classes for the given class without duplicates + * + * @author Vittorio Niespolo + * @param classe + **/ + public static Collection getChildClassesNoDup(Class classe) { + Collection childClasses = new ArrayList<>(); + Collection childNames = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (isClassChild(classe, a, p)) { + if (belongToSameModel(p.getType(), classe)) { + if (!childNames.contains(p.getType().getName())) { + childClasses.add((Class) p.getType()); + childNames.add(p.getType().getName()); + } + } + } + } + } + return childClasses; + } + + /** + * Return the set of parent classes for the given class + * + * @author Vittorio Niespolo + * @author Jessica Pascarella + * @param classe + **/ + public static Collection getParentClasses(Class classe) { + Collection parents = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (isClassParent(classe, a, p)) + // Controllo se il padre appartiene al modello della classe in input + if (belongToSameModel(p.getType(), classe)) { + parents.add((Class) p.getType()); + } + } + } + return parents; + } + + /** + * Return the set of parent classes for the given class + * + * @author Vittorio Niespolo + * @author Jessica Pascarella + * @param classe + **/ + public static Collection getParentClassesNoDup(Class classe) { + Collection parents = new ArrayList<>(); + Collection parentNames = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (isClassParent(classe, a, p)) { + // Controllo se il padre appartiene al modello della classe in input + if (belongToSameModel(p.getType(), classe)) { + if (!parentNames.contains(p.getType().getName())) { + parents.add((Class) p.getType()); + parentNames.add(p.getType().getName()); + } + } + } + } + } + return parents; + } + + /** + * Return a set of ID property for the given class + * + * @author Vittorio Niespolo + * @author Jessica Pascarella + * @param classe + **/ + public Collection getParentIds(Class classe) { + Collection parents = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (belongToSameModel(p.getType(), classe)) { + if (isClassParent(classe, a, p)) { + p.getType(); + +// for(Property parentId : EntityUtils.getClassIDs((Class) p.getType())) { +// Property parentIdnew +// parentId.setName(PropertyUtils.getAttributeName(parentId, classe, a, true)); +// parents.add(parentId); +// } + + parents.addAll(EntityUtils.getClassIDs((Class) p.getType())); + } +// if (hasChildOneToOne((Class) p.getType(), a, p) +// && !p.getType().getName().equals(classe.getName())) { +// p.getType(); +// parents.addAll(EntityUtils.getClassIDs((Class) p.getType())); +// } else if ((!isOneToOneRelation(a)) && (!p.getType().getName().equals(classe.getName())) +// && PropertyUtils.isZeroOneMultiplicity(p)) { +// p.getType(); +// parents.addAll(EntityUtils.getClassIDs((Class) p.getType())); +// } + } + } + } + return parents; + } + + /** + * Return true if the class has at least one child + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public boolean hasChilds(Class classe) { + if (getChildClasses(classe).size() > 0) + return true; + return false; + } + + /** + * Return true if the class has at least one parent + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public boolean hasParents(Class classe) { + if (getParentAssociations(classe).size() > 0) + return true; + return false; + } + + /** + * Return the child Class of a a parentClass from the given association + * + * @author Vittorio Niespolo + * @param parentClass + * @param association + * @return + */ + public Class getChildClass(Class parentClass, Association association) { + for (Property p : association.getMemberEnds()) { + if (isClassChild(parentClass, association, p)) + return (Class) p.getType(); + } + return null; + } + + /** + * Return the parent Class of a childClass from the given association + * + * @author Vittorio Niespolo + * @param childClass + * @param association + * @return + */ + public static Class getParentClass(Class childClass, Association association) { + for (Property p : association.getMemberEnds()) { + if (isClassParent(childClass, association, p)) + return (Class) p.getType(); + } + return null; + } + + /** + * Return the childEnd of a parentClass from the given association + * + * @author Vittorio Niespolo + * @param parentClass + * @param association + * @return + */ + public static Property getChildEnd(Class parentClass, Association association) { + for (Property p : association.getMemberEnds()) { + if (isClassChild(parentClass, association, p)) + return p; + } + return null; + } + + /** + * Return the parentEnd of a childClass from the given association + * + * @author Vittorio Niespolo + * @param childClass + * @param association + * @return + */ + public static Property getParentEnd(Class childClass, Association association) { + for (Property p : association.getMemberEnds()) { + if (isClassParent(childClass, association, p)) + return p; + } + return null; + } + + /** + * Return a Set of Association that link to child classes + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static Collection getChildAssociations(Class classe) { + Collection childAssociations = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (isClassChild(classe, a, p)) { + if (belongToSameModel(p.getType(), classe)) { + childAssociations.add(a); + } + } + } + } + return childAssociations; + } + + /** + * Return a Set of Association that link to Parent classes + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static Collection getParentAssociations(Class classe) { + return getParentAssociationsExcluding(classe, null); + } + + /** + * Return a Set of Association that link to Parent classes + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static Collection getParentAssociationsExcluding(Class classe, Association daEscludere) { + Collection parentAssociations = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + if (daEscludere == null || a != daEscludere) { + for (Property p : a.getMemberEnds()) { + if (isClassParent(classe, a, p)) { + // Controllo se il padre appartiene al modello della classe in input + if (belongToSameModel(p.getType(), classe)) + parentAssociations.add(a); + } + } + } + } + return parentAssociations; + } + + public static Collection getParentAssociationsNoDup(Class classe) { + Collection parentAssociations = new ArrayList<>(); + Collection parentsName = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + + for (Property p : a.getMemberEnds()) { + if (isClassParent(classe, a, p)) { + // Controllo se il padre appartiene al modello della classe in input + if (belongToSameModel(p.getType(), classe)) + if (!parentsName.contains(p.getType().getName())) { + parentsName.add(p.getType().getName()); + parentAssociations.add(a); + } + } + } + + } + return parentAssociations; + } + + /** + * + * Return MappedName Stereotype's property + * + * @author Vittorio Niespolo + * @param association + * @param property + * @return + */ + public String getMappedName(Association association, Property property) { + Map nameMappingMap = new HashMap<>(); + String mappedName = ""; + + Stereotype stereotype = null; + + if (isOneToOneRelation(association)) { + stereotype = association.getAppliedStereotype(StereotypeName.ONE_TO_ONE_RELATION); + } + + else { + stereotype = association.getAppliedStereotype(StereotypeName.MANY_TO_ONE_RELATION); + } + + String nameMapping = (String) association.getValue(stereotype, StereotypePropertyName.NAME_MAPPING); + + if (nameMapping != null && !("").equals(nameMapping)) { + nameMapping = nameMapping.trim(); + String[] parts = nameMapping.split("="); + for (int i = 0; i < parts.length; i = i + 2) { + nameMappingMap.put(parts[i], parts[i + 1]); + } + mappedName = nameMappingMap.get(property.getName()); + } + if (mappedName == null || mappedName == "") { + mappedName = property.getName(); + } + return mappedName; + } + + @Deprecated // VN Questo metodo non funziona per selfRelation + public static Class getOtherEnd(Class ownerClass, Association association) { + for (Property end : association.getMemberEnds()) { + if (!end.getType().getName().equals(ownerClass.getName())) { + return (Class) end.getType(); + } + } + return null; + } + + /** + * Return true if the association has identifying stereotype and it is set to + * true + * + * @author Vittorio Niespolo , Jessica + * Pascarella + * + * @param association + * @return true if the association has identifying stereotype and it is set to + * true + */ + public static boolean isIdentifying(Association association) { + Stereotype stereotype = null; + if (isOneToOneRelation(association)) { + stereotype = association.getAppliedStereotype(StereotypeName.ONE_TO_ONE_RELATION); + if (association.hasValue(stereotype, StereotypePropertyName.IDENTIFYING) + && true == (Boolean) association.getValue(stereotype, StereotypePropertyName.IDENTIFYING)) + return true; + } else { + stereotype = association.getAppliedStereotype(StereotypeName.MANY_TO_ONE_RELATION); + if (association.hasValue(stereotype, StereotypePropertyName.IDENTIFYING) + && true == (Boolean) association.getValue(stereotype, StereotypePropertyName.IDENTIFYING)) + return true; + } + return false; + } + + /** + * Return the first child from the collection + * + * @author Vittorio Niespolo + * @param parentClass + * @return + */ + public static Class getFirstChild(Class parentClass) { + Collection childs = getChildClasses(parentClass); + if (childs.size() > 0) { + Iterator iterator = childs.iterator(); + if (iterator != null) + return iterator.next(); + } + return null; + } + + /** + * Return true if the parent is required (multiplicity > 0) + * + * @author Vittorio Niespolo + * + * @param association + * @return + */ + public static boolean isParentRequired(Association association) { + if (isIdentifying(association)) { + return true; + } + for (Property end : association.getMemberEnds()) { + if (end.getLower() >= 1 && end.getUpper() == 1) { + return true; + } + } + return false; + } + + /** + * Ritorna il metodo selezionato per la gestione dei figli per un'entità + * + * @author Vittorio Niespolo + * + * @param association + * @return + */ + public static String getChildManagement(Association association) { + return StereotypeUtils.getStereotypeValue(association, + StereotypeName.MANY_TO_ONE_RELATION, StereotypePropertyName.CHILD_MANAGEMENT).getName(); + } + + /** + * Ritorna true se la gestione dei figli nel frontEnd per un'entità è fatta + * tramite tab + * + * @author Vittorio Niespolo + * + * @param association + * @return + */ + public static boolean isTabbedChild(Association association) { + return getChildManagement(association).equals(ChildManagement.tabbed.toString()); + } + + public static String getParentAssName(Association association, Class ownerClass) { + Property parentEnd = getParentEnd(ownerClass, association); + if (parentEnd != null && parentEnd.getName() != null && !parentEnd.getName().equalsIgnoreCase("")) { + return parentEnd.getName(); + } + return ""; + } + + public static String getChildAssName(Association association, Class ownerClass) { + Property childEnd = getChildEnd(ownerClass, association); + if (childEnd != null && childEnd.getName() != null && !childEnd.getName().equalsIgnoreCase("")) { + return childEnd.getName(); + } + return ""; + } + + /** + * Controlla se l'associazione è readOnly evitando la possibilità di modificare + * le entità associate. + * + * @author Vittorio Niespolo + * + * @param association + * @return + */ + public static boolean isReadOnly(Association association) { + boolean readOnly = StereotypeUtils.getStereotypeValue(association, + StereotypeName.MANY_TO_ONE_RELATION, StereotypePropertyName.IS_READONLY); + return readOnly != false; + } + + public static Collection getParentClassesExcluding(Class classe, Class classeDaEscludere) { + Collection parents = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (classeDaEscludere == null || (Class) p.getType() != classeDaEscludere) { + if (isClassParent(classe, a, p)) + parents.add((Class) p.getType()); + } + } + } + return parents; + } + + /** + * Return a collection of parent association from IMPORTED models. Usually other + * MS. + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + @SuppressWarnings("unchecked") + public static Collection getParentAssFromImportedModels(Class classe) { + +// ConsoleUtils.consoleMessage(SeverityLevels.ERROR, "Parent from imported models"); + + Collection importedParents = new ArrayList<>(); + + TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(classe.getModel()); + + // -- + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (isClassParent(classe, a, p)) { + // Controllo se il padre appartiene al modello della classe in input + if (!belongToSameModel(p.getType(), classe)) + importedParents.add(a); + } + } + } + // -- + +// VN Per la lettura degli elementi importati nel modello è stato necessario +// introdurre questa transazione di lettura. USare il metodo doEdit per +// attivarne una di scrittura. +// try { +// importedParents = (Collection) domain.runExclusive(new RunnableWithResult.Impl() { +// +// public void run() { +// Collection parents = new ArrayList<>(); +// for (Association a : classe.getAssociations()) { +// for (Property p : a.getMemberEnds()) { +// if (isClassParent(classe, a, p)) { +// // Controllo se il padre appartiene al modello della classe in input +// if (!belongToSameModel(p.getType(), classe)) +// parents.add(a); +// } +// } +// } +// setResult(parents); +// } +// }); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } + return importedParents; + } + + /** + * Return a collection of parent association from IMPORTED models. Usually other + * MS. + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static Collection getChildAssFromImportedModels(Class classe) { + +// ConsoleUtils.consoleMessage(SeverityLevels.ERROR, "Childs from imported models"); + + Collection importedChilds = new ArrayList<>(); + + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (isClassChild(classe, a, p)) { + // Controllo se il padre appartiene al modello della classe in input + if (!belongToSameModel(p.getType(), classe)) + importedChilds.add(a); + } + } + } + + return importedChilds; + } + + /** + * Return true if input elements have same parent model. Comparison is made on + * model name + * + * @author Vittorio Niespolo + * + * @param a + * @param b + * @return + */ + public static boolean belongToSameModel(Element a, Element b) { + return a.getModel().getName().equals(b.getModel().getName()); + } + + /** + * Returns a collection of all parent for an entity. Actually they are the union + * of parents belonging to Class's microservice and importend parents. + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + @SuppressWarnings("unchecked") + public static Collection getParentAssFromAllModels(Class classe) { + Collection result = new ArrayList<>(); + TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(classe.getModel()); + try { + result = (Collection) domain.runExclusive(new RunnableWithResult.Impl() { + public void run() { + Collection innerResult = getParentAssociations(classe); +// TODO Sistemare gli imported parents innerResult.addAll(getParentAssFromImportedModels(classe)); + setResult(innerResult); + } + }); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return result; + + } + + /** + * Ritorna una stringa che indica se i parent sono selezionabili tramite + * dropdown o popup + * + * @author Vittorio Niespolo + * + * @param association + * @return + */ + public static String getParentSelection(Association association) { + EnumerationLiteral parentSelection = null; + if (isOneToOneRelation(association)) { + parentSelection = StereotypeUtils.getStereotypeValue(association, + StereotypeName.ONE_TO_ONE_RELATION, StereotypePropertyName.PARENT_SELECTION); + } else { + parentSelection = StereotypeUtils.getStereotypeValue(association, + StereotypeName.MANY_TO_ONE_RELATION, StereotypePropertyName.PARENT_SELECTION); + } + if (parentSelection != null) { + return parentSelection.getName(); + } + return ""; + } + + /** + * Ritorna true se la selezione del parent nell'interfaccia avviente tramite + * dropdown + * + * @author Vittorio Niespolo + * + * @param association + * @return + */ + public static boolean hasDropdownParentSelection(Association association) { + return ParentSelection.dropdown.toString().equals(getParentSelection(association)); + } + + /** + * Ritorna true se la selezione del parent nell'interfaccia avviene tramite + * popup + * + * @author Vittorio Niespolo + * + * @param association + * @return + */ + public static boolean hasPopupParentSelection(Association association) { + return ParentSelection.popup.toString().equals(getParentSelection(association)); + } + + /** + * Check if has at least one dropdown selection association. + * + * @author Federico Gambardella + * @param classe + * @return + */ + public static boolean hasAtLeastOneDrpodownSelection(Class classe) { + for (Association association : getParentAssFromAllModels(classe)) { + if (hasDropdownParentSelection(association)) { + + return true; + } + } + return false; + } + + public static boolean hasNavigableParents(Class classe) { + Collection result = getParentAssFromAllModels(classe).stream() + .filter(a -> getParentEnd(classe, a).isNavigable()).collect(Collectors.toCollection(ArrayList::new)); + if (result == null || result.isEmpty()) { + return false; + } + return true; + } + + /** + * Con questo metodo si ottiene il nome della colonna associato al nome della + * proprietà per una specifica associazione + * + * @author Vittorio Niespolo + * + * @param association + * @param property + * @return mapped name for property on the association + */ + public String getPhysicalMappedName(Association association, Property property) { + Map nameMappingMap = new HashMap<>(); + String mappedName = ""; + + Stereotype stereotype = null; + + if (isOneToOneRelation(association)) { + stereotype = association.getAppliedStereotype(StereotypeName.ONE_TO_ONE_RELATION); + } + + else { + stereotype = association.getAppliedStereotype(StereotypeName.MANY_TO_ONE_RELATION); + } + + String nameMapping = (String) association.getValue(stereotype, StereotypePropertyName.PHYSICAL_NAME_MAPPING); + + if (nameMapping != null && !("").equals(nameMapping)) { + nameMapping = nameMapping.trim(); + String[] parts = nameMapping.split("="); + for (int i = 0; i < parts.length; i = i + 2) { + nameMappingMap.put(parts[i], parts[i + 1]); + } + mappedName = nameMappingMap.get(property.getName()); + } + // Associazione con nome + if ((mappedName == null || mappedName == "") && !AssociationUtils.isSelfRelation(association)) { + for (Property p : association.getMemberEnds()) { + if (upper01(p) && p.getName() != null) { + mappedName = StringUtils.camelToUnderscore(property.getName()) + "_" + + StringUtils.camelToUnderscore(p.getName()); + } + } + } + if ((mappedName == null || mappedName == "") && AssociationUtils.isSelfRelation(association)) { + mappedName = StringUtils.camelToUnderscore(AssociationUtils + .getParentEnd(((Class) association.getMemberEnds().iterator().next().getType()), association) + .getName()); + } else if (mappedName == null || mappedName == "") { + mappedName = StringUtils.camelToUnderscore(property.getName()); + } + return mappedName; + } + + /** + * Ritorna true se esiste almeno una parentAssociation che non è identifying + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static boolean hasNoIdentifyingParent(Class classe) { + for (Association parentAss : AssociationUtils.getParentAssociations(classe)) { + if (!isIdentifying(parentAss)) { + return true; + } + } + return false; + } + + /** + * Ritorna una lista dei padri con id composito per la classe in input + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public Collection getParentAssociationHavingCK(Class classe) { + Collection parents = new ArrayList<>(); + for (Association a : getParentAssociations(classe)) { + Class parent = getParentClass(classe, a); + if (isIdentifying(a) && EntityUtils.hasCompositeKey(parent)) { + parents.add(a); + } + } + return parents; + } + + public static Collection getChildAssociationsNoDup(Class classe) { + Collection childAssociations = new ArrayList<>(); + Collection childNames = new ArrayList<>(); + for (Association a : classe.getAssociations()) { + for (Property p : a.getMemberEnds()) { + if (isClassChild(classe, a, p)) { + if (belongToSameModel(p.getType(), classe)) { + if (!childNames.contains(p.getType().getName())) { + childAssociations.add(a); + childNames.add(p.getType().getName()); + } + } + } + } + } + return childAssociations; + } + +} \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/AuditableAttributes.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/AuditableAttributes.java new file mode 100644 index 0000000000000000000000000000000000000000..2b710cca4cb350a97364ee1d8218f4767b4b12d3 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/AuditableAttributes.java @@ -0,0 +1,5 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public enum AuditableAttributes { + createdBy, lastModifiedBy, createdDate, lastModifiedDate +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ChildManagement.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ChildManagement.java new file mode 100644 index 0000000000000000000000000000000000000000..8fd5d37207c9e1b5283d2ded488085c594010c97 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ChildManagement.java @@ -0,0 +1,6 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public enum ChildManagement { + tabbed, + none +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ConsoleMsgJavaUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ConsoleMsgJavaUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..5f523ac8dcbf2c278fe76b5f38daa7c34f74be33 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ConsoleMsgJavaUtils.java @@ -0,0 +1,22 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +/** + * + * @author Jessica Pascarella + * @author Vittorio Niespolo + * + */ +public class ConsoleMsgJavaUtils { + + public static final String GENERIC_ENTITY_EXCEPTION_MSG= "Exception occurs on entity "; + + public static final String SEQ_NAME_EXCEPTION_MSG = "SequenceNameException: If an entity has a SequenceName it must have an ID of type Code"; + + public static final String DUPLICATED_ENTITY_NAME_EXCEPTION_MSG = "EntityNamesException: Duplicated Name for the entity"; + + public static final String MISSING_ENTITY_ID_EXCEPTION_MSG = "EntityIdException: Missing Id attribute"; + + public static final String MISSING_TYPE_EXCEPTION_MSG = "TypeException: Missing type for an attribute"; + + public static final String SELF_RELATION_NAMES_EXCEPTION_MSG = "AssociationNamesException: Missing association members names for Self-Relation"; +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ConsoleUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ConsoleUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..e60d567062aa3557affc6111c6ea3f7ef1e3db78 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ConsoleUtils.java @@ -0,0 +1,142 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.logging.ConsoleHandler; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import org.apache.log4j.Appender; +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.LogManager; +import org.apache.log4j.WriterAppender; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.console.ConsolePlugin; +import org.eclipse.ui.console.IConsole; +import org.eclipse.ui.console.IConsoleManager; +import org.eclipse.ui.console.MessageConsole; +import org.eclipse.ui.console.MessageConsoleStream; + +public class ConsoleUtils { + + private static final Logger LOGGER = Logger.getLogger(ConsoleUtils.class.getName()); + public static final String CONSOLE_NAME = "VoilaPlugin"; + public static MessageConsoleStream out = null; + public static LogFormatter logFormatter = new LogFormatter(); + + static { + LOGGER.setUseParentHandlers(false); + + ConsoleHandler handler = new ConsoleHandler(); + Formatter formatter = new LogFormatter(); + + handler.setFormatter(formatter); + + LOGGER.addHandler(handler); + + } + + public static MessageConsoleStream setupConsole(String name) throws PartInitException { + + if (name == null) { + name = CONSOLE_NAME; + } + ConsolePlugin plugin = ConsolePlugin.getDefault(); + IConsoleManager conMan = plugin.getConsoleManager(); + IConsole[] existing = conMan.getConsoles(); + for (int i = 0; i < existing.length; i++) { + if (name.equals(existing[i].getName())) { + MessageConsoleStream out = prepareConsole((MessageConsole) existing[i]); + return out; + } + } + // no console found, so create a new one + MessageConsole myConsole = new MessageConsole(name, null); + conMan.addConsoles(new IConsole[] { myConsole }); + + MessageConsoleStream out = prepareConsole(myConsole); + return out; + } + + public static MessageConsoleStream prepareConsole(MessageConsole console) { + console.activate(); + MessageConsoleStream out = console.newMessageStream(); + out.setActivateOnWrite(true); + + Appender a1Appender = LogManager.getRootLogger().getAppender("VoilaConsole"); + + // Layout layout = new PatternLayout(LOG4J_PATTERN); + try { + Appender appender = new WriterAppender(a1Appender.getLayout(), out); + appender.setName("Current" + a1Appender.getName()); + + LogManager.getRootLogger().addAppender(appender); + + // LogManager.getRootLogger().removeAppender(a1Appender); + // LogManager.getRootLogger().setLevel(a1Level); + ((ConsoleAppender) a1Appender).setWriter(new java.io.PrintWriter(System.err)); + } catch (Exception e) { + e.printStackTrace();// FIXME + } +// Enumeration loggers = LogManager.getCurrentLoggers(); +// while (loggers.hasMoreElements()) { +// Logger logger = (Logger) loggers.nextElement(); +// out.println(logger.getName()); +// } + + return out; + } + + /** + * This method must be used only from acceleo's template to log in console, + * otherwise use Logger for the specific Java's class + * + * @author Vittorio Niespolo + * @param severity + * @param message + */ + public void consoleMessage(String message) { + consoleMessage(Level.INFO.getName(), message); + } + + /** + * This method must be used only from acceleo's template to log in console, + * otherwise use Logger for the specific Java's class + * + * @author Vittorio Niespolo + * @param severity + * @param message + */ + public static void consoleMessage(String severity, String message) { + try { + out = setupConsole(null); + } catch (PartInitException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + LogRecord logRecord = null; + if (severity.equals("FATAL")) { + logRecord = new LogRecord(Level.SEVERE, message); + } else if (severity.equals("INFO")) { + logRecord = new LogRecord(Level.INFO, message); + } else if (severity.equals("ERROR")) { + logRecord = new LogRecord(Level.SEVERE, message); + } else if (severity.equals("WARNING")) { + logRecord = new LogRecord(Level.WARNING, message); + } else if (severity.equals("DEBUG")) { + logRecord = new LogRecord(Level.FINER, message); + } else { + logRecord = new LogRecord(Level.INFO, message); + } + + out.println(logFormatter.format(logRecord)); + + logRecord.setMessage(logRecord.getMessage().concat("\n")); + + LOGGER.log(logRecord); +// IN CASO VENGA USATO COME PLUGIN +// Activator plugin = Activator.getDefault(); +// plugin.getLog().log(new Status(Status.WARNING, plugin.getBundle().getSymbolicName(), Status.OK, msg, null)); + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/Constants.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..6c53ead428f4ba500ddf8e21635cf33cc3e8bbf7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/Constants.java @@ -0,0 +1,5 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public class Constants { + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/CopyFolderUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/CopyFolderUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..79fd5915da322ca337e5f876ea3a9b009cb8827e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/CopyFolderUtils.java @@ -0,0 +1,259 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.types.FilterSet; +import org.apache.tools.ant.types.FilterSetCollection; +import org.apache.tools.ant.types.selectors.SelectorUtils; +import org.apache.tools.ant.util.FileUtils; +import org.eclipse.core.runtime.Platform; +import org.osgi.framework.Bundle; + +public class CopyFolderUtils { + + private static final String REFERENCE_FILE = "reference:file:/"; + + /** + * static logger. + */ + private static Logger logger = Logger.getLogger(CopyFolderUtils.class); + + private static final String COMPONENT_NAME = "Copy Folder Workflow Component"; + + public static Boolean copyFolder(String inputFolder, String outputFolder, String bundleName, String outputFolderSuffix, String includeFilter, String excludeFilter, String antProcessFilter, Boolean excludeDefaultExt, String tokenValuePairs, String renameList, String extensionRenameList) { + try { + if (excludeDefaultExt == null) { + excludeDefaultExt = true; + } + String inputFolderFull = getInputFolder(inputFolder, bundleName); + Map renameListMap = buildRenameList(renameList); + Map extensionRenameListMap = buildRenameList(extensionRenameList); + List tokenValuePairsMap = buildTokenValuePairs(tokenValuePairs); + + if (logger.isInfoEnabled()) { + logger.info(COMPONENT_NAME + " ready to copy from: " + inputFolderFull + " to: " + outputFolder); + } + File outputFolderFile = new File(GeneralUtils.getOutputDir() + File.separator + outputFolder + File.separator); + outputFolderFile.mkdirs(); + + String[] antProcessFilterArray = prepareAntProcessFilerArray(antProcessFilter); + + DirectoryScanner ds = buildDirectoryScanner(inputFolderFull, includeFilter, excludeFilter, excludeDefaultExt); + ds.scan(); + + FilterSetCollection fsc = buildFilterSet(tokenValuePairsMap); + + String[] files = ds.getIncludedFiles(); + FileUtils fileUtils = FileUtils.getFileUtils(); + + if (logger.isDebugEnabled()) { + logger.debug("Template files to be processed:"); + } + for (int i = 0; i < files.length; i++) { + String inputCompleteFileName = inputFolderFull + File.separator + files[i]; + if (logger.isDebugEnabled()) { + logger.debug("Processing file:" + inputCompleteFileName); + } + String outputFileName = determineOutputFileName(files[i], renameListMap, extensionRenameListMap, outputFolderSuffix, tokenValuePairsMap); + String outputCompleteFileName = outputFolderFile.getAbsolutePath() + File.separator + outputFileName; + + boolean needsAntProcessing = false; + + if (isToBeFiltered(files[i], antProcessFilterArray)) { + needsAntProcessing = true; + } + //check if we need velocity processing... + if (needsAntProcessing) { + //velocity filtering was performed, perform ant velocity by taking pre-processed input file by velocity + fileUtils.copyFile(inputCompleteFileName, outputCompleteFileName, fsc, true); + if (logger.isDebugEnabled()) { + logger.debug("FILTERED WITH ANT:" + files[i]); + } + } else { + fileUtils.copyFile(inputCompleteFileName, outputCompleteFileName, null, true); + if (logger.isDebugEnabled()) { + logger.debug("NO FILTERED WITH ANT:" + files[i]); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + + public static String getInputFolder(String inputFolder, String bundleName) { + if (bundleName == null) { + return inputFolder; + } + Bundle[] stackBundle = Platform.getBundles(bundleName, null); + String bundleFolder; + try { + //String separator = FileSystems.getDefault().getSeparator(); + bundleFolder = org.eclipse.core.runtime.FileLocator.getBundleFile(stackBundle[0]).getAbsolutePath() + "\\"; + } catch (IOException e) { + bundleFolder = stackBundle[0].getLocation(); + if (bundleFolder.startsWith(REFERENCE_FILE)) { + bundleFolder = bundleFolder.substring(REFERENCE_FILE.length()); + } + } + + return bundleFolder + inputFolder; + } + + private static List buildTokenValuePairs(String tokenValuePairs) { + List result = new ArrayList(); + if (tokenValuePairs != null) { + String[] parts = tokenValuePairs.split(","); + for (String part : parts) { + String[] subParts = part.split("="); + if(subParts.length < 2) { + ConsoleUtils.consoleMessage(SeverityLevels.ERROR, "Per la proprietà " + subParts[0] + " manca il corrispettivo valore"); + } + + String key = subParts[0]; + String value = subParts[1]; + ValuePair vp = new ValuePair(); + vp.name = key; + vp.value = value; + result.add(vp); + } + } + return result; + } + + + private static Map buildRenameList(String renameList) { + Map result = new HashMap(); + if (renameList != null) { + String[] parts = renameList.split(","); + for (String part : parts) { + String[] subParts = part.split("="); + String key = subParts[0]; + String value = subParts[1]; + result.put(key, value); + } + } + return result; + } + + /** + * Determine the output file name by processing renameList and extensionRenameList rules. + * @param inputFile input file name. + * @param renameListMap + * @param extensionRenameListMap + * @param outputFolderSuffix + * @param tokenValuePairsMap + * @return the output file name processed. + */ + private static String determineOutputFileName(String inputFile, Map renameListMap, Map extensionRenameListMap, String outputFolderSuffix, List tokenValuePairsMap) { + String outputFileName = inputFile; + if (renameListMap.get(inputFile) != null) { + outputFileName = (String)renameListMap.get(inputFile); + if (logger.isDebugEnabled()) { + logger.debug("Renamed file " + inputFile + " to " + outputFileName); + } + } + //Check for extension renaming... + int extPos = outputFileName.lastIndexOf("."); + if (extPos > -1) { + String extension = outputFileName.substring(extPos); + if (extensionRenameListMap.get(extension) != null) { + outputFileName = outputFileName.substring(0, extPos) + extensionRenameListMap.get(extension); + if (logger.isDebugEnabled()) { + logger.debug("Renamed extension " + extension + " to " + extensionRenameListMap.get(extension) + " for filename:" + outputFileName); + } + } + } + if (outputFolderSuffix != null) { + int pos = outputFileName.lastIndexOf(File.separator); + outputFileName = outputFileName.substring(0, pos) + File.separator + outputFolderSuffix + File.separator + outputFileName.substring(pos); + } + for (Iterator iterator = tokenValuePairsMap.iterator(); iterator.hasNext();) { + ValuePair valuePair = (ValuePair) iterator.next(); + outputFileName = outputFileName.replaceAll("@" + valuePair.name + "@", valuePair.value); + } + return outputFileName; + } + + private static String[] prepareAntProcessFilerArray(String antProcessFilter) { + String[] antProcessFilterArray = null; + if (antProcessFilter != null && antProcessFilter.trim().length() > 0) { + antProcessFilterArray = antProcessFilter.split(","); + } + return antProcessFilterArray; + } + + private static boolean isToBeFiltered(String file, String[] processFilterArray) { + String normalizedFile = file.replace('\\', '/'); + + if (processFilterArray != null) { + for (int i = 0; i 0) { + ds.setIncludes(includeFilter.split(",")); + } + if (excludeFilter != null && excludeFilter.trim().length() > 0) { + ds.setExcludes(excludeFilter.split(",")); + } + if (excludeDefaultExt) { + ds.addDefaultExcludes(); + } + return ds; + } + + private static FilterSetCollection buildFilterSet(List tokenValuePairsMap) { + FilterSetCollection fsc = new FilterSetCollection(); + FilterSet fs = new FilterSet(); + Iterator i = tokenValuePairsMap.iterator(); + while (i.hasNext()) { + CopyFolderUtils.ValuePair tokenValuePair = (CopyFolderUtils.ValuePair) i + .next(); + fs.addFilter(tokenValuePair.getName().toUpperCase(), tokenValuePair.getValue()); + } + fsc.addFilterSet(fs); + return fsc; + } + + public static class ValuePair { + private String name; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntityCategory.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntityCategory.java new file mode 100644 index 0000000000000000000000000000000000000000..e7e2ff8bef6eb88adc80032e5413b2a4fa958295 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntityCategory.java @@ -0,0 +1,8 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public enum EntityCategory { + business, + mail, + security, + attachment +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntitySpecificFeature.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntitySpecificFeature.java new file mode 100644 index 0000000000000000000000000000000000000000..c9c224a344364a05afc5be201eb28f96113e0c4b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntitySpecificFeature.java @@ -0,0 +1,9 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public enum EntitySpecificFeature { + Attachment, + AdvancedCrud, + History, + RtfTemplate, + BasicPdfCsvExport; +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntityUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntityUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b61acfb91e8a12dceb6d8eef7fb640a98122a922 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/EntityUtils.java @@ -0,0 +1,1013 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.stream.Collectors; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.uml2.uml.Association; +import org.eclipse.uml2.uml.Class; +import org.eclipse.uml2.uml.Classifier; +import org.eclipse.uml2.uml.EnumerationLiteral; +import org.eclipse.uml2.uml.Model; +import org.eclipse.uml2.uml.Package; +import org.eclipse.uml2.uml.Property; +import org.eclipse.uml2.uml.Stereotype; +import org.eclipse.uml2.uml.UMLPackage; + +import it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils.RelationType; + +public class EntityUtils { + + public static boolean hasAutogeneratedIdBySeq(Class classe) { + Stereotype stereotype = classe.getAppliedStereotype(StereotypeName.ENTITY); + if (stereotype != null) { + String sequence = (String) classe.getValue(stereotype, StereotypePropertyName.SEQUENCE_NAME); + + if (classe.hasValue(stereotype, StereotypePropertyName.SEQUENCE_NAME) && sequence != null + && !("").equals(sequence)) { + return true; + } + } + return false; + } + + public static String getSequenceName(Class classe) { + String sequence = ""; + Stereotype stereotype = classe.getAppliedStereotype(StereotypeName.ENTITY); + if (stereotype != null) { + sequence = (String) classe.getValue(stereotype, StereotypePropertyName.SEQUENCE_NAME); + } + return sequence; + } + + /** + * Return true if the class has applied the Entity Stereotype + * + * @author Jessica Pascarella + * @param classe + * @return true if the class has applied the Entity Stereotype + */ + public static boolean isEntityStereotype(Class classe) { + Stereotype stereotype = classe.getAppliedStereotype(StereotypeName.ENTITY); + if (stereotype != null) + return true; + return false; + } + + /** + * Check if a class has at least 1 property annotated as ID + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static boolean hasInnerCompositeKey(Class classe) { + int numOfId = getClassIDsIncludingFK(classe).size(); + if (numOfId == 1) { + return false; + } + return true; + } + + /** + * Return a set containing all properties annotated as ID + * + * @author Vittorio Niespolo + * @param classe + * @return a set of ID belonging to the class + */ + public static Collection getClassIDs(Class classe) { + Collection ids = new ArrayList<>(); + if (classe != null && classe.getOwnedAttributes() != null) { + Iterator attributes = getAttributeList(classe).iterator(); + while (attributes.hasNext()) { + Property p = attributes.next(); + if (p.isID()) { + ids.add(p); + } + } + } + return ids; + } + + /** + * Return a set of id property obtained from class and its parent relations + * + * @author Vittorio Niespolo + * @param classe + * @return a set of id property obtained from class and its parent relations + */ + public static Collection getClassIDsIncludingFK(Class classe) { + // ID Interni + Collection ids = getClassIDs(classe); + // ID Esterni + ids.addAll(getIdAttributesFromForeignKeys(classe)); + return ids; + } + + /** + * Check if a property is in the compositeKey of the class + * + * @author Vittorio Niespolo + * @param classe + * @param property + * @return true if contained in the class compositeKey + */ + public static boolean isInCompositeKey(Class classe, Property property) { + if (hasCompositeKey(classe)) { + if (getClassIDsIncludingFK(classe).contains(property)) { + return true; + } + } + return false; + } + + /** + * Return a collection of Property containing ID derived from parents foreign + * key + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static Collection getIdAttributesFromForeignKeys(Class classe) { + Collection idsFromForeignKeys = new ArrayList<>(); + Iterator associations = AssociationUtils.getParentAssociations(classe).iterator(); + + while (associations.hasNext()) { + Association a = associations.next(); + if (AssociationUtils.isIdentifying(a)) { + idsFromForeignKeys.addAll(getClassIDsIncludingFK(AssociationUtils.getOtherEnd(classe, a))); + } + } + return idsFromForeignKeys; + } + + /** + * Return a Set of id properties from class and its associations + * + * @author Vittorio Niespolo , Jessica + * Pascarella + * @param classe + * @return Set of id properties + */ + public static Collection getCompositeKeyAttributes(Class classe) { + Set ckAttributes = new HashSet<>(); + + // Attributi id interni + ckAttributes.addAll(getClassIDs(classe)); + + // Attributi id da FK + Iterator associations = classe.getAssociations().iterator(); + while (associations.hasNext()) { + Association a = associations.next(); + if (AssociationUtils.isIdentifying(a)) { + for (Property p : a.getMemberEnds()) { + if (GeneralUtils.isParentZeroOneMultiplicity(a, p)) + ckAttributes.addAll(getClassIDs((Class) p.getType())); + } + } + } + return ckAttributes; + } + + /** + * Return a Set of id properties from class and its associations + * + * @author Vittorio Niespolo , Jessica + * Pascarella + * @param classe + * @return Set of id properties + */ + + public Collection getCompositeKeyAttributesWithMappedNames(Class classe, Boolean includeInternalCK) { + Collection ckAttributes = new ArrayList<>(); + Collection ownerClassIDs = new ArrayList<>(); + AssociationUtils assUtils = new AssociationUtils(); + + // Attributi id interni + ckAttributes.addAll(getClassIDs(classe)); + + // Attributi id da FK + for (Association a : AssociationUtils.getParentAssociations(classe)) { + if (!hasCompositeKey(AssociationUtils.getParentClass(classe, a)) && !includeInternalCK.booleanValue() + || includeInternalCK.booleanValue()) { + if (AssociationUtils.isIdentifying(a)) { + for (Property p : a.getMemberEnds()) { + if (GeneralUtils.isClassParent(classe, a, p)) { + ownerClassIDs = getClassIDsIncludingFK((Class) p.getType()); + for (Property id : ownerClassIDs) { + id.eSetDeliver(false); + id.setName(assUtils.getMappedName(a, id)); + } + ckAttributes.addAll(ownerClassIDs); + } + } + } + } + } + return ckAttributes; + } + + /** + * Return true if a Class has a CompositeKey + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static boolean hasCompositeKey(Class classe) { + // VN L'id di una classe con generalizzazione è nella general + if (hasGeneralClass(classe)) { + return false; + } + if (classe != null && (hasExternalPK(classe) || EntityUtils.hasInnerCompositeKey(classe))) + return true; + return false; + } + + /** + * Return true if a Class has at least one father with a CompositeKey + * + * @author Luca Barone + * @param classe + * @return + */ + public boolean hasFatherWithCompositeKey(Class classe) { + if (classe != null) { + for (Class fClass : AssociationUtils.getParentClasses(classe)) { + if (fClass != null && hasExternalPK(fClass) || hasInnerCompositeKey(fClass)) + return true; + } + } + return false; + } + + /** + * Return true if an entity has id attribute flagged as autogenerated. + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static boolean hasAutogeneratedId(Class classe) { + Stereotype stereotype = classe.getAppliedStereotype(StereotypeName.ENTITY); + if (stereotype != null) { + boolean autoId = (boolean) classe.getValue(stereotype, StereotypePropertyName.AUTOID); + + if (autoId) { + return true; + } + } + return false; + } + + /** + * Return the definition's stereotype value for the input entity + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public String getEntityTooltip(Class classe) { + if (hasHelp(classe)) { + return getEntityHelp(classe); + } + if (hasDefinition(classe)) { + return getEntityDefinition(classe); + } + if (org.apache.commons.lang3.StringUtils.isNotEmpty(getEntityLabel(classe))) { + return getEntityLabel(classe); + } + if (!classe.getLabel().equals(classe.getName())) { + return classe.getLabel(); + } + return StringUtils.splitCamel(classe.getName()); + } + + /** + * Return the definition's stereotype value for the input entity + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static String getEntityDefinition(Class classe) { + return StereotypeUtils.getStereotypeValue(classe, StereotypeName.ENTITY, + StereotypePropertyName.DEFINITION); + } + + /** + * Return the definition's stereotype value for the input entity + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public String getEntityLabel(Class classe) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(StereotypeUtils.getStereotypeValue(classe, + StereotypeName.ENTITY, StereotypePropertyName.LABEL))) { + return StereotypeUtils.getStereotypeValue(classe, StereotypeName.ENTITY, + StereotypePropertyName.LABEL); + } + return StringUtils.splitCamel(classe.getLabel()); + } + + /** + * Return true if definition's stereotype is not empty + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public boolean hasDefinition(Class classe) { + if (getEntityDefinition(classe) == null || getEntityDefinition(classe) == "") { + return false; + } + return true; + } + + /** + * Return the definition's stereotype value for the input entity + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static String getEntityHelp(Class classe) { + return StereotypeUtils.getStereotypeValue(classe, StereotypeName.ENTITY, + StereotypePropertyName.HELP); + } + + /** + * Return true if definition's stereotype is not empty + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public boolean hasHelp(Class classe) { + if (getEntityHelp(classe) == null || getEntityHelp(classe) == "") { + return false; + } + return true; + } + + /** + * Check if a property is contained in compositeKey or is an ID + * + * @author Vittorio Niespolo + * @param property + * @param classe + * @return + */ + public static boolean isInID(Property property, Class classe) { + if (getClassIDsIncludingFK(classe).contains(property)) { + return true; + } + return false; + } + + /** + * Check if a property is contained in compositeKey or is an ID + * + * @author Vittorio Niespolo + * @param property + * @param classe + * @return + */ + public static boolean isInInnerID(Class classe, Property property) { + if (getClassIDs(classe).contains(property)) { + return true; + } + return false; + } + + public static boolean isAuditable(Class classe) { + Stereotype stereotype = classe.getAppliedStereotype(StereotypeName.ENTITY); + if (stereotype != null) { + return (boolean) classe.getValue(stereotype, StereotypePropertyName.AUDITABLE) == true; + } + return false; + } + + /** + * Return a list containing internal attributes and externals attributes from + * parent entity + * + * @author Vittorio Niespolo + * @param aClass + * @return + */ + public static Collection getCompleteAttributeList(Class aClass) { + Collection attributeList = new ArrayList<>(); + // ID ESTERNI + attributeList.addAll(EntityUtils.getIdAttributesFromForeignKeys(aClass)); + // ATTR. INTERNI + attributeList.addAll(getAttributeList(aClass)); + return attributeList; + } + + /** + * Return a list containing internal attributes and externals attributes from + * parent entity + * + * @author Vittorio Niespolo + * @param aClass + * @return + */ + public static Collection getAttributeList(Class aClass) { + Collection attributeList = new ArrayList<>(); + // VN Attenzione ogni classe può estendere solo una classe. + if (hasGeneralClass(aClass)) { + // ATTR. DA GENERAL + Collection attributesFromGeneral = ((Class) aClass.getGenerals().toArray()[0]) + .getOwnedAttributes(); + attributeList.addAll(attributesFromGeneral); + } + + // ATTR. INTERNI + attributeList.addAll(aClass.getOwnedAttributes()); + + return attributeList; + } + + /** + * Ritorna la categoria di appartenenza di una entità + * + * @author Vittorio Niespolo + * @param aClass + * @return + */ + public static String getCategory(Class aClass) { + return StereotypeUtils.getStereotypeValue(aClass, StereotypeName.ENTITY, + StereotypePropertyName.CATEGORY).getName(); + } + + /** + * @author Vittorio Niespolo + * @param aClass + * @param category + * @return + */ + public static boolean isInCategory(Class aClass, EntityCategory category) { + if (category.toString().equals(getCategory(aClass))) + return true; + return false; + } + + public static boolean isBusinessCategory(Class aClass) { + return isInCategory(aClass, EntityCategory.business); + } + + public static boolean isAttachmentCategory(Class aClass) { + return isInCategory(aClass, EntityCategory.attachment); + } + + public static boolean isMailCategory(Class aClass) { + return isInCategory(aClass, EntityCategory.mail); + } + + public static boolean isSecurityCategory(Class aClass) { + return isInCategory(aClass, EntityCategory.security); + } + + public static boolean hasRelationTypeRelation(Class aClass, RelationType relationType) { + + if (aClass != null && aClass.getAssociations() != null) { + Iterator associations = aClass.getAssociations().iterator(); + while (associations.hasNext()) { + Association a = associations.next(); + if (AssociationUtils.isAssociationInRelationType(a, relationType)) { + return true; + } + } + } + return false; + } + + public static boolean hasOneToOneRelation(Class aClass) { + return hasRelationTypeRelation(aClass, RelationType.OneToOne); + } + + public static boolean hasManyToOneRelation(Class aClass) { + return hasRelationTypeRelation(aClass, RelationType.ManyToOne); + } + + /** + * Return the first string attribute from class attributes. If noone of + * attribute is a string then first one is taken. + * + * @author Vittorio Niespolo + * @param aClass + * @return + */ + public static String getFirstStringAttribute(Class aClass) { + for (Property attribute : getFiltrableAttributes(aClass)) { + if (PropertyUtils.isString(attribute)) { + return StringUtils.toUpperFirst(attribute.getName()); + } + } + return "ObjectKey"; + } + + public static boolean isInRole(Class classe, String entityRole) { + Stereotype stereotype = null; + String role; + + stereotype = classe.getAppliedStereotype(StereotypeName.ENTITY); + if (stereotype != null) { + role = (String) classe.getValue(stereotype, StereotypePropertyName.ROLE); + if (role != null) { + return (role.toLowerCase().equals(entityRole.toLowerCase())); + } + } + return false; + } + + /** + * @author Vittorio Niespolo , Jessica + * Pascarella + * @param classe + * @return + */ + public static boolean hasExternalPK(Class classe) { + if (classe != null && classe.getAssociations() != null) { + Iterator associations = classe.getAssociations().iterator(); + while (associations.hasNext()) { + Association a = associations.next(); + if (AssociationUtils.isIdentifying(a)) { + for (Property p : a.getMemberEnds()) { + if (((Class) p.getType() == classe) + && (PropertyUtils.isNMultiplicity(p) || GeneralUtils.isChildZeroOneMultiplicity(a, p))) + return true; + } + } + } + } + return false; + } + + /** + * Return true if entity has at least one date attribute + * + * @author Federico Gambardella + * @param classe + * @return + */ + public static boolean hasDateProperty(Class classe) { + for (Property property : classe.allAttributes()) { + if (PropertyUtils.isDate(property)) + return true; + } + return false; + } + + /** + * Return true if entity has at least one attribute + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public boolean hasAttributes(Class classe) { + if (classe.getAllAttributes().size() > 0) { + return true; + } + return false; + } + + /** + * Return true if entity has at least one attribute + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public boolean hasAttributesWithoutIDs(Class classe) { + Collection ids = getClassIDs(classe); + Collection attributes = getAttributeList(classe); + attributes.removeAll(ids); + + if (attributes.size() > 0) { + return true; + } + return false; + } + + /** + * Ritorna la lista degli attributi semplici (NON ID) della classe + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public Collection getAttributesWithoutIDs(Class classe) { + Collection ids = getClassIDs(classe); + Collection attributes = getAttributeList(classe); + attributes.removeAll(ids); + + return attributes; + } + + /** + * Ritorna true se la classe in input ha almeno una classe Gen collegata + * + * @author Vittorio Niespolo + * + * @param aClass + * @return + */ + public static boolean hasGeneralClass(Class aClass) { + return !aClass.getGenerals().isEmpty(); + } + + /** + * Ritorna true se la classe in input estende SecurityUser + * + * @author Vittorio Niespolo + * + * @param aClass + * @return + */ + public static boolean generalizeSecurityUserRole(Class aClass) { + Class general = getGeneralClass(aClass); + if (general != null && SecurityUtils.isInSecurityUserRole(general)) { + return true; + } + return false; + } + + /** + * Ritorna la classe Gen collegata a quella in input + * + * @author Vittorio Niespolo + * + * @param aClass + * @return + */ + public static Class getGeneralClass(Class aClass) { + EList generals = aClass.getGenerals(); + if (generals != null && generals.size() > 0) + return ((Class) generals.toArray()[0]); + return null; + } + + /** + * Array delle classi estese + * + * @author Vittorio Niespolo + */ + private Collection extendedClasses = new ArrayList(); + + /** + * Popola l'elenco delle entità estese. Attualmente Non c'è un metodo per sapese + * se una data entità viene estesa da altre + * + * @author Vittorio Niespolo + * + * @param aModel + */ + public void populateExtendedClasses(Model aModel) { + extendedClasses = new ArrayList(); + for (Class classe : ModelUtils.getModelEntities()) { + if (!classe.getGenerals().isEmpty()) { + extendedClasses.addAll((Collection) classe.getGenerals()); + } + } + } + + /** + * Controlla se la classe in input è estesa da altre entità + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public boolean isClassExtended(Class classe) { + for (Class aClass : extendedClasses) { + if (classe.getName().equals(aClass.getName())) { + return true; + } + } + return false; + } + + /** + * Ritorna una lista di proprietà di tipo date + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public Collection getDateProperties(Class classe) { + return getAttributeList(classe).stream().filter(attr -> PropertyUtils.isDate(attr)) + .collect(Collectors.toList()); + } + + /** + * Ritorna la lista dei soli attributi di tipo stringa della classe + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public Collection getStringProperties(Class classe) { + return getAttributeList(classe).stream().filter(attr -> PropertyUtils.isString(attr)) + .collect(Collectors.toList()); + } + + /** + * Ritorna la lista dei soli attributi di tipo stringa dei padri della classe in + * input + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static Collection getParentStringProperties(Class classe) { + Collection result = new ArrayList(); + for (Class parentClass : AssociationUtils.getParentClasses(classe)) { + result.addAll(getAttributeList(parentClass).stream().filter(attr -> PropertyUtils.isString(attr)) + .collect(Collectors.toList())); + } + return result; + } + + public static Collection getParentStringId(Class classe) { + Collection result = new ArrayList(); + for (Class parentClass : AssociationUtils.getParentClasses(classe)) { + result.addAll(getClassIDs(parentClass).stream().filter(attr -> PropertyUtils.isString(attr)) + .collect(Collectors.toList())); + } + return result; + } + + /** + * Ritorna l'elenco di tutte le associazioni identifying della classe in input + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static Collection getIdentifyingParentAssociations(Class classe) { + Collection result = new ArrayList<>(); + for (Association association : AssociationUtils.getParentAssociations(classe)) { + if (AssociationUtils.isIdentifying(association)) { + result.add(association); + } + } + return result; + } + + /** + * Ritorna l'elenco di tutte le associazioni identifying della classe in input + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public Collection getNotIdentifyingParentAssociations(Class classe) { + Collection result = new ArrayList<>(); + for (Association association : AssociationUtils.getParentAssociations(classe)) { + if (!AssociationUtils.isIdentifying(association)) { + result.add(association); + } + } + return result; + } + + /** + * Ritorna una lista di attributi sui quali è possibile eseguire ricerche + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static Collection getFiltrableAttributes(Class classe) { + Collection result = getFiltrableInternalAttributes(classe); + + // Campi Audit + if (isAuditable(classe)) { + result.add(createPropertyForClass(classe, AuditableAttributes.createdBy.toString(), "String", "Creato da")); + result.add(createPropertyForClass(classe, AuditableAttributes.lastModifiedBy.toString(), "String", "Ultima Modifica da")); + result.add(createPropertyForClass(classe, AuditableAttributes.createdDate.toString(), "Datetime", "Data Creazione")); + result.add(createPropertyForClass(classe, AuditableAttributes.lastModifiedDate.toString(), "Datetime", "Data Ultima Modifica")); + } + return result; + } + + public static Collection getFiltrableInternalAttributes(Class classe) { + Collection result = classe.getOwnedAttributes().stream() + .filter(a -> !TypeUtils.getNotFiltrableTypes().contains(a.getType().getName())) + .collect(Collectors.toList()); + return result; + } + + private static Property createPropertyForClass(Class classe, String propertyName, String dataType, String labelValue) { + Property prop = (Property) EcoreUtil.create(UMLPackage.Literals.PROPERTY); + + prop.setName(propertyName); + prop.setType(GeneralUtils.getVoilaType(classe, dataType)); + + //FIXME :( +// Stereotype stereotype = (Stereotype)ModelUtils.getVoila2Profile().getMember("Attribute"); +// prop.applyStereotype(stereotype); +// prop.setValue(stereotype, StereotypePropertyName.LABEL, labelValue); + + return prop; + } + + public static Collection getAttributesForPresentation(Class classe) { + return getFiltrableAttributes(classe); + } + + /** + * Return a list containing internal attributes and externals attributes from + * parent entity + * + * @author Vittorio Niespolo + * @param aClass + * @return + */ + public static Collection getCompleteAttributeListForPresentation(Class aClass) { + Collection attributeList = new ArrayList<>(); + // ID ESTERNI + attributeList.addAll(EntityUtils.getIdAttributesFromForeignKeys(aClass)); + // ATTR. INTERNI + attributeList.addAll(getAttributesForPresentation(aClass)); + return attributeList; + } + + /** + * Method to check if a Class has exactly one field of String type to condition + * annotation generation + * + * @param aClass + * @return 1 if num field string == 1 , 0 otherwise + */ + public boolean entityHasOneStringField(Class aClass) { + Collection stringProperties = getStringProperties(aClass); + + if (stringProperties.size() == 1) + return true; + + return false; + } + + public String getTableName(Class aClass) { + return StereotypeUtils.getStereotypeValue(aClass, StereotypeName.ENTITY, + StereotypePropertyName.TABLE_NAME); + } + + /** + * Ritorna un helper che descriva la classe + * + * @author Vittorio Niespolo + * + * @param aClass + * @return + */ + public static String getHelper(Class aClass) { + String result = getEntityHelp(aClass); + if (result == null) { + result = getEntityDefinition(aClass); + } + if (result == null) { + result = StringUtils.splitCamel(aClass.getName()); + } + return result; + } + + public static Collection getAttributesForPresentationWOAudit(Class classe) { + return getFiltrableInternalAttributes(classe); + } + + public static boolean hasParentsWithCK(Class classe) { + for (Association parentAss : AssociationUtils.getParentAssociations(classe)) { + if (AssociationUtils.isIdentifying(parentAss) + && hasCompositeKey(AssociationUtils.getParentClass(classe, parentAss))) { + return true; + } + } + return false; + } + + /** + * Ritorna true se classe ha una self relation. + * + * @author Federico Gambardella + * + * @param classe + * @return + */ + public static boolean hasSelfRelation(Class classe) { + for (Association association : classe.getAssociations()) { + if (Boolean.TRUE.equals(AssociationUtils.isSelfRelation(association))) + return true; + } + return false; + } + + /** + * Return true id the class has the attribute in input. + * + * @author Federico Gambardella + * @param classe + * @param attribute + * @return + */ + public static boolean hasAttribute(Class classe, Property attribute) { + Collection attributeList = classe.getAllAttributes(); + for (Property property : attributeList) { + if (property.equals(attribute)) + return true; + } + return false; + } + + /** + * Ritorna true se la classe ha almeno una TextArea nel FE + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static boolean hasTextAreas(Class classe) { + for (Property attribute : getAttributesForPresentation(classe)) { + if (PropertyUtils.hasPhysicalLengthGreaterThan(PropertyUtils.getPhysicalColumnLenght(attribute))) { + return true; + } + } + return false; + } + + /** + * Ritorna true se c'è almeno un'associazione con popup per la parent selection + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static boolean hasPopUpParentSelection(Class classe) { + for (Association parentAss : AssociationUtils.getParentAssociations(classe)) { + if (AssociationUtils.hasPopupParentSelection(parentAss)) { + return true; + } + } + return false; + } + + /** + * Check if the input class has at least one parent. + * + * @author Federico Gambardella + * @param classe + * @return + */ + public static boolean hasAtLeastOneParent(Class classe) { + return !getIdentifyingParentAssociations(classe).isEmpty(); + } + + /** + * Check if the input class has at least a properties annotated as ID. + * + * @author Federico Gambardella + * @param classe + * @return + */ + public static boolean hasAtLeastAPorpertyAnnotatedAsID(Class classe) { + return !getClassIDs(classe).isEmpty(); + } + + /** + * Ritorna true se la classe appartiene alla subject area principale + * + * @author Vittorio Niespolo + * + * @param classe + * @return + */ + public static boolean belongsToMainSubjectArea(Class classe) { + if (classe.getOwner() instanceof Package) { + return false; + } + return true; + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ExceptionHandlerUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ExceptionHandlerUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..8e9fead114861a1a16ac86fad57cbd1cc813812c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ExceptionHandlerUtils.java @@ -0,0 +1,166 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.Collection; +import java.util.logging.ConsoleHandler; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.eclipse.uml2.uml.Association; +import org.eclipse.uml2.uml.Class; +import org.eclipse.uml2.uml.Model; +import org.eclipse.uml2.uml.Property; + +public class ExceptionHandlerUtils { + + private static final Logger LOGGER = Logger.getLogger(ExceptionHandlerUtils.class.getName()); + + static { + LOGGER.setUseParentHandlers(false); + + ConsoleHandler handler = new ConsoleHandler(); + Formatter formatter = new LogFormatter(); + + handler.setFormatter(formatter); + + LOGGER.addHandler(handler); + } + + /** + * Return true if there are Self-Relations without assigned property members + * names + * + * @author Jessica Pascarella + * + * @param classe + * @return true if there are Self-Relations without assigned property members + * names + */ + private boolean hasSelfRelationNameException(Class classe) { + if (EntityUtils.isEntityStereotype(classe)) { + for (Association association : classe.getAssociations()) { + if (AssociationUtils.isSelfRelation(association)) { + for (Property property : association.getMemberEnds()) { + if (property != null && (property.getName() == null || property.getName().equals(""))) { + LOGGER.log(Level.SEVERE, ConsoleMsgJavaUtils.GENERIC_ENTITY_EXCEPTION_MSG + classe.getName() + + " - " + ConsoleMsgJavaUtils.SELF_RELATION_NAMES_EXCEPTION_MSG); + return true; + } + } + } + } + return false; + } + return false; + } + + /** + * Return true if the entity has a sequenceName defined but not an Code Type Id + * + * @author Jessica Pascarella + * @param classe + * @return true if the entity has a sequenceName defined but not an Code Type Id + */ + private boolean hasSequenceNameException(Class classe) { + String sequenceName = ""; + sequenceName = EntityUtils.getSequenceName(classe); + if (sequenceName != null && !("").equals(sequenceName)) { + for (Property p : classe.getOwnedAttributes()) { + if (p.isID() && p.getType() != null && p.getType().getName().equals("Code")) + return false; + } + LOGGER.log(Level.SEVERE, ConsoleMsgJavaUtils.GENERIC_ENTITY_EXCEPTION_MSG + classe.getName() + " - " + + ConsoleMsgJavaUtils.SEQ_NAME_EXCEPTION_MSG); + return true; + } + return false; + } + + /** + * Return true if there are more entities with the same name + * + * @author Jessica Pascarella + * @param classes + * @param classe + * @return true if there are more entities with the same name + */ + private boolean hasEntityNamesException(Class classe, Collection classes) { + if (EntityUtils.isEntityStereotype(classe)) { + for (Class c : classes) { + if (classe != c && EntityUtils.isEntityStereotype(c) && classe.getName().equals(c.getName())) { + LOGGER.log(Level.SEVERE, ConsoleMsgJavaUtils.GENERIC_ENTITY_EXCEPTION_MSG + classe.getName() + " - " + + ConsoleMsgJavaUtils.DUPLICATED_ENTITY_NAME_EXCEPTION_MSG); + return true; + } + } + } + return false; + } + + /** + * Return true if the entity has not an ID (owner attribute), an autogenerated + * Id id or an id by a parent class + * + * @author Jessica Pascarella + * + * @return true if the entity has not an ID (owner attribute), an autogenerated + * Id id or an id by a parent class + */ + private boolean hasEntityIdException(Class classe) { + if (!EntityUtils.isEntityStereotype(classe)) + return false; + if (EntityUtils.getCompositeKeyAttributes(classe).size() > 0) + return false; + LOGGER.log(Level.SEVERE, ConsoleMsgJavaUtils.GENERIC_ENTITY_EXCEPTION_MSG + classe.getName() + " - " + + ConsoleMsgJavaUtils.MISSING_ENTITY_ID_EXCEPTION_MSG); + return true; + } + + /** + * Return true if there is an attribute without type for the entity + * + * @author Jessica Pascarella + * + * @param type + * @return true if there is an attribute without type for the entity + */ + private boolean hasTypeMissingException(Class classe) { + + if (!EntityUtils.isEntityStereotype(classe)) + return false; + for (Property p : classe.getOwnedAttributes()) { + if (p.getType() == null) { + LOGGER.log(Level.SEVERE, ConsoleMsgJavaUtils.GENERIC_ENTITY_EXCEPTION_MSG + classe.getName() + " - " + + ConsoleMsgJavaUtils.MISSING_TYPE_EXCEPTION_MSG); + return true; + } + } + return false; + } + + /** + * Return true if the Diagram is valid for code generation + * + * @author Jessica Pascarella + * + * @param model + * @return true if the Diagram is valid for code generation + */ + public boolean hasDiagramExceptions(Model model) { + boolean checkException = false; + LOGGER.log(Level.INFO, "Diagram Validation Phase started"); + Collection classes = ModelUtils.getModelEntities(); + for (Class classe : classes) { + checkException = hasEntityNamesException(classe, classes) || checkException; + checkException = hasTypeMissingException(classe) || checkException; + checkException = hasSequenceNameException(classe) || checkException; + checkException = hasEntityIdException(classe) || checkException; + checkException = hasSelfRelationNameException(classe) || checkException; + } + if (checkException) + LOGGER.log(Level.SEVERE, "Diagram Validation Phase failed"); + else + LOGGER.log(Level.INFO, "Diagram Validation Phase passed"); + return checkException; + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/FeatureUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/FeatureUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..3ab7797588b93f081d21c4450052d99082c0df60 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/FeatureUtils.java @@ -0,0 +1,313 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.ecore.impl.DynamicEObjectImpl; +import org.eclipse.uml2.uml.Actor; +import org.eclipse.uml2.uml.Association; +import org.eclipse.uml2.uml.Class; +import org.eclipse.uml2.uml.Model; +import org.eclipse.uml2.uml.Property; +import org.eclipse.uml2.uml.Stereotype; +import org.eclipse.uml2.uml.Type; +import org.eclipse.uml2.uml.UseCase; + +public class FeatureUtils { + + /** + * Return a set of Generic Features belonging to model + * + * @author Vittorio Niespolo + * @param model + * @return set of generic Feature + */ + public Collection getGenericFeatures(Model model) { + Collection features = ModelUtils.getFeatures(model); + Collection genericFeatures = new ArrayList<>(); + + for (UseCase feature : features) { + if (isGenericFeatureStereotype(feature)) { + genericFeatures.add(feature); + } + } + return genericFeatures; + } + + /** + * Return a set of Entity Specific Features belonging to model + * + * @author Vittorio Niespolo + * @param model + * @return set of Entity Specific Features + */ + public static Collection getEntitySpecificFeatures(Model model) { + Collection features = ModelUtils.getFeatures(model); + Collection entitySpecificfeatures = new ArrayList<>(); + + for (UseCase feature : features) { + if (isEntitySpecificFeatureStereotype(feature)) { + entitySpecificfeatures.add(feature); + } + } + return entitySpecificfeatures; + } + + /** + * Return the Generator Actor from the model + * + * @param model + * @return actor Generator + */ + public static Actor getGenerator(Model model) { + for (org.eclipse.uml2.uml.Package pack : model.getImportedPackages()) { + if (pack != null) { + for (Type type : pack.getOwnedTypes()) { + if (type instanceof Actor && "Generator".equals(type.getName())) { + return (Actor) type; + } + } + } + } + + for (Type type : model.getOwnedTypes()) { + if (type instanceof Actor && "Generator".equals(type.getName())) { + return (Actor) type; + } + } + return null; + } + + /** + * Return true if a Feature is Linked to Generator + * + * @author Vittorio Niespolo + * @param model + * @param feature + * @return + */ + public static boolean isFeatureLinkedToGenerator(Model model, UseCase feature) { + for (Association association : feature.getAssociations()) { + for (Property property : association.getMemberEnds()) { + if (property.getType() == getGenerator(model)) { + return true; + } + } + } + return false; + } + + /** + * Return the Set of EntitySpecificFeature's Entities + * + * @author Vittorio Niespolo + * @param feature + * @return Set of entities + */ + @SuppressWarnings("unchecked") + public static Collection getEntitySpecificFeatureEntities(UseCase feature) { + Stereotype stereotype; + Collection entities = new ArrayList<>(); + + stereotype = feature.getAppliedStereotype(StereotypeName.ENTITY_SPECIFIC_FEATURE); + + if (stereotype != null) { + + List entitiesDEOI = (List) feature.getValue(stereotype, + StereotypePropertyName.ENTITIES); + + for (DynamicEObjectImpl deoi : entitiesDEOI) { + for (Object crossReference : deoi.eCrossReferences()) { + if (crossReference instanceof Class) { + entities.add((Class) crossReference); + } + } + } + } + return entities; + } + + /** + * Return true if a GenericFeature is enabled. So it exists in the model and is + * linked to the generator + * + * @author Vittorio Niespolo + * @param model + * @param genericFeature + * @return + */ + protected boolean isGenericFeatureEnabled(Model model, GenericFeature genericFeature) { + Collection genericFeatures = getGenericFeatures(model); + + for (UseCase feature : genericFeatures) { + if (feature.getName().equals(genericFeature.name()) && isFeatureLinkedToGenerator(model, feature)) { + return true; + } + } + return false; + } + + /** + * Return true if a GenericFeature is enabled. So it exists in the model and is + * linked to the generator + * + * @author Vittorio Niespolo + * @param model + * @param specificFeature + * @return + */ + protected boolean isEntitySpecificFeatureEnabled(Model model, GenericFeature specificFeature) { + Collection specificFeatures = getEntitySpecificFeatures(model); + + for (UseCase feature : specificFeatures) { + if (feature.getName().equals(specificFeature.name()) && isFeatureLinkedToGenerator(model, feature)) { + return true; + } + } + return false; + } + + /** + * Return true if a EntitySpecificFeature is enabled. So it exists in the model + * and is linked to the generator + * + * @author Vittorio Niespolo + * @param model + * @param entitySpecificFeature + * @param entity + * @return + */ + protected static boolean isEntitySpecificFeatureEnabled(Model model, EntitySpecificFeature entitySpecificFeature, + Class entity) { + Collection entitySpecificFeatures = getEntitySpecificFeatures(model); + + for (UseCase feature : entitySpecificFeatures) { + if (feature.getName().equals(entitySpecificFeature.name()) && isFeatureLinkedToGenerator(model, feature)) { + // VN Check if Feature use-case contains specified entity + Collection entities = getEntitySpecificFeatureEntities(feature); + if (entities.contains(entity)) { + return true; + } + } + } + return false; + } + + /** + * Return true if Attachment feature is enabled + * + * @author Vittorio Niespolo + * @param model + * @param entity + * @return + */ + public boolean isAttachmentEnabled(Class entity, Model model) { + if (isEntitySpecificFeatureEnabled(model, EntitySpecificFeature.Attachment, entity)) { + return true; + } + return false; + } + + /** + * Return true if Email feature is enabled + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public boolean isEmailEnabled(Model model) { + if (isGenericFeatureEnabled(model, GenericFeature.Email)) { + return true; + } + return false; + } + + /** + * Return true if Email feature is enabled + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public boolean isAttachmentEnabled(Model model) { + if (isEntitySpecificFeatureEnabled(model, GenericFeature.Attachment)) { + return true; + } + return false; + } + + /** + * Return true if Security feature is enabled + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public boolean isSecurityEnabled(Model model) { + if (isGenericFeatureEnabled(model, GenericFeature.Security)) { + return true; + } + return false; + } + + /** + * Return true if Caching feature is enabled + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public boolean isCachingEnabled(Model model) { + if (isGenericFeatureEnabled(model, GenericFeature.Caching)) { + return true; + } + return false; + } + + /** + * Return true if the useCase has applied the Feature Stereotype + * + * @author Vittorio Niespolo + * @param usecase + * @return true if the usecase has applied the Feature Stereotype + */ + public static boolean isFeatureStereotype(UseCase useCase) { + Stereotype stereotype = (Stereotype) useCase.getGeneral(StereotypeName.FEATURE); + if (stereotype != null) + return true; + return false; + } + + /** + * Return true if the useCase has applied the Feature Stereotype + * + * @author Vittorio Niespolo + * @param usecase + * @return true if the usecase has applied the Feature Stereotype + */ + public static boolean isEntitySpecificFeatureStereotype(UseCase useCase) { + Stereotype stereotype = useCase.getAppliedStereotype(StereotypeName.ENTITY_SPECIFIC_FEATURE); + if (stereotype != null) + return true; + return false; + } + + /** + * Return true if the useCase has applied the Feature Stereotype + * + * @author Vittorio Niespolo + * @param usecase + * @return true if the usecase has applied the Feature Stereotype + */ + public static boolean isGenericFeatureStereotype(UseCase useCase) { + Stereotype stereotype = useCase.getAppliedStereotype(StereotypeName.GENERIC_FEATURE); + if (stereotype != null) + return true; + return false; + } + + public static boolean isReportEnabled(Class entity, Model model) { + return isEntitySpecificFeatureEnabled(model, EntitySpecificFeature.BasicPdfCsvExport, entity); + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/FileCopyUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/FileCopyUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..aaaea5bed325df37167f50182e8cb274eb075250 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/FileCopyUtils.java @@ -0,0 +1,33 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.io.FileUtils; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.Assert; + +public class FileCopyUtils { + + public static void copyFiles(String sourceFolder, String targetFolder) { + File srcDir = new File(sourceFolder); + File destDir = new File(targetFolder); + + try { + FileUtils.copyDirectory(srcDir, destDir); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static boolean exists(IResource res) { + Assert.isNotNull(res); + return exists(res.getLocation().toFile()); + } + + public static boolean exists(File res) { + Assert.isNotNull(res); + return res.exists(); + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/GeneralUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/GeneralUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..46b88ee69c288e32312cca4e50526bc3e90f9c4b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/GeneralUtils.java @@ -0,0 +1,169 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; +import java.util.zip.CRC32; + +import org.eclipse.uml2.uml.Association; +import org.eclipse.uml2.uml.Class; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.Package; +import org.eclipse.uml2.uml.Property; + +public class GeneralUtils extends AssociationUtils { + + private static List properties; + private static String outputDir; + private static String baseDir; + + public static void setupProps(List p, String oDir, String bDir) { + outputDir = oDir; + baseDir = bDir; + properties = new ArrayList(); + for (String p1 : p) { + Properties props = new Properties(); + try { + props.load(new FileInputStream(new File(p1))); + properties.add(props); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public static String getOutputDir() { + return outputDir; + } + + public static String getBaseDir() { + return baseDir; + } + + public static String getProperty(String pName) { + for (Properties p : properties) { + String value = p.getProperty(pName); + if (value != null) { + return value; + } + } + return null; + } + /** + * Method to generate a SerialUID based on actual Timestamp + * + * @author Vittorio Niespolo + * @param object + * @return the generated SerialUID + */ + public String getGeneratedSerialUID(Class classe) { + CRC32 crc = new CRC32(); + crc.update(getEntityDump(classe).getBytes()); + return String.valueOf(crc.getValue()) + "L"; + } + + public String getEntityDump(Class classe) { + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append(classe.getName()).append("; "); + + // ID + sb.append("["); + Collection ids = EntityUtils.getClassIDs(classe); + if (ids != null) { + Iterator i = ids.iterator(); + while (i.hasNext()) { + Property id = i.next(); + sb.append(getAttributeDump(id)); + } + } + sb.append("]"); + sb.append(", "); + + // ATTRIBUTI GENERICI + sb.append("["); + Collection attributi = classe.getAttributes(); + + if (attributi != null) { + Iterator i = attributi.iterator(); + while (i.hasNext()) { + Property attribute = i.next(); + sb.append(getAttributeDump(attribute)); + } + } + sb.append("]"); + return sb.toString(); + } + + public String getAttributeDump(Property attribute) { + StringBuffer sb = new StringBuffer(); + sb.append("{"); + sb.append(attribute.getName()).append("; "); + sb.append(attribute.getType().getName()).append("; "); + sb.append(PropertyUtils.isRequired(attribute)).append("; "); + sb.append("} "); + return sb.toString(); + } + + /** + * Return true if parent specified by association and property (end) has 0 or 1 + * multiplicity + * + * @author Jessica Pascarella + * @param association + * @param property + * @return + */ + // TODO VN ELIMINARE QUESTO METODO + public static boolean isParentZeroOneMultiplicity(Association association, Property property) { + if (isOneToOneRelation(association) && hasChildOneToOne((Class) property.getType(), association, property)) { + return true; + } else if (!isOneToOneRelation(association) && PropertyUtils.isZeroOneMultiplicity(property)) + return true; + return false; + } + + /** + * Return true if child specified by association and property (end) has 0 or 1 + * multiplicity + * + * @author Jessica Pascarella + */ + // TODO VN ELIMINARE QUESTO METODO + public static boolean isChildZeroOneMultiplicity(Association association, Property property) { + if (isOneToOneRelation(association) && hasParentOneToOne((Class) property.getType(), association, property)) { + return true; + } + return false; + } + + /** + * Ritorna il package del domain importato nel modello + * @author Vittorio Niespolo + * + * @param umlElement + * @return + */ + public static Package getDomainPackage(Element umlElement) { + for (Package pack : umlElement.getModel().getImportedPackages()) { + if (pack.getName().equals("domain_model")) { + return pack; + } + } + ConsoleUtils.consoleMessage(SeverityLevels.ERROR, "Non è stato possibile trovare il domain_model nel modello"); + return null; + } + + public static Class getVoilaType(Class classe, String wishedDataType) { + Package domainPackage = getDomainPackage(classe); + Package domains = (Package) domainPackage.getPackagedElement("domains"); + + Class dataType = (Class) domains.getPackagedElement(wishedDataType); + return dataType; + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/GenericFeature.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/GenericFeature.java new file mode 100644 index 0000000000000000000000000000000000000000..b5e077fa681ac0f93c7a055afde1f32fbf0dc7d8 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/GenericFeature.java @@ -0,0 +1,8 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public enum GenericFeature { + Email, + Attachment, + Caching, + Security; +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/JavaBeautifier.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/JavaBeautifier.java new file mode 100644 index 0000000000000000000000000000000000000000..bf159b3803c78c23e0537b57532de78db26d465f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/JavaBeautifier.java @@ -0,0 +1,250 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Properties; +import java.util.logging.ConsoleHandler; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.eclipse.emf.mwe.core.resources.ResourceLoaderFactory; +import org.eclipse.jdt.core.ToolFactory; +import org.eclipse.jdt.core.formatter.CodeFormatter; +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.text.edits.MalformedTreeException; +import org.eclipse.text.edits.TextEdit; + +import it.micegroup.voila2.cartridge.library.formatters.JavaImportBeautifierImpl; + +public class JavaBeautifier { + + private static final Logger LOGGER = Logger.getLogger(JavaBeautifier.class.getName()); + + static { + LOGGER.setUseParentHandlers(false); + + ConsoleHandler handler = new ConsoleHandler(); + Formatter formatter = new LogFormatter(); + + handler.setFormatter(formatter); + + LOGGER.addHandler(handler); + } + + public JavaBeautifier() { + super(); + + configFile = GeneralUtils.getBaseDir() + "/.settings/org.eclipse.jdt.core.prefs"; + getCodeFormatter(); + + importFormatter = new JavaImportBeautifierImpl(); + importFormatter.setFormat(false); + importFormatter.setOrganizeImports(true); + } + + /** Singleton code formatter instance. */ + private CodeFormatter codeFormatter; + private JavaImportBeautifierImpl importFormatter; + + /** + * Path to the config file for the formatter. See + * http://www.peterfriese.de/index + * .php/2007/05/28/formatting-your-code-using-the-eclipse-code-formatter/ for + * more infor on creating the config file. + */ + private String configFile; + + private Properties options; + + /** + * Formats the file using Eclipse code formatter. The file must have the + * extension '.java'. + */ + public String format(final String input) { +// CharacterSequence sequence = new CharacterSequence(input); +// importFormatter.beautify(sequence); //organize imports + + String result = format(input, null); //Formatting the code; + return result; + } + + /** + * Formats the file using Eclipse code formatter. The file must have the + * extension '.java'. + */ + public String format(final String input, final String fileName) { + //IFile file = ResourcesPlugin.getWorkspace().getRoot().getProject("gcerti").findMember(fileName.substring(6)); + IDocument doc = new Document(input); + TextEdit edit = getCodeFormatter().format(CodeFormatter.K_COMPILATION_UNIT | CodeFormatter.F_INCLUDE_COMMENTS, + doc.get(), 0, doc.get().length(), 0, null); + + // check if text formatted successfully + if (edit != null) { + try { + edit.apply(doc); + /* + ASTParser parser = ASTParser.newParser(AST.JLS11); + // Parse the class as a compilation unit. + parser.setKind(ASTParser.K_COMPILATION_UNIT); + parser.setSource(doc.get().toCharArray()); + parser.setResolveBindings(true); + // Return the compiled class as a compilation unit + ICompilationUnit cu = (ICompilationUnit) parser.createAST(null); + //cu = new BasicCompilationUnit(doc.get().toCharArray(), "it", "tmp.java", "utf-8"); + ImportRewrite ir = ImportRewrite.create(cu, true); + TextEdit editOi = ir.rewriteImports(null); + editOi.apply(doc); + */ + return doc.get(); + } catch (MalformedTreeException e) { + LOGGER.log(Level.WARNING, + "Error during code formatting. Illegal code edit tree (" + e.getMessage() + ")."); + } catch (BadLocationException e) { + ConsoleUtils.consoleMessage("WARN", + "Error during code formatting. Bad location (" + e.getMessage() + ")."); +// } catch (CoreException e) { +// ConsoleUtils.consoleMessage("WARN", +// "Error during code formatting. Bad location (" + e.getMessage() + ")."); + } + } else { + ConsoleUtils.consoleMessage("WARN", "File " + fileName + + " could not be formatted. Make sure your template produces legal Java code!"); + } + return null; + } + + /** + * Returns an instance of the Eclipse code formatter. If the user supplied the + * path to a config file, this file will be used to configure the code + * formatter. Otherwise we use the default options supplied with oAW. + * + * @return a preconfigured instance of the Eclipse code formatter. + */ + private CodeFormatter getCodeFormatter() { + if (codeFormatter == null) { + + if (configFile == null) { + loadDefaultFormatterOptions(); + LOGGER.log(Level.INFO, + "no config file specified; using the default config file supplied with oAW: org.eclipse.jdt.core.formatterprefs"); + } else { + options = readConfig(configFile); + } + + // instantiate the formatter + codeFormatter = ToolFactory.createCodeFormatter(options); + } + return codeFormatter; + } + + private void loadDefaultFormatterOptions() { + options = new Properties(); + options.put("org.eclipse.jdt.core.compiler.compliance", "1.5"); + options.put("org.eclipse.jdt.core.compiler.codegen.targetPlatform", "1.5"); + options.put("org.eclipse.jdt.core.compiler.source", "1.5"); + } + + /** + * Return a Java Properties file representing the options that are in the + * specified config file. + */ + private Properties readConfig(String filename) { + BufferedInputStream stream = null; + BufferedReader reader = null; + + try { + InputStream is = openStream(filename); + final Properties formatterOptions = new Properties(); + if (filename.endsWith(".xml")) { + Pattern pattern = Pattern.compile(""); + reader = new BufferedReader(new InputStreamReader(is)); + for (String line = reader.readLine(); line != null; line = reader.readLine()) { + Matcher matcher = pattern.matcher(line); + if (matcher.matches()) { + formatterOptions.put(matcher.group(1), matcher.group(2)); + } + } + } else { + stream = new BufferedInputStream(is); + formatterOptions.load(stream); + } + // add some settings for the compiler options + // which are not included in the Eclipse code style settings + // to make the code formatter working + // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=222736 + if (formatterOptions.get("org.eclipse.jdt.core.compiler.compliance") == null) { + formatterOptions.put("org.eclipse.jdt.core.compiler.compliance", "1.5"); + } + if (formatterOptions.get("org.eclipse.jdt.core.compiler.codegen.targetPlatform") == null) { + formatterOptions.put("org.eclipse.jdt.core.compiler.codegen.targetPlatform", "1.5"); + } + if (formatterOptions.get("org.eclipse.jdt.core.compiler.source") == null) { + formatterOptions.put("org.eclipse.jdt.core.compiler.source", "1.5"); + } + return formatterOptions; + } catch (IOException e) { + LOGGER.log(Level.WARNING, "Problem reading code formatter config file (" + e.getMessage() + ")."); + loadDefaultFormatterOptions(); + } finally { + if (stream != null) { + try { + stream.close(); + } catch (IOException e) { + /* ignore */ + } + } + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + /* ignore */ + } + } + } + return null; + } + + /** + * Searches for the given filename as a ressource and returns a stream on it. + * Throws an IOException, if the file cannot be found. + * + * @param filename The name of the file to be searched in the ressources. + * @return InputStream for subsequent reading + * @throws IOException + */ + protected InputStream openStream(String filename) throws IOException { + InputStream is = null; + try { + is = ResourceLoaderFactory.createResourceLoader().getResourceAsStream(filename); + } catch (RuntimeException e) { + } + if (is == null) { + is = new FileInputStream(filename); + } + return is; + } + + /** + * @return the configuration file for the formatter + */ + public String getConfigFile() { + return configFile; + } + + /** + * @param configFile configuration file for the formatter + */ + public void setConfigFile(String configFile) { + this.configFile = configFile; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/LogFormatter.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/LogFormatter.java new file mode 100644 index 0000000000000000000000000000000000000000..b82ca630fc45fda910e4a8cafcb9c4b29ea44a44 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/LogFormatter.java @@ -0,0 +1,108 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; + +/** + * Class for logger customization + * + * @author Jessica Pascarella + * + */ +public class LogFormatter extends Formatter { + // ANSI escape code + public static final String ANSI_RESET = "\u001B[0m"; + public static final String ANSI_BLACK = "\u001B[30m"; + public static final String ANSI_RED = "\u001b[1;31m"; + public static final String ANSI_GREEN = "\u001B[32m"; + public static final String ANSI_YELLOW = "\u001b[33m"; + public static final String ANSI_BLUE = "\u001B[34m"; + public static final String ANSI_PURPLE = "\u001B[35m"; + public static final String ANSI_CYAN = "\u001B[36m"; + public static final String ANSI_WHITE = "\u001B[37m"; + public static final String ANSI_ORANGE = "\033[38;2;255;165;0m"; + + // Here you can configure the format of the output and + // its color by using the ANSI escape codes defined above. + + // format is called for every console log message + @Override + public String format(LogRecord record) { + // This example will print date/time, class, and log level in yellow, + // followed by the log message and it's parameters in white . + StringBuilder builder = new StringBuilder(); + if (record.getLevel() != null && record.getLevel() == Level.INFO) + builder.append(ANSI_BLACK); + else if (record.getLevel() != null && record.getLevel() == Level.SEVERE) + builder.append(ANSI_RED); + else if (record.getLevel() != null && record.getLevel() == Level.WARNING) + builder.append(ANSI_BLACK); + + builder.append("["); + builder.append(calcDate(record.getMillis())); + builder.append("]"); + +// builder.append(" ["); +// builder.append(record.getSourceClassName()); +// builder.append("]"); + + if (record.getLevel() != null && record.getLevel() == Level.WARNING) { + builder.append(ANSI_ORANGE); + builder.append(" ["); + builder.append(record.getLevel().getName()); + builder.append("]"); + builder.append(ANSI_RESET); + builder.append(ANSI_BLACK); + } else if (record.getLevel() != null && record.getLevel() == Level.INFO) { + builder.append(ANSI_BLUE); + builder.append(" ["); + builder.append(record.getLevel().getName()); + builder.append("]"); + builder.append(ANSI_RESET); + builder.append(ANSI_BLACK); + } else if (record.getLevel() != null && record.getLevel() == Level.SEVERE) { + builder.append(ANSI_RED); + builder.append(" ["); + builder.append("ERROR"); + builder.append("]"); + builder.append(ANSI_RESET); + builder.append(ANSI_RED); + } else { + builder.append(" ["); + builder.append(record.getLevel().getName()); + builder.append("]"); + } + + builder.append(" - "); + builder.append(record.getMessage()); + + Object[] params = record.getParameters(); + + if (params != null) { + builder.append("\t"); + for (int i = 0; i < params.length; i++) { + builder.append(params[i]); + if (i < params.length - 1) + builder.append(", "); + } + } + + builder.append(ANSI_RESET); +// builder.append("\n"); + return builder.toString(); + } + + private String calcDate(long millisecs) { + SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date resultdate = new Date(millisecs); + return date_format.format(resultdate); + } + + public static String logFormat(LogRecord logRecord) { + LogFormatter formatter = new LogFormatter(); + return formatter.format(logRecord); + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/LoggerUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/LoggerUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..c6bf9bc4fe6d6fb61f349eac1400a8f2b4c385f6 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/LoggerUtils.java @@ -0,0 +1,5 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public class LoggerUtils { + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/MicroServiceCategory.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/MicroServiceCategory.java new file mode 100644 index 0000000000000000000000000000000000000000..f3abf36330f71d27dec647476e0d550bc98f7198 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/MicroServiceCategory.java @@ -0,0 +1,5 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public enum MicroServiceCategory { + business, notification, security, attachment, demo , generic +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/MicroServiceUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/MicroServiceUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..aecd31bcf0feaa8766fa6b8fcaee4afa244b51df --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/MicroServiceUtils.java @@ -0,0 +1,241 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.ArrayList; +import java.util.Collection; + +import org.apache.commons.lang3.RandomStringUtils; +import org.eclipse.uml2.uml.Component; +import org.eclipse.uml2.uml.EnumerationLiteral; +import org.eclipse.uml2.uml.Stereotype; + +public class MicroServiceUtils { + + private static final String NO_SQL = "noSql"; + static Collection microservices = new ArrayList<>(); + + public static Collection getMicroservices() { + return microservices; + } + + /** + * Return true if the class has applied the Microservice Stereotype + * + * @author simone punzo + * @param classe + * @return true if the class has applied the Microservice Stereotype + */ + public static boolean hasMicroServiceStereotype(Component component) { + + Stereotype stereotype = component.getAppliedStereotype(StereotypeName.MICROSERVICE); + if (stereotype != null) { + return true; + } + + return false; + } + + /** + * @author Simone Punzo + * @param component + * @return true if the class has the Gateway stereotype + */ + + public static boolean hasGatewayStereotype(Component component) { + Stereotype stereotype = component.getAppliedStereotype(StereotypeName.GATEWAY); + if (stereotype != null) { + return true; + } + return false; + } + + /** + * Funzione per checkare se un dato componente ha una determinata categoria + */ + public static boolean isInCategory(Component aComponent, MicroServiceCategory category) { + String modelCategory = getCategory(aComponent); + + if (modelCategory != null && category.toString().equals(modelCategory)) + return true; + return false; + } + + /** + * Funzione per ottenere la categoria di un componente + * + * @param model + * @return + */ + public static String getCategory(Component aComponent) { + EnumerationLiteral stereotypeValue = StereotypeUtils.getStereotypeValue( + aComponent, StereotypeName.MICROSERVICE, StereotypePropertyName.CATEGORY); + if (stereotypeValue != null) + return stereotypeValue.getName(); + return null; + } + + /** + * funzione per ottenere il port number di un component con stereotype + * Microservizio + * + * @author Simone Punzo + * @param aComponent + */ + public static Integer getMsPortNumber(Component aComponent) { + Integer stereotypeValue = StereotypeUtils.getStereotypeValue(aComponent, + StereotypeName.MICROSERVICE, StereotypePropertyName.PORT_NUMBER); + if (stereotypeValue != null) + return stereotypeValue; + return null; + } + + /** + * @author Simone Punzo + * @param aComponent + * @return the portNumber property of a component with stereotype Gateway + */ + public static Integer getGatewayPortNumber(Component aComponent) { + Integer stereotypeValue = StereotypeUtils.getStereotypeValue(aComponent, + StereotypeName.GATEWAY, StereotypePropertyName.PORT_NUMBER); + if (stereotypeValue != null) + return stereotypeValue; + return null; + } + + /** + * funzione per capire se un componente è un componente di sicurezza + * + * @author Simone Punzo + * @param aComponent + * @return + */ + public static boolean isSecurityMS(Component aComponent) { + return MicroServiceUtils.isInCategory(aComponent, MicroServiceCategory.security); + } + + /** + * funzione per capire se un componente è un componente di notification + * + * @author Simone Punzo + * @param aComponent + * @return + */ + + public static boolean isNotificationMS(Component aComponent) { + return MicroServiceUtils.isInCategory(aComponent, MicroServiceCategory.notification); + } + + /** + * funzione per capire se un componente è un componente di attachment + * + * @param aComponent + * @return + */ + public static boolean isAttachmentMS(Component aComponent) { + return MicroServiceUtils.isInCategory(aComponent, MicroServiceCategory.attachment); + } + + /** + * funzione per capire se un componente è un componente di business + * + * @param aComponent + * @return + */ + public static boolean isBusinessMS(Component aComponent) { + return MicroServiceUtils.isInCategory(aComponent, MicroServiceCategory.business); + } + + /** + * funzione per capire se un componente è un componente di demo + * + * @param aComponent + * @return + */ + public static boolean isDemoMS(Component aComponent) { + return MicroServiceUtils.isInCategory(aComponent, MicroServiceCategory.demo); + } + + /** + * Return true if the class has applied the Microservice Stereotype + * + * @author simone punzo + * @param classe + * @return true if the class has applied the Microservice Stereotype + */ + public static boolean hasSPAStereotype(Component component) { + + Stereotype stereotype = component.getAppliedStereotype(StereotypeName.SPA); + if (stereotype != null) { + return true; + } + + return false; + } + + /** + * Function to create an unique Id for each microservice Abbiamo una stringa + * fill con length=lengthId , la substringhiamo da name.length in modo che la + * stringa builder matchi la lunghezza giusta + * + * @author Simone Punzo + * @return + */ + public static String generateRandomModelId(Component microservice) { + String name = microservice.getName().toString(); + String fill = "V0il4fRaM3WoRKM1cRo5Er"; + StringBuilder builder = new StringBuilder(); + builder.append("_" + name + fill.substring(name.length())); + return builder.toString(); + } + + /** + * Ritorna l'id del Microservizio in input + * + * @author Vittorio Niespolo + * + * @param aComponent + * @return + */ + public static String getId(Component aComponent) { + String stereotypeValue = StereotypeUtils.getStereotypeValue(aComponent, + StereotypeName.MICROSERVICE, StereotypePropertyName.ID); + if (getMsPortNumber(aComponent) != null && (stereotypeValue == null || stereotypeValue.isEmpty())) { + return getMsPortNumber(aComponent).toString().substring(2); + } else if (stereotypeValue != null) + return stereotypeValue; + return null; + } + + /** + * Ritorna il tipo di persistence scelto per il microservizio in input + * + * @author Vittorio Niespolo + * + * @param aComponent + * @return + */ + public static String getPersistenceType(Component aComponent) { + EnumerationLiteral stereotypeValue = StereotypeUtils.getStereotypeValue( + aComponent, StereotypeName.MICROSERVICE, StereotypePropertyName.PERSISTENCE_TYPE); + if (stereotypeValue != null) + return stereotypeValue.getName(); + return null; + } + + /** + * Ritorna true se il microservizio è noSQL + * + * @author Vittorio Niespolo + * + * @param microservice + * @return + */ + public static boolean isNoSqlMicroservice(Component microservice) { + if (getPersistenceType(microservice).equals(NO_SQL)) { + return true; + } + return false; + } + + + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ModelCategory.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ModelCategory.java new file mode 100644 index 0000000000000000000000000000000000000000..38004accb608aade1c5deb3a23030c589e71b5f5 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ModelCategory.java @@ -0,0 +1,5 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public enum ModelCategory { + root, mainMS +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ModelUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ModelUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..227456d80c1774ffb72e7ab410e32d47bbbb6ae5 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ModelUtils.java @@ -0,0 +1,654 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.RecordingCommand; +import org.eclipse.emf.transaction.RunnableWithResult; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.emf.transaction.util.TransactionUtil; +import org.eclipse.uml2.uml.Actor; +import org.eclipse.uml2.uml.Class; +import org.eclipse.uml2.uml.Component; +import org.eclipse.uml2.uml.EnumerationLiteral; +import org.eclipse.uml2.uml.Model; +import org.eclipse.uml2.uml.Package; +import org.eclipse.uml2.uml.PackageableElement; +import org.eclipse.uml2.uml.Profile; +import org.eclipse.uml2.uml.Type; +import org.eclipse.uml2.uml.UseCase; + +public class ModelUtils { + + private static final String CATEGORY_MAIN_MS = "mainMS"; + + public void doEditing(EObject element) { + // Make sure your element is attached to a resource, otherwise this will return + // null + TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(element); + domain.getCommandStack().execute(new RecordingCommand(domain) { + + @Override + protected void doExecute() { + // Implement your write operations here, + // for example: set a new name + element.eSet(element.eClass().getEStructuralFeature("name"), "aNewName"); + } + }); + } + + static Collection modelEntities = new ArrayList<>(); + static Collection generalModelEntities = new ArrayList<>(); + static Collection subjectAreas = new ArrayList<>(); + static Collection mainEntities = new ArrayList<>(); + + static Collection microservices = new ArrayList<>(); + static Component gateway = null; + static Component SPA = null; + static Profile voila2Profile = null; + + // Check se lasciare così o fare con collection nel caso ci sia bisogno di più + // gateway + /** + * Return the component with Gateway Stereotype + * + * @author Simone Punzo + * @param the Model + * @return the gateway of the model + */ + public static Component getGateway() { + return gateway; + } + + /** + * Inizializza la SPA + * + * @author Vittorio Niespolo + * + * @param aModel + */ + public static void initializeSpa(Model aModel) { + if (SPA != null) + SPA = null; + for (Type type : aModel.getOwnedTypes()) { + if (type instanceof Component && MicroServiceUtils.hasSPAStereotype((Component) type)) { + SPA = (Component) type; + } + } + } + + /** + * Ritorna la SPA dell'applicazione + * + * @author Vittorio Niespolo + * + * @return + */ + public static Component getSpa() { + return SPA; + } + + /** + * Inizializza il component gateway del modello + * + * @param aModel + */ + public static void initializeGateway(Model aModel) { + if (gateway != null) + gateway = null; + for (Type type : aModel.getOwnedTypes()) { + if (type instanceof Component && MicroServiceUtils.hasGatewayStereotype((Component) type)) { + gateway = (Component) type; + } + } + } + + /** + * Return list of all components that have MicroService Stereotype + * + * @author Simone Punzo + * @param model + * @return set of microservices of that model + */ + public static Collection getMicroservices() { + return microservices; + } + + /** + * Inizializza il vettore di microservices del modello + * + * @author Simone Punzo + * @param aModel + */ + public static void initializeMicroservices(Model aModel) { + initializeSpa(aModel); + if (microservices.size() != 0) { + microservices.clear(); + } + for (Type type : aModel.getOwnedTypes()) { + if (type instanceof Component && MicroServiceUtils.hasMicroServiceStereotype((Component) type)) { + microservices.add((Component) type); + } + } + + } + + /** + * Returns list of all entities belonging to the model that started the + * generation + * + * @author Vittorio Niespolo + * @param model + * @return Set of classes + */ + public static Collection getModelEntities() { + return modelEntities; + } + + /** + * Returns list of all entities belonging to all imported models of general + * model. NB: General Model should include all other models. + * + * @author Vittorio Niespolo + * + * @return + */ + public static Collection getGeneralModelEntities() { + return generalModelEntities; + } + + /** + * Inizializza le entità sulle quali si procederà per la generazione + * + * @author Vittorio Niespolo + * + * @param model + */ + @SuppressWarnings("unchecked") + public static void initializeEntities(Model model) { +// ConsoleUtils.consoleMessage(SeverityLevels.ERROR, "Initialize Entities"); + modelEntities = new ArrayList(); + generalModelEntities = new ArrayList(); + subjectAreas = new ArrayList(); + mainEntities = new ArrayList(); + + TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(model); + + EList importedPackages = null; + + // VN Per la lettura degli elementi importati nel modello è stato necessario + // introdurre questa transazione di lettura. USare il metodo doEdit per + // attivarne una di scrittura. + try { + importedPackages = (EList) domain.runExclusive(new RunnableWithResult.Impl() { + + /** + * Ritorna la lista delle entità dai modelli importati + * + * @author Vittorio Niespolo + * + * @param model + * @return + */ + public Collection getEntitiesFromImportedPackages(Model model) { + Collection classi = new ArrayList<>(); + + for (Package pack : model.getImportedPackages()) { + if (pack != null) { + if (pack instanceof Model) { + Model modello = (Model) pack; + if (!isRootModel(modello)) { + for (Type type : modello.getOwnedTypes()) { + if (type instanceof Class && EntityUtils.isEntityStereotype((Class) type)) { + classi.add((Class) type); + } + } + } + } + } + } + return classi; + } + + public void run() { + + EList packages = model.getImportedPackages(); + for (Package pack : packages) { + if (pack != null) { + if (pack instanceof Profile) { + voila2Profile = (Profile) pack; + } + if (pack instanceof Model) { + Model importedModel = (Model) pack; + + // Modello ROOT importato nel modello del Microservizio + if (isRootModel(importedModel)) { + generalModelEntities.addAll(getEntitiesFromImportedPackages(importedModel)); + } + // Modelli delle CLASSI importate nel modello del Microservizio + else if (isMainMSModel(importedModel)) { + modelEntities.addAll(getEntitiesFromImportedPackages(importedModel)); + } else { + // Classi appartenenti ai modelli importati dal modello da cui è partita la + // generazione + + for (PackageableElement element : importedModel.getPackagedElements()) { + // Entità del package del modello + if (element instanceof Package) { + if (SubjectAreaUtils.isSubjectAreaStereotype((Package) element)) { + subjectAreas.add((Package) element); + } + for (PackageableElement packType : ((Package) element).getOwnedTypes()) { + addClassToEntities(packType); + } + } + // Entità del modello + addClassToMainEntities(element); + } + } + } + } + + // MODELLO DAL QUALE E' PARTITA LA GENERAZIONE +// modelEntities.addAll(getEntitiesFromImportedPackages(model)); + } + + setResult(model.getImportedPackages()); + } + + }); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public static Profile getVoila2Profile() { + return voila2Profile; + } + + private static boolean isMainMSModel(Model model) { + return isInCategory(model, ModelCategory.mainMS); + } + + public static void addClassToEntities(PackageableElement type) { + if (type instanceof Class && EntityUtils.isEntityStereotype((Class) type)) { + modelEntities.add((Class) type); + generalModelEntities.add((Class) type); + } + } + + public static void addClassToMainEntities(PackageableElement type) { + addClassToEntities(type); + if (type instanceof Class && EntityUtils.isEntityStereotype((Class) type)) { + mainEntities.add((Class) type); + } + } + + private static boolean isRootModel(Model model) { + return isInCategory(model, ModelCategory.root); + } + + /** + * @author Vittorio Niespolo + * @param aClass + * @param category + * @return + */ + public static boolean isInCategory(Model model, ModelCategory category) { + String modelCategory = getCategory(model); + + if (modelCategory != null && category.toString().equals(modelCategory)) + return true; + return false; + } + + /** + * Ritorna la categoria di appartenenza di un modello + * + * @author Vittorio Niespolo + * @param aClass + * @return + */ + public static String getCategory(Model model) { + EnumerationLiteral stereotypeValue = StereotypeUtils.getStereotypeValue(model, + StereotypeName.MODEL, StereotypePropertyName.CATEGORY); + if (stereotypeValue != null) + return stereotypeValue.getName(); + return null; + } + + /** + * Return business entities + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public static Collection getBusinessEntities(Model model) { + return getEntityOfCategory(model, EntityCategory.business); + } + + /** + * Return entities related to Mailing + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public static Collection getMailEntities(Model model) { + return getEntityOfCategory(model, EntityCategory.mail); + } + + /** + * Return entities related to Attachment + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public static Collection getAttachmentEntities(Model model) { + return getEntityOfCategory(model, EntityCategory.attachment); + } + + /** + * Return entities related to Security + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public static Collection getSecurityEntities(Model model) { + return getEntityOfCategory(model, EntityCategory.security); + } + + /** + * Return entities for a given category + * + * @author Vittorio Niespolo + * @param model + * @param category + * @return + */ + public static Collection getEntityOfCategory(Model model, EntityCategory category) { + Collection result = new ArrayList<>(); + for (Class classe : getModelEntities()) { + if (EntityUtils.isInCategory(classe, category)) { + result.add(classe); + } + } + return result; + } + + /** + * Return a set of useCases belonging to model + * + * @author Vittorio Niespolo + * @param model + * @return Set of useCases + */ + public static Collection getUseCases(Model model) { + Collection useCases = new ArrayList<>(); + List types = model.getOwnedTypes(); + + for (Type type : types) { + if (type instanceof UseCase) { + useCases.add((UseCase) type); + } + } + return useCases; + } + + /** + * Return a collection of features belonging to models + * + * @author Vittorio Niespolo + * @param model + * @return Set of useCases + */ + public static Collection getFeatures(Model model) { + Collection features = new ArrayList<>(); + for (org.eclipse.uml2.uml.Package pack : model.getImportedPackages()) { + if (pack != null) { + for (Type type : pack.getOwnedTypes()) { + if (type instanceof UseCase && (FeatureUtils.isGenericFeatureStereotype((UseCase) type) + || FeatureUtils.isEntitySpecificFeatureStereotype((UseCase) type))) { + features.add((UseCase) type); + } + } + } + } + + for (Type type : model.getOwnedTypes()) { + if (type instanceof UseCase && (FeatureUtils.isGenericFeatureStereotype((UseCase) type) + || FeatureUtils.isEntitySpecificFeatureStereotype((UseCase) type))) { + features.add((UseCase) type); + } + } + return features; + } + + /** + * Method return if the current model has at least one actor + * + * @author Vittorio Niespolo + * @param model + * @return + */ + public static boolean hasActor(Model model) { + for (Type type : model.getOwnedTypes()) { + if (type instanceof Actor) { + return true; + } + } + return false; + } + + public static boolean isRoot(Model model) { + return ModelUtils.isInCategory(model, ModelCategory.root); + } + + public static boolean isMainMS(Model model) { + return ModelUtils.isInCategory(model, ModelCategory.mainMS); + } + + /** + * Method that checks if the model has a security microservice and return its + * name if so , or an empty string if not. + * + * @author Simone Punzo + * @param model + * @return + */ + public static String getSecurityMSName(Model model) { + Collection microservices = ModelUtils.getMicroservices(); + + for (Component microservice : microservices) { + if (MicroServiceUtils.isSecurityMS(microservice)) { + return microservice.getName().toString(); + } + } + return "noSecurityMS"; + } + + /** + * Check if Model has SPA component + * + * @author Simone Punzo + * @param model + * @return FLAG --- 1 if component diagram has a SPA component ;; 0 if not + */ + public static boolean isFrontEndGenerationEnabled(Model model) { + if (SPA == null) + return false; + return true; + } + + /** + * Check if Model has GATEWAY Component + * + * @author Simone Punzo + * @param model + * @return FLAG --- 1 if component diagram has a GATEWAY component ;; 0 if not + */ + public static boolean isGatewayGenerationEnabled(Model model) { + if (gateway == null) + return false; + return true; + } + + public static Collection getMsInCategory(Model model, MicroServiceCategory category) { + Collection result = new ArrayList<>(); + for (Component ms : getMicroservices()) { + if (MicroServiceUtils.isInCategory(ms, category)) { + result.add(ms); + } + } + return result; + } + + public static Collection getSecurityMs(Model model) { + return getMsInCategory(model, MicroServiceCategory.security); + } + + public static Collection getBusinessMs(Model model) { + return getMsInCategory(model, MicroServiceCategory.business); + } + + public static Collection getDemoMs(Model model) { + return getMsInCategory(model, MicroServiceCategory.demo); + } + + public static Collection getNotificationMs(Model model) { + return getMsInCategory(model, MicroServiceCategory.notification); + } + + /** + * Inizializza il component SPA del modello + * + * @param aModel + */ + public static void initializeSPA(Model aModel) { + if (SPA != null) + SPA = null; + for (Type type : aModel.getOwnedTypes()) { + if (type instanceof Component && MicroServiceUtils.hasSPAStereotype((Component) type)) { + SPA = (Component) type; + } + } + } + + /** + * Metodo per incorporare tutti i controlli da fare sul modello previa + * generazione + * + * @author Simone Punzo + * @param aModel + * @return true if tutto ok , false viceversa + */ + public static boolean checkModel(Model aModel) { + if (checkDuplicateNames(aModel)) + return false; + + return true; + } + + /** + * Metodo per controllare se i microservizi hanno nomi uguali + * + * @author Simone Punzo + * @param aModel + * @return true se ci sono due ms con lo stesso nome , false se tutti hanno nomi + * diversi + */ + public static boolean checkDuplicateNames(Model aModel) { + initializeMicroservices(aModel); + + String name = null; + ArrayList microservicesList = new ArrayList<>(microservices); + for (int i = 0; i < microservicesList.size(); ++i) { + Component ms = microservicesList.get(i); + name = ms.getName().toString(); + for (int j = i + 1; j < microservicesList.size(); ++j) { + Component ms2 = (Component) microservicesList.get(j); + if (name.equals(ms2.getName().toString())) + return true; + } + } + return false; + } + + /** + * Ritorna true se esiste almeno un microservizio noSQL nel modello in input + * + * @author Vittorio Niespolo + * + * @param aModel Modello sul quale eseguire il controllo + * @return true se esiste almeno un microservizio noSQL + */ + public static boolean hasNoSqlMicroservice(Model aModel) { + for (Component microservice : getMicroservices()) { + if (MicroServiceUtils.isNoSqlMicroservice(microservice)) { + return true; + } + } + return false; + } + + /** + * Ritorna una lista dells subjectArea presenti nel modello + * + * @author Vittorio Niespolo + * + * @return + */ + public static Collection getSubjectAreas(Model aModel) { + return subjectAreas; + } + + /** + * Ritorna la lista delle entità appartenenti alla main Subject Area + * + * @author Vittorio Niespolo + * + * @return + */ + public static Collection getModelEntitiesFromMainSA(Model aModel) { + return mainEntities; + } + + /** + * Ritorna l'url della SPA + * + * @author Vittorio Niespolo + * + * @return + */ + public static String getSpaUrl() { + String stereotypeValue = StereotypeUtils.getStereotypeValue(getSpa(), StereotypeName.SPA, + StereotypePropertyName.URL); + if (stereotypeValue != null) + return stereotypeValue; + return null; + } + + /** + * Ritorna la porta della SPA + * + * @author Vittorio Niespolo + * + * @return + */ + public static Integer getSpaPortNumber() { + Integer stereotypeValue = StereotypeUtils.getStereotypeValue(getSpa(), StereotypeName.SPA, + StereotypePropertyName.PORT_NUMBER); + if (stereotypeValue != null) + return stereotypeValue; + return null; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ParentSelection.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ParentSelection.java new file mode 100644 index 0000000000000000000000000000000000000000..9bbc31dbdc7d0936f5f3ca89064e0ddf9d9325e0 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ParentSelection.java @@ -0,0 +1,6 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public enum ParentSelection { + dropdown, + popup +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ProfileName.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ProfileName.java new file mode 100644 index 0000000000000000000000000000000000000000..337fd46e07b99f068574bec9bd01338f871d6c3f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/ProfileName.java @@ -0,0 +1,8 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public class ProfileName { + /** + * Profile for DSL + */ + public static final String Voila2Profile = "Voila2Profile"; +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/PropertyUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/PropertyUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..9c9704afd9a056fec8dca390edfd48fb7b11bee4 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/PropertyUtils.java @@ -0,0 +1,312 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import org.eclipse.uml2.uml.Association; +import org.eclipse.uml2.uml.Class; +import org.eclipse.uml2.uml.Property; + +public class PropertyUtils { + + public static final int MAX_INPUT_LENGTH = 30; + + public static boolean isRequired(Property property) { + Object result = StereotypeUtils.getStereotypeValue(property, StereotypeName.ATTRIBUTE, + StereotypePropertyName.IS_REQUIRED); + if (result == null) { + return false; + } + if ((boolean) result == true) { + return true; + } + return false; + } + + public static String getPropertyLabel(Property property) { + return StringUtils.splitCamel(property.getName()); + } + + public static boolean isNumeric(Property property) { + if (property.getType().getName().equals("Currency") || property.getType().getName().equals("Number") + || property.getType().getName().equals("Value") || property.getType().getName().equals("Code")) + return true; + return false; + } + + public static boolean isString(Property property) { + if (property.getType().getName().equals("String")) + return true; + return false; + } + + public static boolean isDateTime(Property property) { + if (property.getType().getName().equals("Datetime")) + return true; + return false; + } + + public static boolean isLocalDate(Property property) { + if (property.getType().getName().equals("LocalDate")) + return true; + return false; + } + + public static boolean isBoolean(Property property) { + if (property.getType().getName().equals("Flag")) + return true; + return false; + } + + public static String getNaturalLanguageName(Property property) { + return StringUtils.splitCamel(property.getName()); + } + + public static String getLabel(Property p) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(StereotypeUtils.getStereotypeValue(p, + StereotypeName.ATTRIBUTE, StereotypePropertyName.LABEL))) { + return StereotypeUtils.getStereotypeValue(p, StereotypeName.ATTRIBUTE, + StereotypePropertyName.LABEL); + } + + if(AuditableAttributes.createdBy.toString().equals(p.getName())) { + return "Creato da"; + } + else if(AuditableAttributes.createdDate.toString().equals(p.getName())) { + return "Data Creazione"; + } + else if(AuditableAttributes.lastModifiedBy.toString().equals(p.getName())) { + return "Ultima modifica da"; + } + else if(AuditableAttributes.lastModifiedDate.toString().equals(p.getName())) { + return "Data ultima modifica"; + } + if (!p.getLabel().equals(p.getName())) { + return StringUtils.splitCamel(p.getLabel()); + } + return getNaturalLanguageName(p); + } + + public static String getTooltip(Property p) { + if (hasHelp(p)) { + return getHelp(p); + } + if (hasDefinition(p)) { + return getDefinition(p); + } + return getLabel(p); + } + + public static Boolean hasDefinition(Property p) { + if (getDefinition(p) == null || getDefinition(p) == "") { + return false; + } + return true; + } + + /** + * Ritorna la definizione data della proprietà in input + * + * @author Vittorio Niespolo + * + * @param p property della quale si vuole conoscere la definizione + * @return + */ + public static String getDefinition(Property p) { + return StereotypeUtils.getStereotypeValue(p, StereotypeName.ATTRIBUTE, + StereotypePropertyName.DEFINITION); + } + + /** + * Ritorna il tipo assegnato in fase di modellazione della property in input + * + * @author Vittorio Niespolo + * + * @param p property della quale si vuole conoscere la definizione + * @return + */ + public static String getDataType(Property p) { + return StereotypeUtils.getStereotypeValue(p, StereotypeName.ATTRIBUTE, + StereotypePropertyName.DATA_TYPE); + } + + public static Boolean hasHelp(Property p) { + if (getHelp(p) == null || getHelp(p) == "") { + return false; + } + return true; + } + + public static String getHelp(Property p) { + return StereotypeUtils.getStereotypeValue(p, StereotypeName.ATTRIBUTE, + StereotypePropertyName.HELP); + } + + /** + * Return true if the property has set 0 or 1 as multiplicity + * + * @author Vittorio Niespolo + * @param property + * @return true if the property has set 0 or 1 as multiplicity + */ + public static boolean isNMultiplicity(Property property) { + if (property.getUpper() == -1) + return true; + return false; + } + + /** + * Return true if the property has set 0 or 1 as multiplicity + * + * @author Vittorio Niespolo + * @param property + * @return true if the property has set 0 or 1 as multiplicity + */ + public static boolean isZeroOneMultiplicity(Property property) { + if (property.getUpper() == 1 || property.getUpper() == 0) + return true; + return false; + } + + /** + * + * Return the column lenght + * + * @author Vittorio Niespolo + * @param attribute + * @return column lenght + */ + public static String getPhysicalColumnLenght(Property attribute) { + return StereotypeUtils.getStereotypeValue(attribute, StereotypeName.ATTRIBUTE, + StereotypePropertyName.PHYSICAL_LENGTH); + } + + /** + * + * Return the columnDefinition used from JPA to produce SQL for column + * + * @author Vittorio Niespolo + * @param attribute + * @return + */ + public static String getColumnDefinition(Property attribute, Class classe) { + String columnDefinition = ""; + String sqlLength = TypeUtils.getSqlLength(attribute); + String definition = getDefinition(attribute); + if (getDataType(attribute) == null || getDataType(attribute).trim().isEmpty()) { + columnDefinition = TypeUtils.getSqlType(attribute.getType()); + + if (sqlLength != null && !sqlLength.isEmpty()) { + columnDefinition += "("; + columnDefinition += sqlLength; + columnDefinition += ")"; + } +// if(attribute.isID() && EntityUtils.hasAutogeneratedId(classe)) { +// columnDefinition += " AUTO_INCREMENT"; +// } +// if (definition != null) +// columnDefinition += " COMMENT '" +// + StringUtils.encodeDDL(StringUtils.removeHtmlTags(getDefinition(attribute))) + "'"; + } else { + columnDefinition = getDataType(attribute); + } + return columnDefinition; + + } + + public static String getParentPropAssName(Property property, Class ownerClass, Association association) { + return property.getName() + + StringUtils.toUpperFirst(AssociationUtils.getParentAssName(association, ownerClass)); + } + + public static String getChildPropAssName(Property property, Class ownerClass, Association association) { + return property.getName() + StringUtils.toUpperFirst(AssociationUtils.getChildAssName(association, ownerClass)); + } + + public static boolean isDate(Property property) { + if (property.getType().getName().equals("Date")) + return true; + return false; + } + + /** + * Usually attribute name is given by it's name property but when attribute is + * derived from a parent entity, its name may be concatenated with Association + * name. + * + * + * + * @author Vittorio Niespolo + * + * @param property + * @param ownerClass + * @param association + * @param isParent + * @return + */ + public static String getAttributeName(Property property, Class ownerClass, Association association, + Boolean isParent) { + // Attributo interno + if (association == null) { + return property.getName(); + } else { + // Attributo derivato da classe padre + if (isParent) { + return property.getName() + + StringUtils.toUpperFirst(AssociationUtils.getParentAssName(association, ownerClass)); + // Attributo derivato da classe figlia + } else { + return property.getName() + + StringUtils.toUpperFirst(AssociationUtils.getChildAssName(association, ownerClass)); + } + } + } + + /** + * + * Return the column name + * + * @author Vittorio Niespolo + * @param attribute + * @return column name + */ + public static String getPhysicalColumnName(Property attribute) { + String result = StereotypeUtils.getStereotypeValue(attribute, StereotypeName.ATTRIBUTE, + StereotypePropertyName.PHYSICAL_COLUMN_NAME); + if (result == null || result.isBlank()) { + return StringUtils.camelToUnderscore(attribute.getName()); + } + return result; + + } + + /** + * Check if property is an id. + * + * @author Federico Gambardella + * @param property + * @return + */ + public static boolean isAnID(Property property) { + return property.isID(); + } + + /** + * + * @author Teresa Alomba + * @param length + * @return + */ + public static boolean hasPhysicalLengthGreaterThan(String length) { + if (length != null) { + try { + Integer value = Integer.parseInt(length); + if (value != null && value > MAX_INPUT_LENGTH) { + return true; + } + } catch (NumberFormatException ne) { + return false; + } + } + return false; + + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SecurityUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SecurityUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..7c015b1ae8e7078c392ac6b0172d8eab53f00265 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SecurityUtils.java @@ -0,0 +1,66 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import org.eclipse.uml2.uml.Class; + +public class SecurityUtils { + + /** + * Check if an entity has the securityUser's Role. This could be used to add + * specific features for the class. + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static boolean isInSecurityUserRole(Class classe) { + return EntityUtils.isInRole(classe, "securityUser"); + } + + /** + * Check if an entity has the privilegePerRole's Role. This could be used to add + * specific features for the class. + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static boolean isInPrivilegePerRoleRole(Class classe) { + return EntityUtils.isInRole(classe, "privilegePerRole"); + } + + /** + * Check if an entity has the role's Role. This could be used to add specific + * features for the class. + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static boolean isInRoleRole(Class classe) { + return EntityUtils.isInRole(classe, "role"); + } + + /** + * Check if an entity has the privilege's Role. This could be used to add + * specific features for the class. + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static boolean isInPrivilegeRole(Class classe) { + return EntityUtils.isInRole(classe, "privilege"); + } + + /** + * Check if an entity has the rolePerSecurityUser's Role. This could be used to + * add specific features for the class. + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static boolean isInRolePerSecurityUserRole(Class classe) { + return EntityUtils.isInRole(classe, "rolePerSecurityUser"); + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SeverityLevels.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SeverityLevels.java new file mode 100644 index 0000000000000000000000000000000000000000..5c4628519f289bb28029fb60f26cfa78708e43df --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SeverityLevels.java @@ -0,0 +1,21 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +/** + * + * @author Jessica Pascarella + * @author Vittorio Niespolo + * + */ +public class SeverityLevels { + public static final String FATAL = "FATAL"; + + public static final String ERROR = "ERROR"; + + public static final String WARNING = "WARNING"; + + public static final String INFO = "INFO"; + + public static final String DEBUG = "DEBUG"; + + public static final String TRACE = "TRACE"; +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SpecificationFilterUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SpecificationFilterUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b1e115490184f25d5ec243397c68e55fae13b9e7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SpecificationFilterUtils.java @@ -0,0 +1,54 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.uml2.uml.Type; +/** + * + * This class mapped uml-type with name function generateSpecification + * + * @author Luca Barone + * + */ +public class SpecificationFilterUtils { + + private static final String DEFAULT_FILTER_GENERIC = "generateSpecification"; + private static final String DEFAULT_FILTER_RANGE = "generateRangeSpecification"; + private static final String DEFAULT_FILTER_STRING = "generateStringSpecification"; + + + private static Map MAP_DEFAULT_JAVA_TYPE = new HashMap<>(); + + + static { + MAP_DEFAULT_JAVA_TYPE.put("Datetime", DEFAULT_FILTER_RANGE); + MAP_DEFAULT_JAVA_TYPE.put("Date", DEFAULT_FILTER_RANGE); + MAP_DEFAULT_JAVA_TYPE.put("Integer", DEFAULT_FILTER_RANGE); + MAP_DEFAULT_JAVA_TYPE.put("Code", DEFAULT_FILTER_RANGE); + MAP_DEFAULT_JAVA_TYPE.put("Value", DEFAULT_FILTER_RANGE); + MAP_DEFAULT_JAVA_TYPE.put("Currency", DEFAULT_FILTER_RANGE); + MAP_DEFAULT_JAVA_TYPE.put("String", DEFAULT_FILTER_STRING); + MAP_DEFAULT_JAVA_TYPE.put("Boolean", DEFAULT_FILTER_GENERIC); + MAP_DEFAULT_JAVA_TYPE.put("Long", DEFAULT_FILTER_RANGE); + MAP_DEFAULT_JAVA_TYPE.put("Number", DEFAULT_FILTER_RANGE); + } + + /** + * get the name function generateSpecification based on the input type. + * + * @author Luca Barone + * @param type + * @return + */ + public String getSpecification(Type type) { + + String umlType = type.getName(); + String javaTypeName = MAP_DEFAULT_JAVA_TYPE.get(umlType); + if(javaTypeName == null) + // se non è presente nel Map consentimo un filter generico! + return DEFAULT_FILTER_GENERIC; + return javaTypeName; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypeName.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypeName.java new file mode 100644 index 0000000000000000000000000000000000000000..5034d4677cb1422f8744036a5ebeb1549c7bbc21 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypeName.java @@ -0,0 +1,52 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public class StereotypeName { + /** + * Stereotype name for ManyToOneRelation + */ + public static final String MANY_TO_ONE_RELATION = ProfileName.Voila2Profile + "::ManyToOneRelation"; + /** + * Stereotype name for OneToOneRelation + */ + public static final String ONE_TO_ONE_RELATION = ProfileName.Voila2Profile + "::OneToOneRelation"; + /** + * Stereotype name for Feature + */ + public static final String FEATURE = ProfileName.Voila2Profile + "::Feature"; + /** + * Stereotype name for GenericFeature + */ + public static final String GENERIC_FEATURE = ProfileName.Voila2Profile + "::GenericFeature"; + /** + * Stereotype name for EntitySpecificFeature + */ + public static final String ENTITY_SPECIFIC_FEATURE = ProfileName.Voila2Profile + "::EntitySpecificFeature"; + /** + * Stereotype name for Entity + */ + public static final String ENTITY = ProfileName.Voila2Profile + "::Entity"; + /** + * Stereotype name for attribute + */ + public static final String ATTRIBUTE = ProfileName.Voila2Profile + "::Attribute"; + /** + * Stereotype name for model + */ + public static final String MODEL = ProfileName.Voila2Profile + "::Model"; + /** + * Stereotype name for microservice + */ + public static final String MICROSERVICE = ProfileName.Voila2Profile +"::MicroService"; + /** + * Stereotype for gateway + */ + public static final String GATEWAY=ProfileName.Voila2Profile+"::Gateway"; + /** + * Stereotype for SPA + */ + public static final String SPA = ProfileName.Voila2Profile+"::SinglePageApp"; + /** + * Stereotype for Subject Area + */ + public static final String SUBJECT_AREA = ProfileName.Voila2Profile+"::SubjectArea"; +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypePropertyName.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypePropertyName.java new file mode 100644 index 0000000000000000000000000000000000000000..da6bd0b66b78923ddcabe255b8e57a105dec2149 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypePropertyName.java @@ -0,0 +1,109 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +public class StereotypePropertyName { + /** + * Stereotype property for identifying association (Primary key with Foreign + * key) + */ + public static final String IDENTIFYING = "identifying"; + /** + * Stereotype property for nameMapping + */ + public static final String NAME_MAPPING = "nameMapping"; + /** + * Stereotype property for sequence + */ + public static final String SEQUENCE_NAME = "sequenceName"; + /** + * Stereotype property for entities + */ + public static final String ENTITIES = "entities"; + /** + * Stereotype property for role + */ + public static final String ROLE = "role"; + /** + * Stereotype property for autogeneratedId + */ + public static final String AUTOID = "autoGeneratedId"; + /** + * Stereotype property for definition + */ + public static final String DEFINITION = "definition"; + /** + * Stereotype property for definition + */ + public static final String LABEL = "label"; + /** + * Stereotype property for help + */ + public static final String HELP = "help"; + /** + * Stereotype property for auditable + */ + public static final String AUDITABLE = "auditable"; + /** + * Stereotype property for category + */ + public static final String CATEGORY = "category"; + + /** + * Stereotype property for child management by master + */ + public static final String CHILD_MANAGEMENT = "childManagement"; + + /** + * Stereotype property for physicalColumnName + */ + public static final String PHYSICAL_COLUMN_NAME = "physicalColumnName"; + /** + * Stereotype property for physicalColumnName + */ + public static final String PHYSICAL_LENGTH = "physicalLength"; + /** + * Stereotype property for isRequired + */ + public static final String IS_REQUIRED = "isRequired"; + + /** + * Stereotype property for child management by master + */ + public static final String IS_READONLY = "readOnly"; + /** + * Stereotype property for general model + */ + public static final String GENERAL_MODEL = "generalModel"; + /** + * Stereotype property for ms port number + */ + public static final String PORT_NUMBER = "portNumber"; + /** + * Stereotype property for ms port number + */ + public static final String URL = "url"; + /** + * Stereotype property for parent selection + */ + public static final String PARENT_SELECTION = "parentSelection"; + /** + * Stereotype property for physical data type + */ + public static final String DATA_TYPE = "dataType"; + /** + * Stereotype property for Microservice ID + */ + public static final String ID = "id"; + /** + * Stereotype property for Microservice Persistence Type + */ + public static final String PERSISTENCE_TYPE = "persistenceType"; + /** + * Stereotype property for physical table name + */ + public static final String TABLE_NAME = "tableName"; + /** + * Stereotype property for physical name mapping for column made by associations + */ + public static final String PHYSICAL_NAME_MAPPING = "physicalNameMapping"; + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypeUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypeUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..5cf56c390483578bc8786b567b9f04657ef1eae4 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StereotypeUtils.java @@ -0,0 +1,18 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import org.eclipse.uml2.uml.Stereotype; +import org.eclipse.uml2.uml.Element; + +public class StereotypeUtils { + + public static T getStereotypeValue(Y umlElem, String stereotypeName, String stereotypeProperty) + { + Stereotype stereotype = umlElem.getAppliedStereotype(stereotypeName); + if (stereotype != null) { + @SuppressWarnings("unchecked") + T value = (T)umlElem.getValue(stereotype, stereotypeProperty); + return value; + } + return null; + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StringUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StringUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..cec497034de81301f54c778b5888820f232d3172 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/StringUtils.java @@ -0,0 +1,162 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import it.micegroup.voila2.cartridge.library.formatters.PrettierFormatter; +import it.micegroup.voila2.cartridge.library.formatters.SimpleXmlFormatterPostProcessor; + +public class StringUtils { + private JavaBeautifier javaFormatter; + private SimpleXmlFormatterPostProcessor xmlFormatter; + private PrettierFormatter prettierFormatter; + + public StringUtils() { + super(); + + javaFormatter = new JavaBeautifier(); + xmlFormatter = new SimpleXmlFormatterPostProcessor(); + prettierFormatter = new PrettierFormatter(); + } + + /** + * Take a string in input returning it in lowercase and with an underscore for + * each camel case + * + * @author Vittorio Niespolo + * @param input + * @return Underscored version of input string + * + */ + public static String camelToUnderscore(String input) { + if (input == null) { + return ""; + } + String regex = "([a-z])([A-Z]+)"; + String replacement = "$1_$2"; + String result = input.replaceAll(regex, replacement);//.toLowerCase(); + return result; + } + + /** + * Take a string in input returning it in lowercase and with a dash for each + * camel case + * + * @param input + * @return Dashed version of input string + * @author Vittorio Niespolo + */ + public String camelToDash(String input) { + if (input == null) { + return ""; + } + String regex = "([a-z])([A-Z]+)"; + String replacement = "$1-$2"; + String result = input.replaceAll(regex, replacement).toLowerCase(); + return result; + } + + /** + * Method to convert a dash string into camelCase + * + * @author Simone Punzo + * @param value + * @return + */ + + public static String dashToCamelCase(String value) { + StringBuilder sb = new StringBuilder(value.length()); + boolean upper = false; + + for (char c : value.toCharArray()) { + if (c == '-') { + upper = true; + continue; + } + if (upper) { + sb.append(Character.toUpperCase(c)); + } else { + sb.append(c); + } + upper = false; + } + return sb.toString(); + } + + /** + * Take a string in input returning it splitted and capitalized camel case + * + * @param input + * @return + */ + public static String splitCamel(String input) { + if (input == null) { + return ""; + } + String regex = "([a-z])([A-Z]+)"; + String replacement = "$1 $2"; + String result = input.replaceAll(regex, replacement); + + result = result.substring(0, 1).toUpperCase() + result.substring(1); + return result; + } + + /** + * Take code in input and return it formatted using eclipse javaFormatter. This + * method can be extended adding a parameter to choose CodeFormatter. + * + * @author Vittorio Niespolo + * @param input + * @return formattedOutput + */ + public String formatter(String input, String fileName) { + String formattedOutput = input; + if (fileName != null) { + if (fileName.endsWith(".java")) { + formattedOutput = javaFormatter.format(input); + } else if (fileName.endsWith(".ts")) { + // formattedOutput = prettierFormatter.format(input, fileName); + } else if (fileName.endsWith(".xml")) { + formattedOutput = xmlFormatter.format(input); + } + } + return formattedOutput; + } + + /** + * Return the string with first letter capitalized + * + * @author Vittorio Niespolo + * @param value + * @return + */ + public static String toUpperFirst(String value) { + // Convert String to char array. + char[] array = value.toCharArray(); + if (array == null || array.length == 0) { + return ""; + } + // Modify first element in array. + array[0] = Character.toUpperCase(array[0]); + // Return string. + return new String(array); + } + + public static String encodeDDL(String value) { + return value.replaceAll("'", "''").replaceAll(""", "''"); + } + + public static String removeHtmlTags(String value) { + return value.replaceAll("

", "").replaceAll("

", ""); + } + + /** + * Return a number formatted on N digits + * + * @param value number to format + * @param numberOfDigits number o digits + * @return + */ + public static String getFormattedNumber(Integer value, Integer numberOfDigits) { + return String.format("%0" + numberOfDigits + "d", value); + } + + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SubjectAreaUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SubjectAreaUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..09d323c7b65029dfcdc1a36245341eef3b1b1270 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/SubjectAreaUtils.java @@ -0,0 +1,43 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.ArrayList; +import java.util.Collection; +import org.eclipse.uml2.uml.Package; +import org.eclipse.uml2.uml.PackageableElement; +import org.eclipse.uml2.uml.Stereotype; +import org.eclipse.uml2.uml.Class; + +public class SubjectAreaUtils { + + /** + * Ritorna la lista delle entity relative a una Subject Area + * + * @author Vittorio Niespolo + * + * @param subjectArea + * @return + */ + public static Collection getEntitiesForSA(Package subjectArea) { + Collection result = new ArrayList(); + for (PackageableElement element : subjectArea.getPackagedElements()) { + if (element instanceof Class && EntityUtils.isEntityStereotype((Class) element)) { + result.add((Class) element); + } + } + return result; + } + + /** + * Controlla se il package è una subjectArea + * @author Vittorio Niespolo + * + * @param pack + * @return + */ + public static boolean isSubjectAreaStereotype(Package pack) { + Stereotype stereotype = pack.getAppliedStereotype(StereotypeName.SUBJECT_AREA); + if (stereotype != null) + return true; + return false; + } +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/TypeUtils.java b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/TypeUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..60e543d3c4a1a35bab08edd2357860e34bd77e8f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/TypeUtils.java @@ -0,0 +1,538 @@ +package it.micegroup.voila2.cartridge.library.javaservice; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +import org.eclipse.uml2.uml.Class; +import org.eclipse.uml2.uml.Property; +import org.eclipse.uml2.uml.Type; + +/** + * + * @author Vittorio Niespolo + * @autohr Luca Barone + * @author Fabio Memoli + */ +public class TypeUtils { + // MODEL + private static final String LONG = "Long"; + private static final String CODE = "Code"; + private static final String FLAG = "Flag"; + private static final String VALUE = "Value"; + private static final String NUMBER = "Number"; + private static final String STRING = "String"; + private static final String INTEGER = "Integer"; + private static final String BOOLEAN = "Boolean"; + private static final String DATE = "Date"; + private static final String DATETIME = "Datetime"; + private static final String CURRENCY = "Currency"; + private static final String BLOB = "Blob"; + private static final String LOB = "Lob"; + private static final String CLOB = "Clob"; + + // JAVA + private static final String DEFAULT_JAVATYPE_FOR_DATE = "Date"; + private static final String DEFAULT_JAVATYPE_FOR_DATETIME = "LocalDateTime"; + private static final String DEFAULT_JAVATYPE_FOR_NUMBER = "Integer"; + private static final String DEFAULT_JAVATYPE_FOR_CODE = "Integer"; + private static final String DEFAULT_JAVATYPE_FOR_VALUE = "BigDecimal"; + private static final String DEFAULT_JAVATYPE_FOR_CURRENCY = "BigDecimal"; + private static final String DEFAULT_JAVATYPE_FOR_STRING = "String"; + private static final String DEFAULT_JAVATYPE_FOR_BOOLEAN = "Boolean"; + private static final String DEFAULT_JAVATYPE_FOR_LONG = "Long"; + private static final String DEFAULT_JAVATYPE_FOR_BLOB = "byte[]"; + private static final String DEFAULT_JAVATYPE_FOR_LOB = "String"; + private static final String DEFAULT_JAVATYPE_FOR_CLOB = "String"; + + // SQL + private static final String DEFAULT_SQLTYPE_FOR_DATE = "DATE"; + private static final String DEFAULT_SQLTYPE_FOR_DATETIME = "DATETIME"; + private static final String DEFAULT_SQLTYPE_FOR_NUMBER = "INTEGER"; + private static final String DEFAULT_SQLTYPE_FOR_CODE = "INTEGER"; + private static final String DEFAULT_SQLTYPE_FOR_VALUE = "NUMERIC"; + private static final String DEFAULT_SQLTYPE_FOR_CURRENCY = "NUMERIC"; + private static final String DEFAULT_SQLTYPE_FOR_STRING = "VARCHAR"; + private static final String DEFAULT_SQLTYPE_FOR_BOOLEAN = "BOOLEAN"; + private static final String DEFAULT_SQLTYPE_FOR_LONG = "NUMBER"; + private static final String DEFAULT_SQLTYPE_FOR_BLOB = "BLOB"; + private static final String DEFAULT_SQLTYPE_FOR_LOB = "LONGTEXT"; + private static final String DEFAULT_SQLTYPE_FOR_CLOB = "LONGTEXT"; + + // SQL + private static final String DEFAULT_SQLLENGTH_FOR_DATETIME = ""; + private static final String DEFAULT_SQLLENGTH_FOR_DATE = ""; + private static final String DEFAULT_SQLLENGTH_FOR_NUMBER = "11"; + private static final String DEFAULT_SQLLENGTH_FOR_CODE = ""; + private static final String DEFAULT_SQLLENGTH_FOR_VALUE = "12,2"; + private static final String DEFAULT_SQLLENGTH_FOR_CURRENCY = "14,2"; + private static final String DEFAULT_SQLLENGTH_FOR_STRING = "80"; + private static final String DEFAULT_SQLLENGTH_FOR_BOOLEAN = ""; + private static final String DEFAULT_SQLLENGTH_FOR_LONG = "15"; + private static final String DEFAULT_SQLLENGTH_FOR_BLOB = ""; + private static final String DEFAULT_SQLLENGTH_FOR_LOB = ""; + private static final String DEFAULT_SQLLENGTH_FOR_CLOB = ""; + + // ANGULAR + private static final String DEFAULT_ANGULARTYPE_FOR_DATETIME = "Date"; + private static final String DEFAULT_ANGULARTYPE_FOR_DATE = "Date"; + private static final String DEFAULT_ANGULARTYPE_FOR_NUMBER = "number"; + private static final String DEFAULT_ANGULARTYPE_FOR_CODE = "number"; + private static final String DEFAULT_ANGULARTYPE_FOR_VALUE = "number"; + private static final String DEFAULT_ANGULARTYPE_FOR_CURRENCY = "number"; + private static final String DEFAULT_ANGULARTYPE_FOR_STRING = "string"; + private static final String DEFAULT_ANGULARTYPE_FOR_BOOLEAN = "boolean"; + private static final String DEFAULT_ANGULARTYPE_FOR_LONG = "number"; + + // FILTER + private static final String DEFAULT_FILTER_TYPE_FOR_DATETIME = "LocalDateTimeFilter"; + private static final String DEFAULT_FILTER_TYPE_FOR_DATE = "LocalDateFilter"; + private static final String DEFAULT_FILTER_TYPE_FOR_NUMBER = "IntegerFilter"; + private static final String DEFAULT_FILTER_TYPE_FOR_CODE = "IntegerFilter"; + private static final String DEFAULT_FILTER_TYPE_FOR_VALUE = "BigDecimalFilter"; + private static final String DEFAULT_FILTER_TYPE_FOR_CURRENCY = "BigDecimalFilter"; + private static final String DEFAULT_FILTER_TYPE_FOR_STRING = "StringFilter"; + private static final String DEFAULT_FILTER_TYPE_FOR_BOOLEAN = "BooleanFilter"; + private static final String DEFAULT_FILTER_TYPE_FOR_LONG = "LongFilter"; + + // REPORT + private static final String DEFAULT_REPORT_TYPE_FOR_LONG = "java.lang.Long"; + private static final String DEFAULT_REPORT_TYPE_FOR_CODE = "java.lang.Integer"; + private static final String DEFAULT_REPORT_TYPE_FOR_FLAG = "java.lang.Boolean"; + private static final String DEFAULT_REPORT_TYPE_FOR_VALUE = "java.math.BigDecimal"; + private static final String DEFAULT_REPORT_TYPE_FOR_NUMBER = "java.lang.Integer"; + private static final String DEFAULT_REPORT_TYPE_FOR_STRING = "java.lang.String"; + private static final String DEFAULT_REPORT_TYPE_FOR_INTEGER = "java.lang.Integer"; + private static final String DEFAULT_REPORT_TYPE_FOR_BOOLEAN = "java.lang.Boolean"; + private static final String DEFAULT_REPORT_TYPE_FOR_DATE = "java.time.LocalDate"; + private static final String DEFAULT_REPORT_TYPE_FOR_DATETIME = "java.time.LocalDateTime"; + private static final String DEFAULT_REPORT_TYPE_FOR_CURRENCY = "java.math.BigDecimal"; + + private static final String DEFAULT_FIELDTYPE_FOR_DATE = "FieldType.DATE_TIME"; + private static final String DEFAULT_FIELDTYPE_FOR_DATETIME = "FieldType.DATE_TIME"; + private static final String DEFAULT_FIELDTYPE_FOR_NUMBER = "FieldType.INT32"; + private static final String DEFAULT_FIELDTYPE_FOR_CODE = "FieldType.INT32"; + private static final String DEFAULT_FIELDTYPE_FOR_VALUE = "FieldType.DOUBLE"; + private static final String DEFAULT_FIELDTYPE_FOR_CURRENCY = "FieldType.DOUBLE"; + private static final String DEFAULT_FIELDTYPE_FOR_STRING = "FieldType.STRING"; + private static final String DEFAULT_FIELDTYPE_FOR_BOOLEAN = "FieldType.BOOLEAN"; + private static final String DEFAULT_FIELDTYPE_FOR_LONG = "Long"; + private static final String DEFAULT_FIELDTYPE_FOR_BLOB = "byte[]"; + private static final String DEFAULT_FIELDTYPE_FOR_LOB = "FieldType.STRING"; + private static final String DEFAULT_FIELDTYPE_FOR_CLOB = "FieldType.STRING"; + + // MAP + private static Map MAP_DEFAULT_JAVA_TYPE = new HashMap<>(); + private static Map MAP_DEFAULT_ANGULAR_TYPE = new HashMap<>(); + private static Map MAP_DEFAULT_FILTER_TYPE = new HashMap<>(); + private static Map MAP_DEFAULT_SQL_TYPE = new HashMap<>(); + private static Map MAP_DEFAULT_SQL_LENGTH = new HashMap<>(); + private static Map MAP_DEFAULT_REPORT_TYPE = new HashMap<>(); + private static Map MAP_DEFAULT_FIELD_TYPE = new HashMap<>(); + private static Collection NOT_FILTRABLE_TYPES = new ArrayList<>(); + + static { + MAP_DEFAULT_JAVA_TYPE.put(LONG, DEFAULT_JAVATYPE_FOR_LONG); + MAP_DEFAULT_JAVA_TYPE.put(CODE, DEFAULT_JAVATYPE_FOR_CODE); + MAP_DEFAULT_JAVA_TYPE.put(FLAG, DEFAULT_JAVATYPE_FOR_BOOLEAN); + MAP_DEFAULT_JAVA_TYPE.put(VALUE, DEFAULT_JAVATYPE_FOR_VALUE); + MAP_DEFAULT_JAVA_TYPE.put(NUMBER, DEFAULT_JAVATYPE_FOR_NUMBER); + MAP_DEFAULT_JAVA_TYPE.put(STRING, DEFAULT_JAVATYPE_FOR_STRING); + MAP_DEFAULT_JAVA_TYPE.put(INTEGER, DEFAULT_JAVATYPE_FOR_NUMBER); + MAP_DEFAULT_JAVA_TYPE.put(BOOLEAN, DEFAULT_JAVATYPE_FOR_BOOLEAN); + MAP_DEFAULT_JAVA_TYPE.put(CURRENCY, DEFAULT_JAVATYPE_FOR_CURRENCY); + MAP_DEFAULT_JAVA_TYPE.put(DATETIME, DEFAULT_JAVATYPE_FOR_DATETIME); + MAP_DEFAULT_JAVA_TYPE.put(DATE, DEFAULT_JAVATYPE_FOR_DATE); + MAP_DEFAULT_JAVA_TYPE.put(BLOB, DEFAULT_JAVATYPE_FOR_BLOB); + MAP_DEFAULT_JAVA_TYPE.put(LOB, DEFAULT_JAVATYPE_FOR_LOB); + MAP_DEFAULT_JAVA_TYPE.put(CLOB, DEFAULT_JAVATYPE_FOR_CLOB); + } + + static { + MAP_DEFAULT_ANGULAR_TYPE.put(DATETIME, DEFAULT_ANGULARTYPE_FOR_DATETIME); + MAP_DEFAULT_ANGULAR_TYPE.put(DATE, DEFAULT_ANGULARTYPE_FOR_DATE); + MAP_DEFAULT_ANGULAR_TYPE.put(NUMBER, DEFAULT_ANGULARTYPE_FOR_NUMBER); + MAP_DEFAULT_ANGULAR_TYPE.put(INTEGER, DEFAULT_ANGULARTYPE_FOR_NUMBER); + MAP_DEFAULT_ANGULAR_TYPE.put(CODE, DEFAULT_ANGULARTYPE_FOR_CODE); + MAP_DEFAULT_ANGULAR_TYPE.put(VALUE, DEFAULT_ANGULARTYPE_FOR_VALUE); + MAP_DEFAULT_ANGULAR_TYPE.put(CURRENCY, DEFAULT_ANGULARTYPE_FOR_CURRENCY); + MAP_DEFAULT_ANGULAR_TYPE.put(STRING, DEFAULT_ANGULARTYPE_FOR_STRING); + MAP_DEFAULT_ANGULAR_TYPE.put(BOOLEAN, DEFAULT_ANGULARTYPE_FOR_BOOLEAN); + MAP_DEFAULT_ANGULAR_TYPE.put(LONG, DEFAULT_ANGULARTYPE_FOR_LONG); + MAP_DEFAULT_ANGULAR_TYPE.put(FLAG, DEFAULT_ANGULARTYPE_FOR_BOOLEAN); + } + + static { + MAP_DEFAULT_FILTER_TYPE.put(DATETIME, DEFAULT_FILTER_TYPE_FOR_DATETIME); + MAP_DEFAULT_FILTER_TYPE.put(DATE, DEFAULT_FILTER_TYPE_FOR_DATE); + MAP_DEFAULT_FILTER_TYPE.put(NUMBER, DEFAULT_FILTER_TYPE_FOR_NUMBER); + MAP_DEFAULT_FILTER_TYPE.put(INTEGER, DEFAULT_FILTER_TYPE_FOR_NUMBER); + MAP_DEFAULT_FILTER_TYPE.put(CODE, DEFAULT_FILTER_TYPE_FOR_CODE); + MAP_DEFAULT_FILTER_TYPE.put(VALUE, DEFAULT_FILTER_TYPE_FOR_VALUE); + MAP_DEFAULT_FILTER_TYPE.put(CURRENCY, DEFAULT_FILTER_TYPE_FOR_CURRENCY); + MAP_DEFAULT_FILTER_TYPE.put(STRING, DEFAULT_FILTER_TYPE_FOR_STRING); + MAP_DEFAULT_FILTER_TYPE.put(BOOLEAN, DEFAULT_FILTER_TYPE_FOR_BOOLEAN); + MAP_DEFAULT_FILTER_TYPE.put(LONG, DEFAULT_FILTER_TYPE_FOR_LONG); + MAP_DEFAULT_FILTER_TYPE.put(FLAG, DEFAULT_FILTER_TYPE_FOR_BOOLEAN); + } + + static { + MAP_DEFAULT_SQL_TYPE.put(DATETIME, DEFAULT_SQLTYPE_FOR_DATETIME); + MAP_DEFAULT_SQL_TYPE.put(DATE, DEFAULT_SQLTYPE_FOR_DATE); + MAP_DEFAULT_SQL_TYPE.put(NUMBER, DEFAULT_SQLTYPE_FOR_NUMBER); + MAP_DEFAULT_SQL_TYPE.put(INTEGER, DEFAULT_SQLTYPE_FOR_NUMBER); + MAP_DEFAULT_SQL_TYPE.put(CODE, DEFAULT_SQLTYPE_FOR_CODE); + MAP_DEFAULT_SQL_TYPE.put(VALUE, DEFAULT_SQLTYPE_FOR_VALUE); + MAP_DEFAULT_SQL_TYPE.put(CURRENCY, DEFAULT_SQLTYPE_FOR_CURRENCY); + MAP_DEFAULT_SQL_TYPE.put(STRING, DEFAULT_SQLTYPE_FOR_STRING); + MAP_DEFAULT_SQL_TYPE.put(BOOLEAN, DEFAULT_SQLTYPE_FOR_BOOLEAN); + MAP_DEFAULT_SQL_TYPE.put(LONG, DEFAULT_SQLTYPE_FOR_LONG); + MAP_DEFAULT_SQL_TYPE.put(FLAG, DEFAULT_SQLTYPE_FOR_BOOLEAN); + MAP_DEFAULT_SQL_TYPE.put(LOB, DEFAULT_SQLTYPE_FOR_LOB); + MAP_DEFAULT_SQL_TYPE.put(BLOB, DEFAULT_SQLTYPE_FOR_BLOB); + MAP_DEFAULT_SQL_TYPE.put(CLOB, DEFAULT_SQLTYPE_FOR_CLOB); + } + + static { + MAP_DEFAULT_SQL_LENGTH.put(DATETIME, DEFAULT_SQLLENGTH_FOR_DATETIME); + MAP_DEFAULT_SQL_LENGTH.put(DATE, DEFAULT_SQLLENGTH_FOR_DATE); + MAP_DEFAULT_SQL_LENGTH.put(NUMBER, DEFAULT_SQLLENGTH_FOR_NUMBER); + MAP_DEFAULT_SQL_LENGTH.put(INTEGER, DEFAULT_SQLLENGTH_FOR_NUMBER); + MAP_DEFAULT_SQL_LENGTH.put(CODE, DEFAULT_SQLLENGTH_FOR_CODE); + MAP_DEFAULT_SQL_LENGTH.put(VALUE, DEFAULT_SQLLENGTH_FOR_VALUE); + MAP_DEFAULT_SQL_LENGTH.put(CURRENCY, DEFAULT_SQLLENGTH_FOR_CURRENCY); + MAP_DEFAULT_SQL_LENGTH.put(STRING, DEFAULT_SQLLENGTH_FOR_STRING); + MAP_DEFAULT_SQL_LENGTH.put(BOOLEAN, DEFAULT_SQLLENGTH_FOR_BOOLEAN); + MAP_DEFAULT_SQL_LENGTH.put(LONG, DEFAULT_SQLLENGTH_FOR_LONG); + MAP_DEFAULT_SQL_LENGTH.put(FLAG, DEFAULT_SQLLENGTH_FOR_BOOLEAN); + MAP_DEFAULT_SQL_LENGTH.put(LOB, DEFAULT_SQLLENGTH_FOR_LOB); + MAP_DEFAULT_SQL_LENGTH.put(BLOB, DEFAULT_SQLLENGTH_FOR_BLOB); + MAP_DEFAULT_SQL_LENGTH.put(CLOB, DEFAULT_SQLLENGTH_FOR_CLOB); + } + + static { + MAP_DEFAULT_REPORT_TYPE.put(LONG, DEFAULT_REPORT_TYPE_FOR_LONG); + MAP_DEFAULT_REPORT_TYPE.put(CODE, DEFAULT_REPORT_TYPE_FOR_CODE); + MAP_DEFAULT_REPORT_TYPE.put(FLAG, DEFAULT_REPORT_TYPE_FOR_FLAG); + MAP_DEFAULT_REPORT_TYPE.put(VALUE, DEFAULT_REPORT_TYPE_FOR_VALUE); + MAP_DEFAULT_REPORT_TYPE.put(NUMBER, DEFAULT_REPORT_TYPE_FOR_NUMBER); + MAP_DEFAULT_REPORT_TYPE.put(STRING, DEFAULT_REPORT_TYPE_FOR_STRING); + MAP_DEFAULT_REPORT_TYPE.put(INTEGER, DEFAULT_REPORT_TYPE_FOR_INTEGER); + MAP_DEFAULT_REPORT_TYPE.put(BOOLEAN, DEFAULT_REPORT_TYPE_FOR_BOOLEAN); + MAP_DEFAULT_REPORT_TYPE.put(CURRENCY, DEFAULT_REPORT_TYPE_FOR_CURRENCY); + MAP_DEFAULT_REPORT_TYPE.put(DATETIME, DEFAULT_REPORT_TYPE_FOR_DATETIME); + MAP_DEFAULT_REPORT_TYPE.put(DATE, DEFAULT_REPORT_TYPE_FOR_DATE); + } + + static { + MAP_DEFAULT_FIELD_TYPE.put(LONG, DEFAULT_FIELDTYPE_FOR_LONG); + MAP_DEFAULT_FIELD_TYPE.put(CODE, DEFAULT_FIELDTYPE_FOR_CODE); + MAP_DEFAULT_FIELD_TYPE.put(FLAG, DEFAULT_FIELDTYPE_FOR_BOOLEAN); + MAP_DEFAULT_FIELD_TYPE.put(VALUE, DEFAULT_FIELDTYPE_FOR_VALUE); + MAP_DEFAULT_FIELD_TYPE.put(NUMBER, DEFAULT_FIELDTYPE_FOR_NUMBER); + MAP_DEFAULT_FIELD_TYPE.put(STRING, DEFAULT_FIELDTYPE_FOR_STRING); + MAP_DEFAULT_FIELD_TYPE.put(INTEGER, DEFAULT_FIELDTYPE_FOR_NUMBER); + MAP_DEFAULT_FIELD_TYPE.put(BOOLEAN, DEFAULT_FIELDTYPE_FOR_BOOLEAN); + MAP_DEFAULT_FIELD_TYPE.put(CURRENCY, DEFAULT_FIELDTYPE_FOR_CURRENCY); + MAP_DEFAULT_FIELD_TYPE.put(DATETIME, DEFAULT_FIELDTYPE_FOR_DATETIME); + MAP_DEFAULT_FIELD_TYPE.put(DATE, DEFAULT_FIELDTYPE_FOR_DATE); + MAP_DEFAULT_FIELD_TYPE.put(BLOB, DEFAULT_FIELDTYPE_FOR_BLOB); + MAP_DEFAULT_FIELD_TYPE.put(LOB, DEFAULT_FIELDTYPE_FOR_LOB); + MAP_DEFAULT_FIELD_TYPE.put(CLOB, DEFAULT_FIELDTYPE_FOR_CLOB); + } + + static { + NOT_FILTRABLE_TYPES.add(LOB); + NOT_FILTRABLE_TYPES.add(CLOB); + NOT_FILTRABLE_TYPES.add(BLOB); + } + + /** + * Return mapped java type from umlType + * + * @author Vittorio Niespolo + * @param type + * @return + */ + public static String getJavaType(Type type) { + String umlType = type.getName(); + String javaTypeName = MAP_DEFAULT_JAVA_TYPE.get(umlType); + if (javaTypeName == null) + return umlType; + return javaTypeName; + } + + /** + * Return mapped angular type from umlType + * + * @author Vittorio Niespolo + * @param type + * @return + */ + public static String getAngularType(Type type) { + String umlType = type.getName(); + String angularTypeName = MAP_DEFAULT_ANGULAR_TYPE.get(umlType); + if (angularTypeName == null) + return umlType; + return angularTypeName; + } + + /** + * Return mapped filter type from umlType + * + * @author Vittorio Niespolo + * @param type + * @return + */ + public static String getFilterType(Type type) { + String umlType = type.getName(); + String filterTypeName = MAP_DEFAULT_FILTER_TYPE.get(umlType); + if (filterTypeName == null) + return umlType; + return filterTypeName; + } + + /** + * Return the Filter properties based on property type + * + * @author Vittorio Niespolo + * @param classe + * @return the Filter properties based on property type + */ + public String getFilterProperties(Class classe) { + if (classe == null) { + return "false"; + } + String result = ""; + for (Property p : classe.getOwnedAttributes()) { + result += "private " + getJavaType(p.getType()) + "Filter " + p.getName() + ";\n"; + } + return result; + } + + /** + * Method to generate filter imports for Criteria + * + * @author Vittorio Niespolo + * @param classe + * @return String containing filter import list + */ + public String getFilterImportsFromTypes(Class classe, String filterTypePackage) { + if (classe == null) { + return "false"; + } + String result = ""; + Set attributiSet = new HashSet<>(); + for (Property p : classe.getOwnedAttributes()) { + attributiSet.add(getJavaType(p.getType())); + } + for (Class fClass : AssociationUtils.getParentClasses(classe)) { + if (!EntityUtils.hasCompositeKey(fClass)) { + for (Property p : fClass.getAllAttributes()) { + if (p.isID()) { + attributiSet.add(getJavaType(p.getType())); + } + } + } else { + attributiSet.add(""); + } + } + for (String att : attributiSet) { + // For unconventional Filters use this method + + /* + * if ("BigDecimal".equals(att)) { result += + * "import it.mice.samplemasterdetail.filter.BigDecimalFilter;\n"; } else if + * ("BigDecimal".equals(att)) { result += + * "import it.mice.samplemasterdetail.filter.StringFilter;\n"; + */ + result += "import " + filterTypePackage + "." + att + "Filter;\n"; + } + return result; + } + + /** + * Returns "true" if the input type is present in the mapping + * + * @author Luca Barone + * @param type + * @return + */ + public boolean isPresentJavaType(String type) { + String javaTypeName = MAP_DEFAULT_JAVA_TYPE.get(type); + if (javaTypeName == null) + return false; + return true; + } + + /** + * Return a Set of imports for the properties used + * + * @author Vittorio Niespolo + * @param classe + * @return a Set of imports for the properties used + */ + public Set getImportsForProperty(Class classe) { + Set imports = new HashSet<>(); + for (Property property : classe.getOwnedAttributes()) { + if (("BigDecimal").equals(getJavaType(property.getType()))) + imports.add("import java.math.BigDecimal;"); + if (("LocalDate").equals(getJavaType(property.getType()))) + imports.add("import java.time.LocalDate;"); + if (("LocalDateTime").equals(getJavaType(property.getType()))) + imports.add("import java.time.LocalDateTime;\n import com.fasterxml.jackson.annotation.JsonFormat;"); + if (("Date").equals(getJavaType(property.getType()))) + imports.add("import java.util.Date;"); + if (PropertyUtils.isRequired(property)) + imports.add("import javax.validation.constraints.NotNull;"); + } + return imports; + } + + /** + * Return the collection of class attribute without duplicates + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static Collection getAttributeTypesNoDuplicates(Class classe) { + LinkedHashSet hashSet = new LinkedHashSet<>(); + for (Property property : EntityUtils.getIdAttributesFromForeignKeys(classe)) { + hashSet.add(property.getType()); + } + + for (Property property : classe.getOwnedAttributes()) { + hashSet.add(property.getType()); + } + return new ArrayList(hashSet); + } + + /** + * Return the collection of class attribute java type without duplicates + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static Collection getAttributeJavaTypesNoDuplicates(Collection attributi) { + LinkedHashSet hashSet = new LinkedHashSet<>(); + + for (Property property : attributi) { + hashSet.add(getFilterType(property.getType())); + } + return new ArrayList(hashSet); + } + + /** + * Return the collection of class attribute java type without duplicates + * + * @author Vittorio Niespolo + * @param classe + * @return + */ + public static Collection getAttributeAngularTypesNoDuplicates(Collection attributi) { + LinkedHashSet hashSet = new LinkedHashSet<>(); + for (Property property : attributi) { + hashSet.add(getFilterType(property.getType())); + } + return new ArrayList(hashSet); + } + + /** + * Return mapped sql type from umlType + * + * @author Vittorio Niespolo + * @param type + * @return + */ + public static String getSqlType(Type type) { + String umlType = type.getName(); + String sqlTypeName = MAP_DEFAULT_SQL_TYPE.get(umlType); + if (sqlTypeName == null) + return umlType; + return sqlTypeName; + } + + /** + * Return mapped sql type from umlType + * + * @author Vittorio Niespolo + * @param type + * @return + */ + public static String getSqlLength(Property property) { + String umlType = property.getType().getName(); + String sqlTypeLength = MAP_DEFAULT_SQL_LENGTH.get(umlType); + String attributeLength = StereotypeUtils.getStereotypeValue(property, + StereotypeName.ATTRIBUTE, StereotypePropertyName.PHYSICAL_LENGTH); + if (attributeLength != null && !attributeLength.isEmpty()) + sqlTypeLength = attributeLength; + if (sqlTypeLength == null) + return umlType; + return sqlTypeLength; + } + + /** + * Return report type from UML type. + * + * @author Fabio Memoli + * @param type of UML + * @return type of report + */ + public static String getReportType(Type umlType) { + String reportType = MAP_DEFAULT_REPORT_TYPE.get(umlType.getName()); + return (reportType == null) ? umlType.getName() : reportType; + } + + /** + * return a set of imports for class specific dto + * + * @author Simone Punzo + * @param classe + * @return required java imports + */ + public Set getImportsForPropertyDto(Class classe) { + Set imports = new HashSet<>(); + for (Property property : classe.getOwnedAttributes()) { + if (("BigDecimal").equals(getJavaType(property.getType()))) + imports.add("import java.math.BigDecimal;"); + if (("LocalDate").equals(getJavaType(property.getType()))) + imports.add("import java.time.LocalDate;"); + if (("LocalDateTime").equals(getJavaType(property.getType()))) + imports.add("import java.time.LocalDateTime;"); + } + return imports; + } + + /** + * Ritorna la lista dei tipi non filtrabili nelle ricerche + * + * @author Vittorio Niespolo + * + * @return + */ + public static Collection getNotFiltrableTypes() { + return NOT_FILTRABLE_TYPES; + } + + /** + * Return mapped field type from umlType + * + * @author Vittorio Niespolo + * @param type + * @return + */ + public static String getFieldType(Type type) { + String umlType = type.getName(); + String fieldTypeName = MAP_DEFAULT_FIELD_TYPE.get(umlType); + if (fieldTypeName == null) + return umlType; + return fieldTypeName; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/associationUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/associationUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..8b0e69fdd1f32a34c6e76aa59bed8b371f04a8ad --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/associationUtils.mtl @@ -0,0 +1,210 @@ +[comment encoding = Cp1252 /] +[module associationUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public isOneToOneRelation(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isOneToOneRelation(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public isManyToOneRelation(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isManyToOneRelation(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public isSelfRelation(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isSelfRelation(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public isBothOptional(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isBothOptional(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public getOptionalMember(arg0 : Association) : Class + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getOptionalMember(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public getSelfOptionalMember(arg0 : Association) : Property + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getSelfOptionalMember(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public hasOptionalMember(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasOptionalMember(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public isFirstMapped(arg0 : Class, arg1 : Association, arg2 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isFirstMapped(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1, arg2}) +/] + +[query public isOptionalMember(arg0 : Class, arg1 : Association, arg2 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isOptionalMember(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1, arg2}) +/] + +[query public getFirstMapped(arg0 : Association) : Class + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getFirstMapped(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public getSelfFirstMapped(arg0 : Association) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getSelfFirstMapped(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public hasParentOneToOne(arg0 : Class, arg1 : Association, arg2 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasParentOneToOne(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1, arg2}) +/] + +[query public hasChildOneToOne(arg0 : Class, arg1 : Association, arg2 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasChildOneToOne(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1, arg2}) +/] + +[query public isClassChild(arg0 : Class, arg1 : Association, arg2 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isClassChild(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1, arg2}) +/] + +[query public isClassParent(arg0 : Class, arg1 : Association, arg2 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isClassParent(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1, arg2}) +/] + +[query public getParents(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParents(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getChilds(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChilds(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getChildClasses(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChildClasses(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentClasses(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentClasses(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentIds(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentIds(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasChilds(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasChilds(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasParents(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasParents(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getChildClass(arg0 : Class, arg1 : Association) : Class + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChildClass(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association)', Sequence{arg0, arg1}) +/] + +[query public getParentClass(arg0 : Class, arg1 : Association) : Class + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentClass(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association)', Sequence{arg0, arg1}) +/] + +[query public getChildEnd(arg0 : Class, arg1 : Association) : Property + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChildEnd(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association)', Sequence{arg0, arg1}) +/] + +[query public getParentEnd(arg0 : Class, arg1 : Association) : Property + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentEnd(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association)', Sequence{arg0, arg1}) +/] + +[query public getChildAssociations(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChildAssociations(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentAssociations(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentAssociations(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentAssociationsExcluding(arg0 : Class, arg1 : Association) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentAssociationsExcluding(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association)', Sequence{arg0, arg1}) +/] + +[query public getMappedName(arg0 : Association, arg1 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getMappedName(org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1}) +/] + +[query public getOtherEnd(arg0 : Class, arg1 : Association) : Class + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getOtherEnd(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association)', Sequence{arg0, arg1}) +/] + +[query public isIdentifying(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isIdentifying(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public getFirstChild(arg0 : Class) : Class + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getFirstChild(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isParentRequired(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isParentRequired(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public getParentAssName(arg0 : Association, arg1 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentAssName(org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Class)', Sequence{arg0, arg1}) +/] + +[query public getChildAssName(arg0 : Association, arg1 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChildAssName(org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Class)', Sequence{arg0, arg1}) +/] + +[query public getParentClassesExcluding(arg0 : Class, arg1 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentClassesExcluding(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Class)', Sequence{arg0, arg1}) +/] + +[query public isReadOnly(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'isReadOnly(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public getParentAssFromImportedModels(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentAssFromImportedModels(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getChildAssFromImportedModels(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChildAssFromImportedModels(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentAssFromAllModels(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentAssFromAllModels(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasDropdownParentSelection(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasDropdownParentSelection(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public hasPopupParentSelection(arg0 : Association) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasPopupParentSelection(org.eclipse.uml2.uml.Association)', Sequence{arg0}) +/] + +[query public hasAtLeastOneDrpodownSelection(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasAtLeastOneDrpodownSelection(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasNavigableParents(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasNavigableParents(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getPhysicalMappedName(arg0 : Association, arg1 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getPhysicalMappedName(org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1}) +/] + +[query public hasNoIdentifyingParent(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'hasNoIdentifyingParent(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentAssociationHavingCK(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentAssociationHavingCK(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getChildClassesNoDup(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChildClassesNoDup(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentClassesNoDup(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentClassesNoDup(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentAssociationsNoDup(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getParentAssociationsNoDup(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getChildAssociationsNoDup(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.AssociationUtils', 'getChildAssociationsNoDup(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/copyFolderUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/copyFolderUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..4193cd0312dc3020cfab69a65d23f69840cf06f6 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/copyFolderUtils.mtl @@ -0,0 +1,6 @@ +[comment encoding = Cp1252 /] +[module copyFolderUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public copyFolder(inputFolder : String, outputFolder : String, bundleName : String, outputFolderSuffix : String, includeFilter : String, excludeFilter : String, antProcessFilter : String, excludeDefaultExt : Boolean, tokenValuePairs : String, renameList : String, extensionRenameList : String) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.CopyFolderUtils', 'copyFolder(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.String)', Sequence{inputFolder, outputFolder, bundleName, outputFolderSuffix, includeFilter, excludeFilter, antProcessFilter, excludeDefaultExt, tokenValuePairs, renameList, extensionRenameList}) +/] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/entityUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/entityUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..75f3a42d04665d4f6cc20d05f8d8b35fb8f4b7c3 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/entityUtils.mtl @@ -0,0 +1,250 @@ +[comment encoding = Cp1252 /] +[module entityUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public hasAutogeneratedIdBySeq(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasAutogeneratedIdBySeq(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getSequenceName(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getSequenceName(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isEntityStereotype(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isEntityStereotype(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasInnerCompositeKey(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasInnerCompositeKey(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getClassIDs(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getClassIDs(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getClassIDsIncludingFK(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getClassIDsIncludingFK(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInCompositeKey(arg0 : Class, arg1 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isInCompositeKey(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1}) +/] + +[query public getIdAttributesFromForeignKeys(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getIdAttributesFromForeignKeys(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getCompositeKeyAttributes(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getCompositeKeyAttributes(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getCompositeKeyAttributesWithMappedNames(arg0 : Class, arg1: Boolean) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getCompositeKeyAttributesWithMappedNames(org.eclipse.uml2.uml.Class, java.lang.Boolean)', Sequence{arg0, arg1}) +/] + +[query public hasExternalPK(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasExternalPK(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasCompositeKey(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasCompositeKey(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasFatherWithCompositeKey(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasFatherWithCompositeKey(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasAutogeneratedId(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasAutogeneratedId(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getEntityDefinition(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getEntityDefinition(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getEntityLabel(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getEntityLabel(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getEntityTooltip(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getEntityTooltip(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasDefinition(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasDefinition(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInID(arg0 : Property, arg1 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isInID(org.eclipse.uml2.uml.Property, org.eclipse.uml2.uml.Class)', Sequence{arg0, arg1}) +/] + +[query public isInInnerID(arg0 : Class, arg1 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isInInnerID(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1}) +/] + +[query public isAuditable(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isAuditable(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getCompleteAttributeList(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getCompleteAttributeList(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getAttributeList(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getAttributeList(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getCategory(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getCategory(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isBusinessCategory(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isBusinessCategory(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isAttachmentCategory(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isAttachmentCategory(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isMailCategory(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isMailCategory(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isSecurityCategory(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isSecurityCategory(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasOneToOneRelation(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasOneToOneRelation(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasManyToOneRelation(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasManyToOneRelation(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getFirstStringAttribute(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getFirstStringAttribute(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInRole(arg0 : Class, arg1 : String) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isInRole(org.eclipse.uml2.uml.Class, java.lang.String)', Sequence{arg0, arg1}) +/] + +[query public hasDateProperty(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasDateProperty(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasAttributes(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasAttributes(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasAttributesWithoutIDs(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasAttributesWithoutIDs(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getAttributesWithoutIDs(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getAttributesWithoutIDs(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasGeneralClass(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasGeneralClass(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getGeneralClass(arg0 : Class) : Class + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getGeneralClass(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public populateExtendedClasses(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'populateExtendedClasses(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public isClassExtended(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'isClassExtended(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public generalizeSecurityUserRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'generalizeSecurityUserRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getDateProperties(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getDateProperties(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getStringProperties(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getStringProperties(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentStringProperties(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getParentStringProperties(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getParentStringId(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getParentStringId(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getIdentifyingParentAssociations(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getIdentifyingParentAssociations(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getNotIdentifyingParentAssociations(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getNotIdentifyingParentAssociations(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getFiltrableAttributes(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getFiltrableAttributes(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getAttributesForPresentation(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getAttributesForPresentation(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getAttributesForPresentationWOAudit(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getAttributesForPresentationWOAudit(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getCompleteAttributeListForPresentation(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getCompleteAttributeListForPresentation(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public entityHasOneStringField(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'entityHasOneStringField(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getTableName(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getTableName(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getHelper(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'getHelper(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasParentsWithCK(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasParentsWithCK(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasSelfRelation(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasSelfRelation(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasAttribute(arg0 : Class, arg1: Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasAttribute(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public hasTextAreas(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasTextAreas(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasPopUpParentSelection(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasPopUpParentSelection(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasAtLeastOneParent(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasAtLeastOneParent(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public hasAtLeastAPorpertyAnnotatedAsID(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'hasAtLeastAPorpertyAnnotatedAsID(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public belongsToMainSubjectArea(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.EntityUtils', 'belongsToMainSubjectArea(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/exceptionHandlerUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/exceptionHandlerUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..fac41feb95e32684775dcd6f26a97023bd8eecba --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/exceptionHandlerUtils.mtl @@ -0,0 +1,7 @@ +[comment encoding = Cp1252 /] +[module exceptionHandlerUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public hasDiagramExceptions(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ExceptionHandlerUtils', 'hasDiagramExceptions(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/featureUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/featureUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..6a7fa0afbafca4ab9018c407a51e0ec8f38d259a --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/featureUtils.mtl @@ -0,0 +1,58 @@ +[comment encoding = Cp1252 /] +[module featureUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public getGenericFeatures(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'getGenericFeatures(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getEntitySpecificFeatures(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'getEntitySpecificFeatures(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getGenerator(arg0 : Model) : Actor + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'getGenerator(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public isFeatureLinkedToGenerator(arg0 : Model, arg1 : UseCase) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isFeatureLinkedToGenerator(org.eclipse.uml2.uml.Model, org.eclipse.uml2.uml.UseCase)', Sequence{arg0, arg1}) +/] + +[query public getEntitySpecificFeatureEntities(arg0 : UseCase) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'getEntitySpecificFeatureEntities(org.eclipse.uml2.uml.UseCase)', Sequence{arg0}) +/] + +[query public isAttachmentEnabled(arg0 : Class, arg1 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isAttachmentEnabled(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Model)', Sequence{arg0, arg1}) +/] + +[query public isAttachmentEnabled(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isAttachmentEnabled(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public isEmailEnabled(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isEmailEnabled(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public isSecurityEnabled(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isSecurityEnabled(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public isCachingEnabled(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isCachingEnabled(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public isFeatureStereotype(arg0 : UseCase) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isFeatureStereotype(org.eclipse.uml2.uml.UseCase)', Sequence{arg0}) +/] + +[query public isEntitySpecificFeatureStereotype(arg0 : UseCase) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isEntitySpecificFeatureStereotype(org.eclipse.uml2.uml.UseCase)', Sequence{arg0}) +/] + +[query public isGenericFeatureStereotype(arg0 : UseCase) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isGenericFeatureStereotype(org.eclipse.uml2.uml.UseCase)', Sequence{arg0}) +/] + +[query public isReportEnabled(arg0 : Class, arg1: Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.FeatureUtils', 'isReportEnabled(org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Model)', Sequence{arg0, arg1}) +/] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/generalUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/generalUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..dcb63e631ccdbb6eae467bc94198bdc1c89e4b79 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/generalUtils.mtl @@ -0,0 +1,23 @@ +[comment encoding = Cp1252 /] +[module generalUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public getGeneratedSerialUID(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.GeneralUtils', 'getGeneratedSerialUID(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getEntityDump(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.GeneralUtils', 'getEntityDump(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getAttributeDump(arg0 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.GeneralUtils', 'getAttributeDump(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isParentZeroOneMultiplicity(arg0 : Association, arg1 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.GeneralUtils', 'isParentZeroOneMultiplicity(org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1}) +/] + +[query public isChildZeroOneMultiplicity(arg0 : Association, arg1 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.GeneralUtils', 'isChildZeroOneMultiplicity(org.eclipse.uml2.uml.Association, org.eclipse.uml2.uml.Property)', Sequence{arg0, arg1}) +/] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/generate.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/generate.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b0353b6ad7d1b11ad3c8f53282b9b229a98d9eac --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/generate.mtl @@ -0,0 +1,23 @@ +[comment encoding = Cp1252 /] +[module generate('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public isInSecurityUserRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInSecurityUserRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInPrivilegePerRoleRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInPrivilegePerRoleRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInRoleRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInRoleRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInPrivilegeRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInPrivilegeRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInRolePerSecurityUserRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInRolePerSecurityUserRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/microServiceUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/microServiceUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..cf43ae721b85ba0a55b24c951a81f072959f4e0e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/microServiceUtils.mtl @@ -0,0 +1,53 @@ +[comment encoding = Cp1252 /] +[module microServiceUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + + +[query public hasMicroServiceStereotype(arg0 : Component) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'hasMicroServiceStereotype(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public isSecurityMS(arg0 : Component) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'isSecurityMS(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] +[query public isAttachmentMS(arg0 : Component) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'isAttachmentMS(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] +[query public isNotificationMS(arg0 : Component) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'isNotificationMS(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public isBusinessMS(arg0 : Component) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'isBusinessMS(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public isDemoMS(arg0 : Component) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'isDemoMS(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public getMsPortNumber(arg0 : Component) : Integer + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'getMsPortNumber(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public getGatewayPortNumber(arg0 : Component) : Integer + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'getGatewayPortNumber(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public getCategory(arg0 : Component) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'getCategory(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public generateRandomModelId(arg0 : Component) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'generateRandomModelId(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public getId(arg0 : Component) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'getId(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public getPersistenceType(arg0 : Component) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'getPersistenceType(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] + +[query public isNoSqlMicroservice(arg0 : Component) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.MicroServiceUtils', 'isNoSqlMicroservice(org.eclipse.uml2.uml.Component)', Sequence{arg0}) +/] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/modelUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/modelUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..4095d66201ea515939b29871d7979c3f0ffaa88c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/modelUtils.mtl @@ -0,0 +1,118 @@ +[comment encoding = Cp1252 /] +[module modelUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public getEntities() : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getModelEntities()', Sequence{}) +/] + +[query public getMicroservices() : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getMicroservices()', Sequence{}) +/] + +[query public getGateway() : Component += invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getGateway()', Sequence{}) +/] + +[query public getSpa() : Component += invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getSpa()', Sequence{}) +/] + +[query public getSpaUrl(oclAny: OclAny) : String += invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getSpaUrl()', Sequence{}) +/] + +[query public getSpaPort(oclAny: OclAny) : Integer += invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getSpaPortNumber()', Sequence{}) +/] + +[query public getBusinessEntities(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getBusinessEntities(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getMailEntities(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getMailEntities(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getAttachmentEntities(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getAttachmentEntities(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getSecurityEntities(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getSecurityEntities(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getUseCases(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getUseCases(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getFeatures(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getFeatures(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public initializeEntities(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'initializeEntities(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public initializeMicroservices(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'initializeMicroservices(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public initializeGateway(arg0 : Model) : OclAny + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'initializeGateway(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public isRoot(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'isRoot(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public isMainMs(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'isMainMS(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getSecurityMSName(arg0: Model) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getSecurityMSName(org.eclipse.uml2.uml.Model)' , Sequence{arg0}) +/] + +[query public isFrontEndGenerationEnabled(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'isFrontEndGenerationEnabled(org.eclipse.uml2.uml.Model)',Sequence{arg0}) +/] + +[query public isGatewayGenerationEnabled(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'isGatewayGenerationEnabled(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getSecurityMs(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getSecurityMs(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getNotificationMs(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getNotificationMs(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getDemoMs(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getDemoMs(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getBusinessMs(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getBusinessMs(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public initializeSPA(arg0 : Model) : OclAny + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'initializeSPA(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public checkModel(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'checkModel(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public hasNoSqlMicroservice(arg0 : Model) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'hasNoSqlMicroservice(org.eclipse.uml2.uml.Model)',Sequence{arg0}) +/] + +[query public getSubjectAreas(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getSubjectAreas(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] + +[query public getModelEntitiesFromMainSA(arg0 : Model) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ModelUtils', 'getModelEntitiesFromMainSA(org.eclipse.uml2.uml.Model)', Sequence{arg0}) +/] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/propertyUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/propertyUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..cfd28042e8ac2488ef503957bd5a4641e09ea400 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/propertyUtils.mtl @@ -0,0 +1,93 @@ +[comment encoding = Cp1252 /] +[module propertyUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public isRequired(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isRequired(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public getPropertyLabel(arg0 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getPropertyLabel(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isNumeric(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isNumeric(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isString(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isString(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isBoolean(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isBoolean(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isDate(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isDate(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public getNaturalLanguageName(arg0 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getNaturalLanguageName(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public getAttributeLabel(arg0 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getLabel(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public getTooltip(arg0 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getTooltip(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public getDefinition(arg0 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getDefinition(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isNMultiplicity(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isNMultiplicity(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isZeroOneMultiplicity(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isZeroOneMultiplicity(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public getPhysicalColumnLenght(arg0 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getPhysicalColumnLenght(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public getColumnDefinition(arg0 : Property, arg1 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getColumnDefinition(org.eclipse.uml2.uml.Property, org.eclipse.uml2.uml.Class)', Sequence{arg0, arg1}) +/] +[query public getParentPropAssName(arg0 : Property, arg1 : Class, arg2 : Association) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getParentPropAssName(org.eclipse.uml2.uml.Property, org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association)', Sequence{arg0, arg1, arg2}) +/] + +[query public getChildPropAssName(arg0 : Property, arg1 : Class, arg2 : Association) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getChildPropAssName(org.eclipse.uml2.uml.Property, org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association)', Sequence{arg0, arg1, arg2}) +/] + +[query public isDateTime(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isDateTime(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isLocalDate(arg0: Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isLocalDate(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public getAttributeName(arg0 : Property, arg1 : Class, arg2 : Association, arg3: Boolean) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getAttributeName(org.eclipse.uml2.uml.Property, org.eclipse.uml2.uml.Class, org.eclipse.uml2.uml.Association, java.lang.Boolean)', Sequence{arg0, arg1, arg2, arg3}) +/] + +[query public getPhysicalColumnName(arg0 : Property) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'getPhysicalColumnName(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public hasDefinition(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'hasDefinition(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public isAnID(arg0 : Property) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'isAnID(org.eclipse.uml2.uml.Property)', Sequence{arg0}) +/] + +[query public hasPhysicalLengthGreaterThan(arg0 : String) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.PropertyUtils', 'hasPhysicalLengthGreaterThan(java.lang.String)', Sequence{arg0}) +/] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/securityUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/securityUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..3944b49abc20b231bf06c9a8e65b74aa4fafa9ba --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/securityUtils.mtl @@ -0,0 +1,23 @@ +[comment encoding = Cp1252 /] +[module securityUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public isInSecurityUserRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInSecurityUserRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInPrivilegePerRoleRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInPrivilegePerRoleRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInRoleRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInRoleRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInPrivilegeRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInPrivilegeRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public isInRolePerSecurityUserRole(arg0 : Class) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SecurityUtils', 'isInRolePerSecurityUserRole(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/specificationFilterUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/specificationFilterUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..10e27d67cac421292e5bf26ba663ad931dcab46e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/specificationFilterUtils.mtl @@ -0,0 +1,7 @@ +[comment encoding = Cp1252 /] +[module specificationFilterUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public getSpecification(arg0 : Type) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SpecificationFilterUtils', 'getSpecification(org.eclipse.uml2.uml.Type)', Sequence{arg0}) +/] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/stringUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/stringUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..cd79ce39b41fd5ddfe43623202e6e4a07a08390a --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/stringUtils.mtl @@ -0,0 +1,64 @@ +[comment encoding = Cp1252 /] +[module stringUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public StringUtils(anOclAny: OclAny) : OclVoid + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'StringUtils()', Sequence{}) +/] + +[query public camelToUnderscore(arg0 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'camelToUnderscore(java.lang.String)', Sequence{arg0}) +/] + +[query public dashToCamelCase(arg0 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'dashToCamelCase(java.lang.String)', Sequence{arg0}) +/] + +[query public camelToDash(arg0 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'camelToDash(java.lang.String)', Sequence{arg0}) +/] + +[query public splitCamel(arg0 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'splitCamel(java.lang.String)', Sequence{arg0}) +/] + +[query public formatter(arg0 : String, arg1 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'formatter(java.lang.String, java.lang.String)', Sequence{arg0, arg1}) +/] + +[query public toUpperFirst(arg0 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'toUpperFirst(java.lang.String)', Sequence{arg0}) +/] + +[query public encodeDDL(arg0 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'encodeDDL(java.lang.String)', Sequence{arg0}) +/] + +[query public removeHtmlTags(arg0 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'removeHtmlTags(java.lang.String)', Sequence{arg0}) +/] + +[query public getFormattedNumber(arg0 : Integer, arg1 : Integer) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'getFormattedNumber(java.lang.Integer, java.lang.Integer)', Sequence{arg0, arg1}) +/] + +[query public stringifyNumber(arg0 : Integer) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.StringUtils', 'stringifyNumber(java.lang.Integer)', Sequence{arg0}) +/] + + + +[comment]LOGGER[/comment] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[template public writeAndFormat(fileBody : String, fileName : String)] +[consoleMessage(getDebugSeverity(),'Generazione in corso del file: '.concat(fileName))/] +[file(fileName, false, 'UTF-8')] +[if(fileName.endsWith('.yml')._not())] +[formatter(fileBody, fileName)/] +[else] +[fileBody/] +[/if] +[/file] +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/subjectAreaUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/subjectAreaUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..74ea20333f739259429071959330019ab328a8b3 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/subjectAreaUtils.mtl @@ -0,0 +1,6 @@ +[comment encoding = UTF-8 /] +[module subjectAreaUtils('http://www.eclipse.org/uml2/2.2.0/GenModel', 'http://www.eclipse.org/uml2/5.0.0/Types', 'http://www.eclipse.org/uml2/5.0.0/UML', 'http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard')] + +[query public getEntitiesForSA(arg0 : Package) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.SubjectAreaUtils', 'getEntitiesForSA(org.eclipse.uml2.uml.Package)', Sequence{arg0}) +/] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/typeUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/typeUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..6b9d456353ebb681fd37ff85034b5c54a3eb7152 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/javaservice/wrapper/typeUtils.mtl @@ -0,0 +1,55 @@ +[comment encoding = Cp1252 /] +[module typeUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public getJavaType(arg0 : Type) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getJavaType(org.eclipse.uml2.uml.Type)', Sequence{arg0}) +/] + +[query public getAngularType(arg0 : Type) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getAngularType(org.eclipse.uml2.uml.Type)', Sequence{arg0}) +/] + +[query public getReportType(arg0 : Type) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getReportType(org.eclipse.uml2.uml.Type)', Sequence{arg0}) +/] + +[query public getFilterType(arg0 : Type) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getFilterType(org.eclipse.uml2.uml.Type)', Sequence{arg0}) +/] + +[query public getFilterProperties(arg0 : Class) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getFilterProperties(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getFilterImportsFromTypes(arg0 : Class, arg1 : String) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getFilterImportsFromTypes(org.eclipse.uml2.uml.Class, java.lang.String)', Sequence{arg0, arg1}) +/] + +[query public isPresentJavaType(arg0 : String) : Boolean + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'isPresentJavaType(java.lang.String)', Sequence{arg0}) +/] + +[query public getImportsForProperty(arg0 : Class) : Set(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getImportsForProperty(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getAttributeTypesNoDuplicates(arg0 : Class) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getAttributeTypesNoDuplicates(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + +[query public getAttributeJavaTypesNoDuplicates(arg0 : Collection(OclAny)) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getAttributeJavaTypesNoDuplicates(java.util.Collection)', Sequence{arg0}) +/] + +[query public getAttributeAngularTypesNoDuplicates(arg0 : Collection(OclAny)) : Collection(OclAny) + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getAttributeAngularTypesNoDuplicates(java.util.Collection)', Sequence{arg0}) +/] + +[query public getImportsForPropertyDto(arg0: Class ) : Set(OclAny) + =invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getImportsForPropertyDto(org.eclipse.uml2.uml.Class)', Sequence{arg0}) +/] + + +[query public getFieldType(arg0 : Type) : String + = invoke('it.micegroup.voila2.cartridge.library.javaservice.TypeUtils', 'getFieldType(org.eclipse.uml2.uml.Type)', Sequence{arg0}) +/] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/logger/consoleUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/logger/consoleUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..ff5934312b859eb7f84d17a32005798e39f2514f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/logger/consoleUtils.mtl @@ -0,0 +1,10 @@ +[comment encoding = Cp1252 /] +[module consoleUtils('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[query public consoleMessage(arg0 : String) : OclVoid + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ConsoleUtils', 'consoleMessage(java.lang.String)', Sequence{arg0}) +/] + +[query public consoleMessage(arg0 : String, arg1 : String) : OclVoid + = invoke('it.micegroup.voila2.cartridge.library.javaservice.ConsoleUtils', 'consoleMessage(java.lang.String, java.lang.String)', Sequence{arg0, arg1}) +/] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/logger/severityLevel.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/logger/severityLevel.mtl new file mode 100644 index 0000000000000000000000000000000000000000..a2e024ce46baf5cd93c6ddc98a02d9388e3350a0 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/logger/severityLevel.mtl @@ -0,0 +1,22 @@ +[comment encoding = UTF-8 /] +[module severityLevel('http://www.eclipse.org/uml2/5.0.0/UML')] + +[template public getWarnSeverity(oclAny : OclAny)] +['WARN'/] +[/template] + +[template public getDebugSeverity(oclAny : OclAny)] +['DEBUG'/] +[/template] + +[template public getInfoSeverity(oclAny : OclAny)] +['INFO'/] +[/template] + +[template public getFatalSeverity(oclAny : OclAny)] +['FATAL'/] +[/template] + +[template public getErrorSeverity(oclAny : OclAny)] +['ERROR'/] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/classPathUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/classPathUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..4aa18e344325f2d6dcdc6504e2832e6beee2b79c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/classPathUtils.mtl @@ -0,0 +1,15 @@ +[module classPathUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties/] + +[template public getLibsCoreClassPath(oclAny:OclAny)] +[getRootArtifactId()/]-libs-core +[/template] + +[template public getLibsWebClassPath(oclAny:OclAny)] +[getRootArtifactId()/]-libs-web +[/template] + +[template public getLibsImplClassPath(oclAny:OclAny)] +[getRootArtifactId()/]-libs-impl +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/componentUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/componentUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..7dc5291d68db56903c3b3b4b62d06950e9fec4d7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/componentUtils.mtl @@ -0,0 +1,24 @@ +[comment] + + +Classe di utilities per il component diagram. +ATTENZIONE il livello di astrazione è quello dei componenti non dello specifico microservizio. + +author: Vittorio Niespolo +[/comment] +[comment encoding = UTF-8 /] +[module componentUtils('http://www.eclipse.org/uml2/2.2.0/GenModel', 'http://www.eclipse.org/uml2/5.0.0/Types', 'http://www.eclipse.org/uml2/5.0.0/UML', 'http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::microServiceUtils /] + +[query public microserviceHasPersistenceType(microservice: Component, persistenceType : String) : Boolean + = microservice.getPersistenceType() = persistenceType +/] + +[query public isSqlMicroservice(microservice: Component) : Boolean + = microserviceHasPersistenceType(microservice, 'sql') +/] + +[query public isNoSqlMicroservice(microservice: Component) : Boolean + = microserviceHasPersistenceType(microservice, 'noSql') +/] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/controllerMsUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/controllerMsUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..232e133940957badd1e04108f01b1eee7c58bf2c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/controllerMsUtils.mtl @@ -0,0 +1,234 @@ +[module controllerMsUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::securityUtils/] + +[comment]I metodi si chiamerrano new per distinguerli da quelli del vecchio controller e allo stesso + tempo di usare alcune delle vecchie funzioni visto che sono omonime[/comment] +[template public genGetAllPaginated(aClass : Class, aModel: Model)] +[comment]TO DO genGetAllPaginatedDOC[/comment] +@GetMapping +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'FIND_PAGINATED', aModel)/] +public ResponseEntity>> findPaginated([getCriteriaClassName(aClass)/] criteria, Pageable pageable) { + Page<[getEntityClassName(aClass)/]> page = [getServiceClassName(aClass).toLowerFirst()/].findByCriteria(criteria, pageable); + return toResponseEntityPaged(page, null); +} +[/template] + + + +[template public genGetById(aClass:Class, aModel:Model)] +/** + * {@code GET /[aClass.getDashedEntityClassName()/]/:objectKey} : get the [aClass.getDashedEntityClassName()/] with given objectKey. + * + * @param objectKey the objectKey of the [aClass.getDashedEntityClassName()/] to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the [aClass.getDashedEntityClassName()/], or with status {@code 404 (Not Found)}. + */ +@GetMapping("/{objectKey:.+}") +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'FIND_BY_ID', aModel)/] +public ResponseEntity> getByObjectKey(@PathVariable String objectKey) { +return toResponseEntity([getServiceClassName(aClass).toString().toLowerFirst()/].findByObjectKey(objectKey), null,HttpStatus.OK); +} +[/template] + + + +[template public genCreate(aClass:Class, aModel: Model)] +/** + * {@code POST /[aClass.getDashedEntityClassName()/]} : Create a new [aClass.getEntityClassName()/]. + * + * @param [aClass.getEntityClassName()/] the [aClass.getEntityClassName()/] to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with body the new [aClass.getEntityClassName()/], or with status {@code 400 (Bad Request)} if the [aClass.getEntityClassName()/] has already an ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ +@PostMapping +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'CREATE', aModel)/] +public ResponseEntity save(@Valid @RequestBody BaseRequest<[aClass.getWriteDtoName()/]> request) { + ResponseEntity response = null; + [getEntityClassName(aClass)/] [aClass.getEntityClassName().toLowerFirst()/]ToInsert = childMap(request.getData()); + try{ + [getEntityClassName(aClass)/] new[getEntityClassName(aClass)/] = [getServiceClassName(aClass).toString().toLowerFirst()/].insert(modelMapper.map([aClass.getEntityClassName().toLowerFirst()/]ToInsert, [getEntityClassName(aClass)/].class)); + URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(new[getEntityClassName(aClass)/].get[getClassIdName(aClass).toUpperFirst()/]()).toUri(); + HttpHeaders headers = new HttpHeaders(); + headers.setLocation(location); + response = toResponseEntity(Optional.of(new[getEntityClassName(aClass)/]), headers, HttpStatus.CREATED); + } catch (Exception exception) { + LOGGER.error("Exception:", exception); + } + return response; +} + +private [aClass.getEntityClassName()/] childMap([aClass.getWriteDtoName()/] data) { + [aClass.getEntityClassName()/] [aClass.getEntityClassName().toLowerFirst()/]ToInsert = modelMapper.map(data, [aClass.getEntityClassName()/].class); + [for(childAss: Association | aClass.getChildAssociations())] + Collection<[aClass.getChildClass(childAss).getEntityClassName()/]> [aClass.getTheChildPropertyName(childAss).toLowerFirst()/]s = data.get[aClass.getTheChildPropertyName(childAss).toUpperFirst()/]().stream() + .map(element -> modelMapper.map(element, [aClass.getChildClass(childAss).getEntityClassName()/].class)) + .peek(element -> element.set[aClass.getChildClass(childAss).getTheParentPropertyName(childAss).toUpperFirst()/]([aClass.getEntityClassName().toLowerFirst()/]ToInsert)) + .collect(Collectors.toList()); + [aClass.getEntityClassName().toLowerFirst()/]ToInsert.set[aClass.getTheChildPropertyName(childAss).toUpperFirst()/]([aClass.getTheChildPropertyName(childAss).toLowerFirst()/]s); + [/for] + return [aClass.getEntityClassName().toLowerFirst()/]ToInsert; +} +[/template] + + +[template public genUpdate(aClass:Class, aModel: Model)] +/** + * {@code PUT /[aClass.getDashedEntityClassName()/]} : Updates an existing [aClass.getEntityClassName()/]. + * + * @param [aClass.getEntityClassName()/] the [aClass.getEntityClassName()/] to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated [aClass.getEntityClassName()/], + * or with status {@code 400 (Bad Request)} if the [aClass.getEntityClassName()/] is not valid, + * or with status {@code 500 (Internal Server Error)} if the [aClass.getEntityClassName()/] couldn't be updated. + */ +@PutMapping +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'UPDATE', aModel)/] +public ResponseEntity update(@Valid @RequestBody BaseRequest<[getEntityWriteDtoClassName(aClass)/]> request) { + return toResponseEntity(Optional.of([getServiceClassName(aClass).toLowerFirst()/].bulkUpdate(modelMapper.map(request.getData(),[getEntityClassName(aClass)/].class))), null, HttpStatus.OK); +} +[/template] + + + + + +[template public genDeleteByID(aClass : Class, aModel: Model)] +/** + * {@code DELETE /[aClass.getDashedEntityClassName()/]/:objectKey} : delete the [aClass.getDashedEntityClassName()/] with given objectKey. + * + * @param objectKey the objectKey of the [(aClass.getEntityClassName())/] to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ +@DeleteMapping("/{objectKey:.+}") +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'DELETE', aModel)/] +public ResponseEntity delete(@PathVariable String objectKey) { + [getServiceClassName(aClass).toString().toLowerFirst()/].deleteById([getServiceClassName(aClass).toString().toLowerFirst()/].findByObjectKey(objectKey).get().get[getClassIdName(aClass).toString().toUpperFirst()/]()); + return new ResponseEntity<>(new BaseResponse<>(objectKey), HttpStatus.OK); +} +[/template] + + +[template public genToResponseEntity(aClass : Class)] +private ResponseEntity> toResponseEntity(Optional<[aClass.getEntityClassName()/]> maybeResponse, HttpHeaders header,HttpStatus status) { + return maybeResponse.map(response ->new ResponseEntity<>(new BaseResponse<>([getAssemblerClassName(aClass).toLowerFirst()/].toModel(response)),header,status) + ).orElseThrow(() -> new NotFoundException([getEntityClassName(aClass)/].class,new Locale("it"))); +} +[/template] + +[template public genToResponseEntityPaged(aClass : Class)] +private ResponseEntity>> toResponseEntityPaged(Page<[getEntityClassName(aClass)/]> list, HttpHeaders header) { + BaseResponse> collModel =new BaseResponse<>(pagedResourcesAssembler.toModel(list, [getAssemblerClassName(aClass).toLowerFirst()/])); + return ResponseEntity.ok().headers(header).body(collModel); + } +[/template] + +[template public genDtoToEntity(aClass: Class)] +@SuppressWarnings("unused") +private [getEntityClassName(aClass)/] dtoToEntity([getDtoClassName(aClass)/] dto) { + return new ModelMapper().map(dto, [getEntityClassName(aClass)/].class); +} +[/template] + +[template public genGetByParentId(aClass: Class, aModel: Model)] +[for(parentAss: Association | getParentAssociations(aClass))] +/** + * GET /[camelToDash(aClass.getTheParentPropertyName(parentAss))/]_id: Search all [aClass.name/] for the given [aClass.getParentClass(parentAss).getEntityClassName()/] (parent) + * + * @param OK of [aClass.getParentClass(parentAss).getEntityClassName()/] + * @param pageable + * @return Page of [aClass.name/] for the given [aClass.getParentClass(parentAss).getEntityClassName()/] (parent) + */ +@GetMapping("/findBy[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]/{[getEntityClassName(aClass.getParentClass(parentAss)).toString().toLowerFirst()/]ObjectKey:.+}") +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'FIND_BY_'.concat(camelToUnderscore(aClass.getParentPropertyName(parentAss)).toUpperCase()), aModel)/] +public ResponseEntity>> findBy[aClass.getParentPropertyName(parentAss).toUpperFirst()/](@PathVariable String [getEntityClassName(aClass.getParentClass(parentAss)).toString().toLowerFirst()/]ObjectKey, Pageable pageable) { + [getEntityClassName(aClass.getParentClass(parentAss))/] key = new [getEntityClassName(aClass.getParentClass(parentAss))/]([getEntityClassName(aClass.getParentClass(parentAss)).toString().toLowerFirst()/]ObjectKey); + return toResponseEntityPaged([getServiceClassName(aClass).toLowerFirst()/].findBy[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/](key, pageable), null); +} +[/for] +[/template] + +[** + * Print an PDF report. + * @author: Fabio Memoli +*/] +[template public genPrintPdfReport(aClass : Class, aModel: Model)] +[if(aClass.isReportEnabled(aModel))] +/** + * GET: /pdf/{objectKey:.+}: Print PDF for [getEntityClassName(aClass)/] by object key. + * @param objectKey + * @return PDF document or null. + */ +@ResponseBody +@GetMapping(value = "/pdf/{objectKey:.+}", produces = "application/pdf") +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'PDF_REPORT', aModel)/] +public ResponseEntity printPdfReport(@PathVariable String objectKey) throws BusinessException { + return super.generateJasperReportPdf([getServiceClassName(aClass).toLowerFirst()/].printPdfReport(objectKey)); +} +[/if] +[/template] + +[** + * Generate api method to find elements by parent class id + * @author Vittorio Niespolo +*/] +[template public genGetChildByObjectKey(aClass : Class, aModel: Model){childAssociation : Collection(OclAny) = aClass.getChildAssociations();}] +[for(childAss : Association | childAssociation)] +/** + * GET /id/[camelToDash(aClass.getChildClass(childAss).getEntityClassName())/]: Search all [aClass.getChildClass(childAss).getEntityClassName()/] (childs) for the given [aClass.getEntityClassName()/] + * + * @param objectKey ObjectKey of [aClass.getEntityClassName()/] + * @param pageable + * @return Page of [aClass.getChildClass(childAss).getEntityClassName()/] for the given [aClass.getEntityClassName()/] + */ +@GetMapping("/{objectKey:.+}/[camelToDash(aClass.getChildEntityName(childAss))/]") +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'FIND_BY_'.concat(camelToUnderscore(aClass.getTheChildPropertyName(childAss)).toUpperCase()).concat('_OBJECT_KEY'), aModel)/] +public ResponseEntity> get[aClass.getTheChildPropertyName(childAss).toUpperFirst()/]ByObjectKey(@PathVariable String objectKey, Pageable pageable) { + [aClass.getEntityClassName()/] [aClass.getEntityClassName().toLowerFirst()/] = new [aClass.getEntityClassName()/](); + [aClass.getEntityClassName().toLowerFirst()/].setObjectKey(objectKey); + return ResponseEntity.ok().body([aClass.getChildClass(childAss).getEntityClassName().toLowerFirst()/]Service.findBy[aClass.getChildClass(childAss).getTheParentPropertyName(childAss).toUpperFirst()/]([aClass.getEntityClassName().toLowerFirst()/], pageable)); +} +[/for] +[/template] + +[template public genConstructor(aClass: Class)] +public [aClass.getControllerClassName()/]( +[getServiceClassName(aClass)/] [getServiceClassName(aClass).toString().toLowerFirst()/], +[getAssemblerClassName(aClass)/] [getAssemblerClassName(aClass).toString().toLowerFirst()/], +PagedResourcesAssembler<[getEntityClassName(aClass)/]> pagedResourcesAssembler, +ModelMapper modelMapper, +[for(c:Class| aClass.getChildClassesNoDup()) separator (',')] +[if((getServiceClassName(c).toString().equalsIgnoreCase(getServiceClassName(aClass)))._not())] +[getServiceClassName(c)/] [getServiceClassName(c).toString().toLowerFirst()/][/if][/for] +) { + this.[getServiceClassName(aClass).toString().toLowerFirst()/] = [getServiceClassName(aClass).toString().toLowerFirst()/]; + this.[getAssemblerClassName(aClass).toString().toLowerFirst()/] = [getAssemblerClassName(aClass).toString().toLowerFirst()/]; + this.pagedResourcesAssembler = pagedResourcesAssembler ; + this.modelMapper = modelMapper; +[for(c:Class| aClass.getChildClassesNoDup())] +[if((getServiceClassName(c).toString().equalsIgnoreCase(getServiceClassName(aClass)))._not())] + this.[getServiceClassName(c).toString().toLowerFirst()/] = [getServiceClassName(c).toString().toLowerFirst()/];[/if] +[/for] +} +[/template] + +[template public genPostConstructor(aClass: Class)] +@PostConstruct +public void postConstruct(){ +[if(aClass.hasChilds())] +modelMapper.addMappings(new PropertyMap<[aClass.getWriteDtoName()/], [aClass.getEntityClassName()/]>() { + @Override + protected void configure() { + [for(childAss: Association | aClass.getChildAssociations())] + skip(destination.get[aClass.getTheChildPropertyName(childAss).toUpperFirst()/]()); + [/for] + } +}); +[/if] +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/fileNameUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/fileNameUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..1fea0399c9228560af9beab3db4f1caa59b7c99d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/fileNameUtils.mtl @@ -0,0 +1,207 @@ +[comment encoding = UTF-8 /] +[module fileNameUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtilsSandBox/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils/] + +[comment][template public getPomMSModelFileName(microservice : Component)] +[getMicroServiceModelModuleFolder().concat('/pom.xml')/] +[/template][/comment] + +[template public getRootPomFileName(oclAny : OclAny)] +[getRootFolderName().concat('/pom.xml')/] +[/template] + +[template public getMSPomFileName(microService : Component)] +[getMicroServiceFolder().concat('/pom.xml')/] +[/template] + +[template public getDockerFileName(component : Component, isMs : Boolean)] +[if(isMs)] +[getMicroServiceFolder(component).concat('/Dockerfile')/] +[else] +[getMsGateWayFolder().concat('/Dockerfile')/] +[/if] +[/template] + +[template public getDockerFileFeBaseName(oclAny: OclAny)] +[getFEFolder().concat('/DockerfileFeBase')/] +[/template] + +[template public getDockerFileFeName(oclAny: OclAny)] +[getFEFolder().concat('/Dockerfile')/] +[/template] + +[template public getStartScriptGatewayFileName(component : Component)] +[getMsGateWayFolder(component).concat('/s_start.sh')/] +[/template] + +[template public getStartScriptMSFileName(component : Component)] +[getMicroServiceFolder(component).concat('/s_start.sh')/] +[/template] + +[template public getDockerComposeFileName(oclAny: OclAny)] +[getRootFolderName().concat('/docker-compose.yml')/] +[/template] + +[template public getDockerPullFileName(oclAny: OclAny)] +[getRootFolderName().concat('/docker-pull.yml')/] +[/template] + +[template public getDockerFileMysqlName(oclAny: OclAny)] +[getRootFolderName().concat('/DockerfileMysql')/] +[/template] + +[template public getDockerPushFileName(oclAny: OclAny)] +[getRootFolderName().concat('/docker-push.yml')/] +[/template] + +[template public getBuildNdeployFileName(oclAny: OclAny)] +[getRootFolderName().concat('/buildNdeploy.bat')/] +[/template] + +[template public getKeycloalInitSQL(oclAny: OclAny)] +[getRootFolderName().concat('/init').concat('/01.sql')/] +[/template] + +[template public getMSModelPomFileName(microService : Component)] +[getMicroServiceModelModuleFolder().concat('/pom.xml')/] +[/template] + +[template public getBEPomFileName(oclAny:OclAny)] +[getBEFolder().concat('/pom.xml')/] +[/template] + +[template public getFEPomFileName(oclAny:OclAny)] +[getFEFolder().concat('/pom.xml')/] +[/template] + +[template public getMainGeneratorFileName(microService : Component)] +[getMicroServiceMainsFolder(microService).concat('/MainGenerator.java')/] +[/template] + +[template public getPropertyFileNameForMS(microService : Component)] +[getMicroServicePropertyFolder().concat('/voila2-default.properties')/] +[/template] + +[comment]questo metodo viene usato per modificare il pom padre dopo che il figlio ha generato dal suo main nuovi moduli +I moduli sono statici ( core,model,web,impl)[/comment] +[template public getMSGeneratedPomFileName(oclAny:OclAny)] +[getArtifact().concat('/pom.xml')/] +[/template] + +[template public getLibsPomFileName(oclAny:OclAny)] +[getMsLibsFolder().concat('/pom.xml')/] +[/template] + +[template public getLibsCorePomFileName(oclAny:OclAny)] +[getMsLibsCoreFolder().concat('/pom.xml')/] +[/template] + +[template public getLibsWebPomFileName(oclAny:OclAny)] +[getMsLibsWebFolder().concat('/pom.xml')/] +[/template] + +[template public getLibsImplPomFileName(oclAny:OclAny)] +[getMsLibsImplFolder().concat('/pom.xml')/] +[/template] + +[template public getGatewayPomFileName(oclAny:OclAny)] +[getMsGateWayFolder().concat('/pom.xml')/] +[/template] + +[template public getGatewayAppFileName(oclAny:OclAny)] +[getInnerGatewayFolderName().concat('/').concat(getCleanArtifact().toUpperFirst().concat('GatewayApplication.java'))/] +[/template] + +[template public getGatewayAppTestFileName(oclAny:OclAny)] +[getTestInnerGatewayFolderName().concat('/').concat(getCleanArtifact().toUpperFirst().concat('GatewayApplicationTests.java'))/] +[/template] + +[template public getGatewayAppYMLFileName(oclAny:OclAny)] +[getGatewayResourceFolder().concat('/application.yml')/] +[/template] + +[template public getGatewayAppConfigFileName(oclny:OclAny)] +[getGatewayConfigFolderName().concat('/AppConfiguration.java')/] +[/template] + +[template public getTrackingPostFilterFileName(oclany:OclAny)] +[getGatewayFilterFolderName().concat('/CorrelationTrackingPostFilter.java')/] +[/template] + +[template public getTrackingPreFilterFileName(oclAny:OclAny)] +[getGatewayFilterFolderName().concat('/CorrelationTrackingPreFilter.java')/] +[/template] + +[template public getFilterEnumFileName(oclAny:OclAny)] +[getGatewayFilterFolderName().concat('/FilterOrderType.java')/] +[/template] + +[template public getFEMicroServiceFileName(microService : Component)] +[getFEMSFolder(microService).concat('/ciao.txt')/] +[/template] + +[template public getPagesRoutingFileName(oclAny : OclAny)] +[getFEAppPagesFolder().concat('pages-routing.module.ts')/] +[/template] + +[template public getSideBarLeftFileName(oclAny : OclAny)] +[getFESidebarLeftFolder().concat('sidebar-left.component.ts')/] +[/template] + +[template public getTranslateConfigFileName(oclAny : OclAny)] +[getFEAppFolder().concat('translate.config.ts')/] +[/template] + +[template public getRelativeWebJarFileNameMs(component : Component)] +modules/[getArtifact().concat('-').concat(component.getMsName()).concat('-web').concat('/target/').concat(getArtifact().concat('-').concat(component.getMsName())).concat('.jar')/] +[/template] + +[template public getRelativeGatewayJarFileNameMs(component : Component)] +[('target/').concat(getArtifact().concat('-').concat(component.name.toLowerFirst())).concat('.jar')/] +[/template] + +[template public getMsFePomFileName(microService : Component)] +[getFEAppPagesFolder().concat('/').concat(getArtifact()).concat('-').concat(getMsName(microService)).concat('-fe').concat('/pom.xml')/] +[/template] + +[template public getMsPrivilegeFileName(oclAny : OclAny)] +[getRootFEFolderName().concat('/privilege.enum.ts')/] +[/template] + +[template public getDockerPrometheusGrafanaFileName(oclAny : OclAny)] +[getPrometheusGrafanaFolder().concat('/docker-compose.yml')/] +[/template] + +[template public getPrometheusDockerFileName(oclAny : OclAny)] +[getPrometheusFolder().concat('prometheus.yml')/] +[/template] + +[template public getGrafanaIniFileName(oclAny : OclAny)] +[getGrafanaFolder().concat('grafana.ini')/] +[/template] + +[template public getPrivilegeFileName(oclAny : OclAny)] +[getFEAppFolder().concat('security/privilege.ts')/] +[/template] + +[template public getSecurityConfigFileName(oclAny : OclAny)] +[getFEAppFolder().concat('security/security.config.ts')/] +[/template] + +[template public getManifestFileName(microService: Component)] +[getMicroServiceMetaInfFolder(microService).concat('/MANIFEST.MF')/] +[/template] + +[template public getMapperConfigGeneralFileName(oclAny : OclAny)] +[getFEAppFolder().concat('mapper.config.ts')/] +[/template] + +[template public getRewriteConfigFileName(oclAny: OclAny)] +[getFEFolder().concat('/rewrite.config')/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/folderUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/folderUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..d0fc48a2379ef40d0933c1f9457f4af5a3581070 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/folderUtils.mtl @@ -0,0 +1,254 @@ +[comment encoding = UTF-8 /] +[module folderUtils('http://www.eclipse.org/uml2/2.2.0/GenModel', 'http://www.eclipse.org/uml2/5.0.0/Types', 'http://www.eclipse.org/uml2/5.0.0/UML', 'http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard')] + +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::common::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::angular::generalUtils/] + + + + +[template public getBEFolder(dummy: OclAny)] +[getArtifact().concat('/modules/').concat(getArtifact().concat('-be'))/] +[/template] + +[template public getMicroServiceFolder(microservice: Component)] +[getBEFolder().concat('/').concat(getArtifact().concat('-ms-')).concat(microservice.getMicroServiceName())/] +[/template] + +[template public getMSFolderForDocker(microservice : Component)] +[getBEFolder().concat('/').concat(getArtifact().concat('-ms-')).concat(microservice.getMicroServiceName())/] +[/template] + +[template public getMSFolderForDockerBuildContext(microservice : Component)] +[('modules/').concat(getArtifact().concat('-be/')).concat(getArtifact().concat('-ms-')).concat(microservice.getMicroServiceName())/] +[/template] + +[template public getGatewayFolderForDockerBuildContext(microservice : Component)] +[('modules/').concat(getArtifact().concat('-be/')).concat(getArtifact()).concat('-').concat(microservice.getMicroServiceName())/] +[/template] + +[template public getMicroServiceModelModuleFolder(microservice:Component)] +[getMicroServiceFolder().concat('/modules/').concat(getArtifact().concat('-ms-').concat(microservice.getMicroServiceName()).concat('-model'))/] +[/template] + +[template public getMicroServiceMainsFolder(microService:Component)] +[getMicroServiceModelModuleFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/').concat('/').concat(microService.getMicroServiceName()).concat('/model'))/] +[/template] + +[template public getMsLibsFolder(oclany:OclAny)] +[getBEFolder().concat('/').concat(getArtifact().concat('-libs'))/] +[/template] + +[template public getMsGateWayFolder(dummy:OclAny)] +[getBEFolder().concat('/').concat(getArtifact().concat('-gateway'))/] +[/template] + +[template public getInnerGatewayFolderName(oclAny:OclAny)] +[getMsGateWayFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/gateway')/] +[/template] + +[template public getTestInnerGatewayFolderName(oclAny:OclAny)] +[getMsGateWayFolder().concat('/src/test/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/gateway')/] +[/template] + +[template public getGatewayResourceFolder(oclAny:OclAny)] +[getMsGateWayFolder().concat('/src/main/resources/')/] +[/template] + +[template public getGatewayConfigFolderName(oclAny:OclAny)] +[getMsGateWayFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/gateway/config')/] +[/template] + +[template public getGatewayFilterFolderName(oclAny:OclAny)] +[getMsGateWayFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/gateway/filter')/] +[/template] + +[template public getMsEntityFolderName(oclAny:OclAny)] +[getMsLibsCoreFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/entity/')/] +[/template] + +[template public getLibsUtilitiesFolderName(oclAny:OclAny)] +[getMsLibsCoreFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/utilities/')/] +[/template] + +[template public getLibsConverterFolderName(oclAny : OclAny)] +[getMsLibsWebFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/converter/')/] +[/template] + +[template public getLibsFilterFolderName(oclAny : OclAny)] +[getMsLibsWebFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/filter/')/] +[/template] + +[template public getMsServiceFolderName(oclAny : OclAny)] +[getMsLibsCoreFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/service/')/] +[/template] + +[template public getMsRepositoryFolderName(oclAny:OclAny)] +[getMsLibsCoreFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/repository/')/] +[/template] + +[template public getMsServiceImplFolderName(oclAny:OclAny)] +[getMsLibsImplFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/service/')/] +[/template] + +[template public getMsControllerFolderName(oclAny:OclAny)] +[getMsLibsWebFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/controller/')/] +[/template] + +[template public getMsLibsCoreFolder(oclAny:OclAny)] +[getMsLibsFolder().concat('/').concat(getArtifact().concat('-libs-core'))/] +[/template] + +[template public getMsLibsImplFolder(oclAny:OclAny)] +[getMsLibsFolder().concat('/').concat(getArtifact().concat('-libs-impl'))/] +[/template] + +[template public getMsLibsWebFolder(oclAny:OclAny)] +[getMsLibsFolder().concat('/').concat(getArtifact().concat('-libs-web'))/] +[/template] + +[template public getMicroServicePropertyFolder(microService: Component)] +[getMicroServiceModelResourcesFolder().concat('properties')/] +[/template] + +[template public getMicroServiceModelResourcesFolder(microService: Component)] +[getMicroServiceModelModuleFolder().concat('/src/main/resources/')/] +[/template] + +[template public getBaseDTOFolderName(oclAny:OclAny)] +[getMsLibsWebFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/dto/')/] +[/template] + +[template public getLibsCoreFolderName(oclAny:OclAny)] +[getArtifact().concat('-libs-core')/] +[/template] + +[template public getLibsWebFolderName(oclAny:OclAny)] +[getArtifact().concat('-libs-web')/] +[/template] + +[template public getLibsImplFolderName(oclAny:OclAny)] +[getArtifact().concat('-libs-impl')/] +[/template] + +[template public getLibsFolderName(oclAny:OclAny)] +[getArtifact().concat('-libs')/] +[/template] + +[template public getLibsCoreResourceFolder(oclAny:OclAny)] +[getMsLibsCoreFolder().concat('/src/main/resources')/] +[/template] + +[template public getLibsWebResourceFolder(oclAny:OclAny)] +[getMsLibsWebFolder().concat('/src/main/resources/')/] +[/template] + +[template public getLibsImplResourceFolder(oclAny:OclAny)] +[getMsLibsImplFolder().concat('/src/main/resources/')/] +[/template] + +[template public getGroupFirstForFolder(oclAny:OclAny){sequenza : Sequence(String) = getGroupName().toString().tokenize('.');}] +[sequenza->at(1)/] +[/template] + +[template public getGroupSecondForFolder(oclAny:OclAny) {sequenza : Sequence(String) = getGroupName().toString().tokenize('.');}] +[sequenza->at(2)/] +[/template] + +[template public getBaseAssemblerFolderName(oclAny:OclAny)] +[getMsLibsWebFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/assembler/')/] +[/template] + + + +[template public getResponseLibsFolderName(oclAny:OclAny)] +[getMsLibsCoreFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/response/')/] +[/template] + +[template public getExceptionLibsFolderName(oclAny:OclAny)] +[getMsLibsCoreFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/exception/')/] +[/template] + +[template public getRequestLibsFolderName(oclAny:OclAny)] +[getMsLibsCoreFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/request/')/] +[/template] + +[template public getResponseWebLibsFolderName(oclAny:OclAny)] +[getMsLibsWebFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/response/')/] +[/template] + +[template public getFEMicroServiceFolderName(microService : Component)] +[getRootFEFolderName().concat('/').concat(getArtifact().concat('-ms-').concat(microService.getMicroServiceName()).concat('-fe'))/] +[/template] + +[comment]ANGULAR[/comment] +[template public getRootFEFolderName(oclAny : OclAny)] +[getArtifact().toLowerCase()/]-fe +[/template] + +[template public getEntityMSFEFolder(aClass : Class)] +[getRootFEFolderName().concat('/').concat(aClass.getDashedEntityClassName())/] +[/template] + +[template public getFEAppFolder(oclAny : OclAny)] +[getFEFolder().concat('/src/app/')/] +[/template] + +[template public getFESrcFolder(oclAny : OclAny)] +[getFEFolder().concat('/src/')/] +[/template] + +[template public getIndexFileName(oclAny : OclAny)] +[getFESrcFolder().concat('/index.html')/] +[/template] + +[template public getFEAppPagesFolder(oclAny : OclAny)] +[getFEAppFolder().concat('pages/')/] +[/template] + +[template public getFELayoutFolder(oclAny :OclAny)] +[getFEAppFolder().concat('layout/')/] +[/template] + +[template public getFESidebarLeftFolder(oclAny : OclAny)] +[getFELayoutFolder().concat('sidebar-left/')/] +[/template] + +[template public getFEFolder(dummy : OclAny)] +[getArtifact().concat('/modules/').concat(getArtifact().toLowerCase().concat('-fe'))/] +[/template] + +[template public getFEMSFolder(microService : Component)] +[getFEFolder().concat('/src/app/pages/').concat(getArtifact().concat('-ms-').concat(microService.getMicroServiceName()).concat('-fe'))/] +[/template] + +[template public getLibsSecurityFolderName(oclAny:OclAny)] +[getMsLibsWebFolder().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/libs/security/')/] +[/template] + +[template public getFESecurityFolder(oclAny : OclAny)] +[getFEAppFolder().concat('security/')/] +[/template] + +[template public getPrometheusGrafanaFolder(oclAny : OclAny)] +[getArtifact().concat('/prometheus-grafana/')/] +[/template] + +[template public getPrometheusFolder(oclAny : OclAny)] +[getPrometheusGrafanaFolder().concat('prometheus/')/] +[/template] + +[template public getGrafanaFolder(oclAny : OclAny)] +[getPrometheusGrafanaFolder().concat('grafana/')/] +[/template] + +[template public getMicroServiceMetaInfFolder(microService:Component)] +[getMicroServiceModelModuleFolder(microService).concat('/META-INF')/] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/folderUtilsSandBox.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/folderUtilsSandBox.mtl new file mode 100644 index 0000000000000000000000000000000000000000..30a0a9a4e3029fb29889cf2a4884f83e40dedc7b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/folderUtilsSandBox.mtl @@ -0,0 +1,32 @@ +[module folderUtilsSandBox('http://www.eclipse.org/uml2/2.2.0/GenModel', 'http://www.eclipse.org/uml2/5.0.0/Types', 'http://www.eclipse.org/uml2/5.0.0/UML', 'http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard')] + +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] + + +[template public getModulesFolder(oclAny:OclAny)] +[getArtifact().concat('/modules')/] +[/template] + +[template public getCoreModuleFolder(oclAny:OclAny)] +[getModulesFolder().concat('/').concat(getCoreModuleName())/] +[/template] + +[template public getImplModuleFolder(oclAny:OclAny)] +[getModulesFolder().concat('/').concat(getImplModuleName())/] +[/template] + +[template public getImplResourcesFolder(oclAny:OclAny)] +[getImplModuleFolder().concat('/src/main/resources')/] +[/template] + +[template public getWebModuleFolder(oclAny:OclAny)] +[getModulesFolder().concat('/').concat(getWebModuleName())/] +[/template] + +[template public getModelModuleFolder(oclAny:OclAny)] +[getModulesFolder().concat('/').concat(getModelModuleName())/] +[/template] + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/mainGeneratorUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/mainGeneratorUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..34af7378d694c1aadde940cc55bfe83ce205c21c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/mainGeneratorUtils.mtl @@ -0,0 +1,32 @@ +[module mainGeneratorUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::properties /] + + +[template public getPackageForMainGenerator(artifactId : String, microService : Component)] +[getBasePackageName()/].[microService.getMicroServiceName()/].model +[/template] + +[template public getModuleFileNameForMainGenerator(artifactId : String , microService : Component)] +/[getBasePackageNameAsFolder()/]/[microService.getMicroServiceName()/]/model/main +[/template] + +[template public getJavaImportsForMainGenerator(oclAny:OclAny)] +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +[/template] + +[template public getEclipseImportsForMainGenerator(oclAny:OclAny)] +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +[/template] + +[template public getAcceleoImportsForMainGenerator(oclAny:OclAny)] +import it.mice.voila2.acceleogenerator.core.Main; +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/microserviceUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/microserviceUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..f68b56b2514de0d50e94ee7495434f9458fccbca --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/microserviceUtils.mtl @@ -0,0 +1,52 @@ +[comment encoding = UTF-8 /] +[module microserviceUtils('http://www.eclipse.org/uml2/2.2.0/GenModel', 'http://www.eclipse.org/uml2/5.0.0/Types', 'http://www.eclipse.org/uml2/5.0.0/UML', 'http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard')] + +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::microServiceUtils/] + +[template public getMicroServiceName(aComponent:Component)] +[aComponent.name.toLowerCase()/] +[/template] + +[comment]Metodo per ottenere la token value pairs variable @SECURITY_NAME@ [/comment] +[template public getSecurityMsName(aModel : Model) post(trim())] +[getSecurityMSName(aModel).toString().toLowerFirst()/] +[/template] + +[query public isMicroserviceInCategory(category : String) : Boolean + = getCategory() = category +/] + +[query public isSecurityMicroservice(oclAny: OclAny) : Boolean + = isMicroserviceInCategory('security') +/] + +[query public isNotificationMicroservice(oclAny: OclAny) : Boolean + = isMicroserviceInCategory('notification') +/] + +[query public isDemoMicroservice(oclAny: OclAny) : Boolean + = isMicroserviceInCategory('demo') +/] + +[query public isBusinessMicroservice(oclAny: OclAny) : Boolean + = isMicroserviceInCategory('business') +/] + +[query public isAttachmentMicroservice(oclAny: OclAny) : Boolean + = isMicroserviceInCategory('attachment') +/] + +[query public microserviceHasPersistenceType(persistenceType : String) : Boolean + = getPersistenceType() = persistenceType +/] + +[query public isSqlMicroservice(oclAny: OclAny) : Boolean + = microserviceHasPersistenceType('sql') +/] + +[query public isNoSqlMicroservice(oclAny: OclAny) : Boolean + = microserviceHasPersistenceType('noSql') +/] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/modelAssemblerUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/modelAssemblerUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..6ba9be661e8abf18940adc72a8cf12fa11834b73 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/modelAssemblerUtils.mtl @@ -0,0 +1,94 @@ +[module modelAssemblerUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] + +[comment]Genera i link per il gateway per tutte le entità padri della classe[/comment] +[template public genParentAssemblerLinks(aClass: Class)] +[for(parentAss : Association | aClass.getParentAssociations())] +if([aClass.getEntityClassName().toLowerFirst()/].get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]() != null) { +[comment]if([aClass.getEntityClassName().toLowerFirst()/].getThe[getEntityClassName(aClass.getParentClass(parentAss))/]() != null) { [/comment] + Link [getEntityClassName(aClass.getParentClass(parentAss)).toLowerFirst()/]Link = convert(linkTo(methodOn([getControllerClassName(aClass.getParentClass(parentAss))/].class).getByObjectKey([getEntityClassName(aClass).toLowerFirst()/].get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey())).withRel("[aClass.getTheParentPropertyName(parentAss).toLowerFirst()/]")); +[comment].getById([aClass.getEntityClassName().toString().toLowerFirst()/].getThe[getEntityClassName(aClass.getParentClass(parentAss)).toString()/]().getObjectKey())).withRel("the[getEntityClassName(aClass.getParentClass(parentAss))/]"));[/comment] + [aClass.getDtoClassName().toLowerFirst()/].add([getEntityClassName(aClass.getParentClass(parentAss)).toString().toLowerFirst()/]Link); + } +[/for] +[/template] + +[comment]Genera i link per il gateway per tutte le entità(classi) figlie della classe[/comment] +[template public genChildrenAssemblerLinks(aClass : Class)] +[for(childAss : Association | aClass.getChildAssociations())] +if([aClass.getEntityClassName().toLowerFirst()/].get[aClass.getTheChildPropertyName(childAss).toUpperFirst()/]() != null) { +[comment]if([aClass.getEntityClassName().toLowerFirst()/].getThe[getEntityClassName(aClass.getChildClass(childAss))/]() != null){[/comment] + Link [getEntityClassName(aClass.getChildClass(childAss)).toString().toLowerFirst()/]Link = convert(linkTo(methodOn([getControllerClassName(aClass.getChildClass(childAss))/].class).findBy[aClass.getChildClass(childAss).getParentPropertyName(childAss)/]([aClass.getEntityClassName().toString().toLowerFirst()/].getObjectKey(), null)).withRel("[aClass.getTheChildPropertyName(childAss).toLowerFirst()/]")); + [aClass.getDtoClassName().toLowerFirst()/].add([getEntityClassName(aClass.getChildClass(childAss)).toString().toLowerFirst()/]Link); +} +[/for] +[/template] + +[comment]Genera link per tutte le classi padri dei (modelli) microservizi esterni importati nel modello della classe + Esempio : se nel mio ms gestisco gli ordini e ho un ms che genera il report degli ordini per tutti i clienti(gestiti da un altro ms) + allora ms ordine importa ms cliente (che da Papyrus è gestita come un'assocazione) SOLO a livello link e non a livello di entità + per comunicare col ms cliente (na cos' e chest)[/comment] +[template public genParentAssemblerLinksImportedMs(aClass: Class)] +[for(parentAss : Association | aClass.getParentAssFromImportedModels())] +if ([aClass.getEntityClassName().toLowerFirst()/].getThe[getEntityClassName(aClass.getParentClass(parentAss))/]ObjectKey() != null) { + Link [getEntityClassName(aClass.getParentClass(parentAss))/]Link = getLink("[aClass.getParentClass(parentAss).getModel().name.toString()/]", "[aClass.getParentClass(parentAss).getEntityClassName()/]", ([aClass.getEntityClassName().toLowerFirst()/].get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey()), LinkRelation.of("the[getEntityClassName(aClass.getParentClass(parentAss))/]")); + [getDtoClassName(aClass).toLowerFirst()/].add([getEntityClassName(aClass.getParentClass(parentAss))/]Link); +} +[/for] +[/template] + +[comment]Genera link per tutte le classi figli dei (modelli) microservizi esterni importati nel modello della classe[/comment] +[template public genChildrenAssemblerLinksImportedMs(aClass: Class)] +[for(childAss : Association | aClass.getChildAssFromImportedModels())] +if ([aClass.getEntityClassName()/].getThe[getEntityClassName(aClass.getChildClass(childAss))/]ObjectKey() != null) { + Link [getEntityClassName(aClass.getChildClass(childAss))/]Link = getLink("[aClass.getParentClass(childAss).getModel().name.toString()/]", "[aClass.getChildClass(childAss).getEntityClassName()/]", ([aClass.getEntityClassName().toLowerFirst()/].get[aClass.getTheParentPropertyName(childAss).toUpperFirst()/]ObjectKey()), LinkRelation.of("the[getEntityClassName(aClass.getChildClass(childAss))/]")); + [getDtoClassName(aClass).toLowerFirst()/].add([getEntityClassName(aClass.getChildClass(childAss))/]Link); +} +[/for] +[/template] + +[template public genToModel(aClass : Class)] +@Override +public [getDtoClassName(aClass)/] toModel([getEntityClassName(aClass)/] [getEntityClassName(aClass).toString().toLowerFirst()/]) { + [getDtoClassName(aClass)/] [getDtoClassName(aClass).toString().toLowerFirst()/] = map([getEntityClassName(aClass).toString().toLowerFirst()/], [getDtoClassName(aClass)/].class,[getControllerClassName(aClass)/].class); + + // SELF LINK + Link selfLink = convert(linkTo(methodOn([getControllerClassName(aClass)/].class).getByObjectKey([getEntityClassName(aClass).toString().toLowerFirst()/].getObjectKey())).withSelfRel()); + [getDtoClassName(aClass).toString().toLowerFirst()/].add(selfLink); + + //PARENT LINKS + [if(aClass.hasParents())] + [genParentAssemblerLinks(aClass)/] + [/if] + + //CHILDREN LINKS + [if(aClass.hasChilds())] + [genChildrenAssemblerLinks(aClass)/] + [/if] + + //PARENTS LINKS FOR IMPORTED MS + [genParentAssemblerLinksImportedMs(aClass)/] + + + //CHILDREN LINKS FOR IMPORTED MS + [genChildrenAssemblerLinksImportedMs(aClass)/] + + return [getDtoClassName(aClass).toString().toLowerFirst()/]; + + } +[/template] + +[template public genToCollectionModel(aClass : Class)] +@Override +public CollectionModel<[getDtoClassName(aClass)/]> toCollectionModel(Iterable entities) { + CollectionModel<[getDtoClassName(aClass)/]> collectionEntities = super.toCollectionModel(entities); + // collectionEntities.add(linkTo(methodOn(OrdineController.class).findPaginated(null, null)).withSelfRel()); + + return collectionEntities; + } +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/pomUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/pomUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..33d021f9dffec47dedaccc89929df2202171990b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/pomUtils.mtl @@ -0,0 +1,517 @@ +[comment encoding = UTF-8 /] +[module pomUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::microservice::propertiesUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] + +[template public getRootPomModules(artifactId : String, aModel: Model)] +[if(isFrontEndGenerationEnabled(aModel))] +modules/[artifactId/]-fe +[/if] +modules/[artifactId/]-be +modules/[artifactId/]-model +[/template] + +[template public getFEPomModules(aModel:Model, artifactId : String)] +[for (microservice : Component | aModel.getMicroservices())] +src/app/pages/[artifactId/]-ms-[microservice.getMicroServiceName()/]-fe +[/for] +[/template] + +[template public getBEPomModules(artifactId: String , aModel:Model)] +[if(isGatewayGenerationEnabled(aModel))] +[artifactId/]-gateway +[/if] +[artifactId/]-libs +[for (microservice : Component | aModel.getMicroservices())] +[artifactId/]-ms-[microservice.getMicroServiceName()/] +[/for] +[/template] + +[template public getMSPomModules(artifactId : String , microService : Component)] +modules/[artifactId/]-ms-[microService.getMicroServiceName()/]-model +[/template] + +[comment]Questo metodo viene usato all'interno del ms dopo aver generato dal suo main[/comment] +[template public getMSGeneratedPomModules(artifactId: String)] +modules/[artifactId/]-model + modules/[artifactId/]-core + modules/[artifactId/]-web + modules/[artifactId/]-impl +[/template] + +[template public getParentModuleForMs(oclAny:OclAny)] +[getRootArtifactId()/]-be +[/template] + + +[template public getMSModelPomModules(artifactId: String)] + +[/template] + +[comment]Il root non deve avere come padre springboot altrimenti si sostituisce ai runtime[/comment] +[template public getPadreForRoot(oclAny:OclAny)] +[/template] + +[template public getPadreForMsFe(oclAny: OclAny)] +[getGAVP(getGroupName(),getArtifactForFE(),getVersion(),'../../../../pom.xml')/] +[/template] + +[template public getPadreForRoot1(oclAny:OclAny)] +[getGAV('org.springframework.boot', 'spring-boot-starter-parent', '2.1.4.RELEASE')/] + +[/template] + +[template public getPadreForBE(groupId : String , artifactId: String , version: String , path : String)] +[getGAVP(groupId, artifactId,version , path)/] +[/template] + +[template public getGAV(groupId : String, artifactId : String, version : String)] +[groupId/] +[artifactId/] +[version/] +[/template] + +[template public getGAVT(groupId:String , artifactId:String , version : String,type:String)] +[getGAV(groupId,artifactId,version)/] +[type/] +[/template] + +[template public getGAVP(groupId : String, artifactId : String, version : String, path : String)] +[getGAV(groupId, artifactId, version)/] + [path/] +[/template] + +[template public getDependeciesForRoot(oclAny:OclAny)] + + [getGAV('javax.servlet','javax.servlet-api','4.0.1')/] + +[/template] + +[comment][template public getPropertiesForRoot(oclAny:OclAny)] +1.8 +1.0-SNAPSHOT +true +ISO-8859-1 +0.9.1 +1.8 +1.8 +1.0.10.RELEASE +2.3.5.RELEASE +UTF-8 +UTF-8 +[/template][/comment] + +[template public genBEDependecies(oclAny : OclAny)] + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + javax.servlet + javax.servlet-api + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.projectlombok + lombok + true + + + + + + + + org.hibernate.validator + hibernate-validator + 6.1.7.Final + + + + + org.springframework.boot + spring-boot-starter-test + test + + + junit + junit + test + + + + + + + + + + + + + + +[/template] + +[template public genBEDependencyMng(oclAny : OclAny)] + + + org.springframework.boot + spring-boot-dependencies + ${spring-starter.version} + pom + import + + +[/template] + +[template public genBEProperties(oclAny : OclAny)] +11 +11 +11 +1.1-SNAPSHOT +2.6.1 +2.5.2 +UTF-8 +[/template] + +[template public genBEBuild(oclAny : OclAny)] + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot-maven-plugin.version} + + + + org.projectlombok + lombok + + + + + +[/template] + +[template public getGroup(oclAny : OclAny)] +[getProperty('group.name')/] +[/template] + +[template public getArtifactForRoot(oclAny:OclAny)] +[getArtifact()/] +[/template] + +[template public getArtifactForBE(oclAny:OclAny)] +[getArtifact()/]-be +[/template] + +[template public getArtifactForFE(oclAny:OclAny)] +[getArtifact()/]-fe +[/template] + +[template public getFEName(oclAny:OclAny)] +[getArtifactForFE()/] +[/template] + +[comment]questo metodo viene chiamata dal ms dove aver generato nel suo main, il padre è sempre backend[/comment] +[template public getArtifactForBEGenerated(oclAny:OclAny)] +[getProperty('root.artifactId')/] +[/template] + +[template public getArtifactForMS(microService : Component)] +[getArtifact()/]-[microService.getMsName()/] +[/template] + +[template public getArtifactForMSFE(microService:Component)] +[microService.getArtifactForMS()/]-fe +[/template] + +[template public getArtifactForMSModel(microService : Component)] +[getArtifact()/]-[microService.getMsName()/]-model +[/template] + +[template public getLibsModules(oclAny:OclAny)] +[getArtifactForLibs().concat('-core')/] +[getArtifactForLibs().concat('-web')/] +[getArtifactForLibs().concat('-impl')/] +[/template] + +[template public getGatewayModules(oclAny:OclAny)] + +[/template] + +[template public getLibsNoModules(oclAny:OclAny)] +[/template] + +[template public getLibsImplDependencies(moduleName : String)] +[getImplCoreDependency()/] +[getRunTimeDependency(moduleName)/] +[getRunTimeDependency('mail-'+moduleName)/] +[getRunTimeDependency('bi-'+moduleName)/] +[/template] + +[template public getGatewayDependencies(oclAny:OclAny)] +[getSpringCloudDependecies()/] +[getSpringActuatorDependency()/] +[/template] + +[template public getSpringActuatorDependency(oclAny:OclAny)] + + org.springframework.boot + spring-boot-starter-actuator + +[/template] + +[template public getJMXMicrometerDependency(oclAny:OclAny)] + + io.micrometer + micrometer-registry-jmx + +[/template] + +[template public getPrometheusMicrometerDependency(oclAny : OclAny)] + + io.micrometer + micrometer-registry-prometheus + +[/template] + +[template public getLombokDependency(oclAny:OclAny)] + + + org.projectlombok + lombok + 1.18.20 + provided + +[/template] + +[template public getGatewayProperties(oclAny:OclAny)] +2021.0.0 +[/template] + +[template public getGatewayBuild(gateway:Component)] +spring-boot:run +[getArtifact()/]-[gateway.name.toLower()/] + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.5.RELEASE + + [getInnerGatewayPackage()/].[getArtifact().toString().dashToCamelCase().toUpperFirst()/][gateway.name.toUpperFirst()/]Application + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + +[/template] + +[template public getSpringCloudDependecies(oclAny:OclAny)] + + org.springframework.cloud + spring-cloud-starter-circuitbreaker-resilience4j + + + org.springframework.cloud + spring-cloud-starter-gateway + + + junit + junit + +[/template] + +[template public getGatewayDependencyManagement(oclAny:OclAny)] + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + +[/template] + +[template public getImplCoreDependency(oclAny:OclAny)] + + [getGAV(getGroupName(),getArtifactForLibsCore(),getVersion())/] + +[/template] + +[template public getLibsWebDependencies(moduleName : String)] +[getWebImplDependency()/] +[getRunTimeDependency(moduleName)/] +[comment][getRunTimeDependency('attachment-'+moduleName)/][/comment] +[getModelMapperDependency()/] +[getSpringHateoasDependency()/] +[getSpringOAauth2ResourceServerDependency()/] +[/template] + + + +[template public getMSDependencies(oclAny : OclAny)] + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.security + spring-security-test + test + +[getRunTimeDependencyWithSwaggerExclusions('core')/] +[/template] + +[template public genH2Dependency(oclAny:OclAny)] + + com.h2database + h2 + runtime + +[/template] + + +[template public genLiquidBaseDependency(oclAny : OclAny)] + + org.liquibase + liquibase-core + 4.3.5 + +[/template] + +[template public getSpringHateoasDependency(oclAny:OclAny)] + + org.springframework.boot + spring-boot-starter-hateoas + +[/template] + +[template public getSpringOAauth2ResourceServerDependency(oclAny:OclAny)] + + org.springframework.boot + spring-boot-starter-oauth2-resource-server + +[/template] + +[template public genJPAModelDependency(oclAny : OclAny)] + + + + + +[/template] + +[template public getModelMapperDependency(oclAny:OclAny)] + + org.modelmapper + modelmapper + ${modelmapper.version} + +[/template] + +[template public getLibsWebProperties(oclAny:OclAny)] +[getModelMapperProperty()/] +[/template] + +[template public getModelMapperProperty(oclAny:OclAny)] +2.3.9 +[/template] + +[template public getWebImplDependency(oclAny:OclAny)] + + [getGAV(getGroupName(),getArtifactForLibsImpl(),getVersion())/] + +[/template] + +[template public getLibsCoreDependencies(moduleName : String, aModel: Model)] +[getRunTimeDependencyWithSwaggerExclusions(moduleName)/] +[getRunTimeDependency('mail-'+moduleName)/] +[getRunTimeDependency('bi-'+moduleName)/] +[if(hasNoSqlMicroservice(aModel))] +[getRunTimeDependency('mongodb-'+moduleName)/] +[/if] + + org.springframework.boot + spring-boot-starter-hateoas + +[/template] + +[template public getRunTimeDependency(moduleName : String)] + + [getGAV('it.micegroup','voila2runtime-'+moduleName , '${voila2.runtime.version}')/] + +[/template] + +[template public getRunTimeDependencyWithSwaggerExclusions(moduleName : String)] + + [getGAV('it.micegroup','voila2runtime-'+moduleName , '${voila2.runtime.version}')/] + + + io.springfox + springfox-swagger2 + + + +[/template] + + +[template public getArtifactForLibsCore(oclAny:OclAny)] +[getArtifact()/]-libs-core +[/template] + +[template public getArtifactForLibs(oclAny:OclAny)] +[getArtifact()/]-libs +[/template] + +[template public getArtifactForGateway(oclAny:OclAny)] +[getArtifact()/]-gateway +[/template] + +[template public getArtifactForLibsWeb(oclAny:OclAny)] +[getArtifact()/]-libs-web +[/template] + +[template public getArtifactForLibsImpl(oclAny:OclAny)] +[getArtifact()/]-libs-impl +[/template] + +[template public getVersionForChild(oclAny:OclAny)] + +[/template] + +[template public getVersionForProject(oclAny:OclAny)] +[getVersion()/] +[/template] + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/propertiesUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/propertiesUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..fd8c24061e654da13399451cf41b5dcac9b8e521 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/microservice/propertiesUtils.mtl @@ -0,0 +1,72 @@ +[module propertiesUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] + +[template public getSourceFolderForMS(oclAny:OclAny)] +src +[/template] + +[template public getGroupNameForMS(oclAny:OclAny)] +[getGroupName()/] +[/template] + +[template public getBasePckNameForMS(microService: Component)] +[getGroupName()/].[getArtifact()/].[microService.getMicroServiceName()/] +[/template] + +[template public genBeModuleName(oclAny:OclAny)] +[getArtifact()/]-be +[/template] + + +[template public getBasePckNameAsFolderForMS(microService:Component)] +[getBasePckNameForMS().substituteAll('.','/')/] +[/template] + +[template public getArtifactIdForPropertiesForMS(oclAny:OclAny)] +[getArtifact()/] +[/template] + +[template public getProjectNameForMS(oclAny:OclAny)] +[getProjectName()/] +[/template] + +[template public getMsName(microservice: Component)] +ms-[microservice.name.toLowerCase()/] +[/template] + +[template public getNaturalMsName(microservice: Component)] +[microservice.name/] +[/template] + +[template public getMsAngularModuleName(microservice : Component)] +[getMsName(microservice).dashToCamelCase().toUpperFirst().concat('Module')/] +[/template] + + +[template public getMsNameByArtifactId(oclAny: OclAny)] +[getArtifact().substituteFirst(getRootArtifactId().concat('-'), '')/] +[/template] + +[template public getFEArtifactForMs(microService: Component)] +[getArtifact().concat('-ms-').concat(microService.getMicroServiceName()).concat('-fe')/] +[/template] + +[template public getMSAngularMenuName(microservice : Component)] +['MS_'.concat(microservice.getMicroServiceName().toUpper())/] +[/template] + +[comment] Metodo per recuperare il metodo del microservizio a partire dal Artifact Id, rimuovendo il prefisso ms. [/comment] +[template public getMsNameByArtifactIdWOMs(oclAny: OclAny)] +[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/] +[/template] + +[template public getMsNameByArtifactIdWOMsUpperFirst(oclAny: OclAny)] +[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '').toUpperFirst()/] +[/template] + +[template public getMsNameUF(microservice : Component)] +[microservice.getMicroServiceName().toUpperFirst()/] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/mvnWrapper.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/mvnWrapper.mtl new file mode 100644 index 0000000000000000000000000000000000000000..17fe281906fded4d03cb5703671902635a8edd43 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/mvnWrapper.mtl @@ -0,0 +1,24 @@ +[comment encoding = UTF-8 /] +[module mvnWrapper('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] + +[template public genMvnWrapper(oclAny: OclAny)] +[comment]WRAPPER MVN[/comment] +[comment]ROOT[/comment] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/mvn', getRootFolderName().concat('/.mvn'), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/mvnScript', getRootFolderName(), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[comment]CORE[/comment] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/mvn', getCoreModuleFolderName().concat('/.mvn'), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/mvnScript', getCoreModuleFolderName(), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[comment]IMPL[/comment] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/mvn', getImplModuleFolderName().concat('/.mvn'), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/mvnScript', getImplModuleFolderName(), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[comment]WEB[/comment] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/mvn', getWebModuleFolderName().concat('/.mvn'), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[copyFolder('/src/it/mice/voila2/acceleogenerator/core/springboot/mvnScript', getWebModuleFolderName(), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[comment]###########END WRAPPER MVN-#####[/comment] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/properties.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/properties.mtl new file mode 100644 index 0000000000000000000000000000000000000000..245b0cc00b38882adc312e7a0c6cb6d4078b418e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/properties.mtl @@ -0,0 +1,92 @@ +[comment encoding = UTF-8 /] +[** + * The documentation of the module properties. + */] +[module properties('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] + +[** + * + * The documentation of the template generateElement. + * @param aClass + */] + +[template public getBaseDir(anOclAny : OclAny)] +[getProperty('basedir')/] +[/template] + +[template public getProjectId(anOclAny : OclAny)] +[getProperty('projectId')/] +[/template] + +[template public getProjectDescriptionWizard(anOclAny : OclAny)] +[getProperty('projectDescription')/] +[/template] + +[template public getBasePackageName(anOclAny : OclAny)] +[getProperty('base.package.name')/] +[/template] + +[template public getBaseGroupName(anOclAny : OclAny)] +[getProperty('baseGroupName')/] +[/template] + +[template public getBasePackageNameAsFolder(anOclAny : OclAny)] +[getProperty('basePackageAsFolder')/] +[/template] + +[template public getProjectDate(anOclAny : OclAny)] +[getProperty('projectDate')/] +[/template] + +[template public getSourceFolder(anOclAny : OclAny)] +[getProperty('sourcefolder')/] +[/template] + +[template public getProjectName(anOclAny : OclAny)] +[getProperty('project.name')/] +[/template] + + +[template public getArtifact(anOclAny : OclAny)] +[getProperty('artifact')/] +[/template] + + +[template public getGroupName(anOclAny : OclAny)] +[getProperty('group.name')/] +[/template] + + +[template public getProjectDescription(anOclAny : OclAny)] +[getProperty('project.description')/] +[/template] + +[template public getVersion(anOclAny : OclAny)] +[getProperty('version')/] +[/template] + +[template public getRootArtifactId(anOclAny : OclAny)] +[getProperty('root.artifactId')/] +[/template] + +[template public getPortNumber(oclAny : OclAny)] +[getProperty('port.number')/] +[/template] + +[template public getCategory(oclAny:OclAny)] +[getProperty('microservice.category')/] +[/template] + +[template public getId(oclAny:OclAny)] +[getProperty('id')/] +[/template] + +[template public getPersistenceType(oclAny:OclAny)] +[getProperty('persistence.type')/] +[/template] + +[template public getCleanArtifact(anOclAny : OclAny)] +[getArtifact().replace('-', '')/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/associationUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/associationUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..f7312ad0d4078f149bb9edd4c3b385499f5491ef --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/associationUtils.mtl @@ -0,0 +1,432 @@ +[comment encoding = UTF-8 /] + +[comment] + +Association Utility's Templates +This library contains all the methods to work on parent-child relations + +[/comment] + +[module associationUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::generalUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] + +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[** + * Generate Child Collections for the Class + * @author: Vittorio Niespolo , Jessica Pascarella +*/] +[template public genChildCollections(aClass : Class)] +[for(a : Association | aClass.getChildAssociations())separator('\n')] +@JsonProperty(access = Access.WRITE_ONLY) +@JsonManagedReference("[if(getChildClass(aClass,a).hasCompositeKey() and a.isIdentifying())][getClassIdName(getChildClass(aClass,a))/].[/if][getTheSelfPropertyName(aClass.getParentClass(a), a)/]") +[if(isOneToOneRelation(a) and hasChildOneToOne(aClass,a, aClass.getParentEnd(a)))] +@OneToOne(mappedBy = "[if(getChildClass(aClass,a).hasCompositeKey())][getClassIdName(getChildClass(aClass,a))/].[/if][getTheSelfPropertyName(getChildClass(aClass, a), a)/]", fetch = FetchType.LAZY) +@EqualsAndHashCode.Exclude private [getChildClass(aClass, a).name/] [getTheChildPropertyName(aClass, a)/]; +[elseif(not(isOneToOneRelation(a)))] +@OneToMany(mappedBy = "[if(getChildClass(aClass,a).hasCompositeKey() and a.isIdentifying())][getClassIdName(getChildClass(aClass,a))/].[/if][getTheSelfPropertyName(getChildClass(aClass, a), a)/]", fetch = FetchType.LAZY, cascade = CascadeType.ALL) +@ToString.Exclude +private Collection<[getChildClass(aClass, a).name/]> [getTheChildPropertyName(aClass, a)/] = new ArrayList<>(); +[/if] +[/for] +[/template] + +[** + * Generate Child getter/setter for the Class + * @author: Vittorio Niespolo +*/] +[template public genChildGetterSetter(aClass : Class) post(trim())] +[for(a : Association | aClass.getChildAssociations())] +/** + * @return the [aClass.getChildClass(a).name.toUpperFirst()/] + */ +public Collection<[aClass.getChildClass(a).name/]> get[aClass.getTheChildPropertyName(a).toUpperFirst()/](){ + return [aClass.getTheChildPropertyName(a)/]; +} + +/** + * @param a[aClass.getChildClass(a).name.toUpperFirst()/]List to set + */ +public void set[aClass.getTheChildPropertyName(a).toUpperFirst()/](Collection<[aClass.getChildClass(a).name/]> a[aClass.getChildClass(a).name.toUpperFirst()/]List){ + [aClass.getTheChildPropertyName(a)/] = a[aClass.getChildClass(a).name.toUpperFirst()/]List; +} +[/for] +[/template] + +[** + * Generate Parent properties for the Class + * @author: Vittorio Niespolo , Jessica Pascarella +*/] +[template public genParentProperty(aClass : Class) post(trim())] +[for(a : Association | aClass.getNotIdentifyingParentAssociations())] +[if(a.isParentRequired())] +@NotNull +[/if] +[if(isOneToOneRelation(a))] +@OneToOne([if(aClass.getParentEnd(a).isNavigable()._not())]mappedBy = "the[aClass.getEntityClassName()/]",[/if] fetch = FetchType.LAZY) +[elseif(not(isOneToOneRelation(a)))] +@ManyToOne(fetch = FetchType.LAZY) +[/if] +[if(a.isManyToOneRelation() or (isOneToOneRelation(a) and aClass.getParentEnd(a).isNavigable()))] +[if(aClass.getParentClass(a).getClassIDs() -> size() > 1)] +@JoinColumns({ +[/if] +[for(p : Property | aClass.getParentClass(a).getClassIDsIncludingFK()) separator(',')] +@JoinColumn(name = "[genJoinColumnName(aClass, a, p)/][if(aClass.getParentClass(a).hasInnerCompositeKey())]_[camelToUnderscore(p.getPhysicalColumnName())/][/if]", referencedColumnName = "[camelToUnderscore(p.getPhysicalColumnName())/]", nullable = [if(a.isParentRequired() or a.isIdentifying())]false[elseif(not a.isParentRequired() and not a.isIdentifying())]true[/if][comment][if(isInCompositeKey(aClass, p))], insertable = false, updatable = false[/if][/comment]) +[/for] +[if(aClass.getParentClass(a).getClassIDs() -> size() > 1)] +}) +[/if] +@JsonBackReference("[getTheSelfPropertyName(getChildClass(aClass, a), a)/]") +@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"}, allowSetters = true) +[/if] +private [aClass.getParentClass(a).name/] [aClass.getTheParentPropertyName(a)/]; +[/for] +[/template] + +[** + * Generate Imported parents property as Column +*/] + +[template public genImportedParentProperty(aClass:Class) ] +[for(ass : Association | aClass.getParentAssFromImportedModels())] +[for(p:Property | aClass.getParentClass(ass).getClassIDs()) separator(',')] +[if(p.isID and aClass.hasCompositeKey()._not() and aClass.hasDefinition() and aClass.hasAutogeneratedId())]//WARNING For some RDBMS this syntax may not work. Manually delete COMMENT if you are not using Mysql.[/if] +@Column(name = "[camelToUnderscore(p.name)/]"[if(isInCompositeKey(aClass, p))], insertable = false, updatable = false[/if] +, columnDefinition="[p.getColumnDefinition(aClass)/]" +) +[if(p.isDateTime())]@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")[/if] +private [p.type.getJavaType()/] [p.name/]; +[/for] +[/for] +[/template] + + +[template public genImportedParentGetterSetter(aClass:Class)] +[for(ass : Association | aClass.getParentAssFromImportedModels())] +[for(p:Property | aClass.getParentClass(ass).getClassIDs()) separator(',')] +[genGetter(p)/] +[genSetter(p)/] +[/for] +[/for] +[/template] + +[** + * Generate Parent getter/Setter for the Class + * @author: Vittorio Niespolo +*/] +[template public genParentGetterSetter(aClass : Class) post(trim())] +[for(a : Association | aClass.getNotIdentifyingParentAssociations())] +/** + * @return the [aClass.getParentClass(a).name.toUpperFirst()/] + */ +@JsonProperty(access = Access.WRITE_ONLY) +public [aClass.getParentClass(a).name/] get[aClass.getTheParentPropertyName(a).toUpperFirst()/](){ + return [aClass.getTheParentPropertyName(a)/]; +} + +/** + * @param a[aClass.getParentClass(a).name.toUpperFirst()/]List to set + */ +public void set[aClass.getTheParentPropertyName(a).toUpperFirst()/]([aClass.getParentClass(a).name/] a[aClass.getParentClass(a).name.toUpperFirst()/]){ + [aClass.getTheParentPropertyName(a)/] = a[aClass.getParentClass(a).name.toUpperFirst()/]; + [if(a.isIdentifying())] + if([aClass.getClassIdName()/] == null){ + [aClass.getClassIdName()/] = new [aClass.getClassIdName().toUpperFirst()/](); + } + [aClass.getClassIdName()/].set[aClass.getParentClass(a).getClassIdName().toUpperFirst()/]([aClass.getTheParentPropertyName(a)/].get[aClass.getParentClass(a).getClassIdName().toUpperFirst()/]()); + [/if] +} +[/for] +[/template] + +[** + * Generate Child links for the Class + * @author: Vittorio Niespolo +*/] +[template public genChildLinks(aClass: Class) post(trim())] +[for(childAss: Association | getChildAssociations(aClass)) separator(',\n')] +linkTo(ControllerLinkBuilder.methodOn([getControllerClassName(aClass)/].class) + .get[aClass.getTheChildPropertyName(childAss).toUpperFirst()/]ByObjectKey([getObjectKeyGetter(aClass, aClass)/], PageRequest.of(0, 20))).withRel("[aClass.getChildLinkName(childAss)/]")[/for] +[/template] + +[** + * Generate Parent links for the Class + * @author: Vittorio Niespolo +*/] +[template public genParentLinks(aClass: Class) post(trim())] +[for (parentAss : Association | aClass.getParentAssociations()) separator(',\n')] +linkTo(ControllerLinkBuilder.methodOn([getControllerClassName(getParentClass(aClass, parentAss))/].class) + .getById([getEntityClassName(aClass).toLowerFirst()/].get[getParentIdName(aClass, parentAss).toUpperFirst()/]())).withRel("[aClass.getParentLinkName(parentAss)/]")[/for] +[/template] + +[** + * Generate Self link for the Class + * @author: Vittorio Niespolo +*/] +[template public genSelfLink(aClass : Class) post(trim())] +linkTo(ControllerLinkBuilder.methodOn([getControllerClassName(aClass)/].class) + .getByObjectKey([getEntityClassName(aClass).toLowerFirst()/].getObjectKey())).withSelfRel() +[/template] + +[** + * Generate ParentId getter for the Class + * @author: Vittorio Niespolo +*/] +[template public genParentIdGetter(aClass : Class)] +[for(a : Association | aClass.getNotIdentifyingParentAssociations())] +/** + * Return the [getParentIdName(aClass, a)/] from [aClass.getTheParentPropertyName(a)/]. + * + * @return [getParentIdName(aClass, a)/] from [aClass.getTheParentPropertyName(a)/]. + */ +@JsonProperty +public [aClass.getParentClass(a).getClassIdType()/] get[getParentIdName(aClass, a).toUpperFirst()/]() { + // If the parent entity object is null, then return null + if (get[aClass.getTheParentPropertyName(a).toUpperFirst()/]() == null) { + return null; + } + // Return requested attribute + return [aClass.getTheParentPropertyName(a)/].get[aClass.getParentClass(a).getClassIdName().toUpperFirst()/](); +} +[/for] +[/template] + +[template public genParentObjectTitleGetter(aClass : Class)] +[for(a : Association | aClass.getParentAssociations())] +/** + * Return the object title of [aClass.getTheParentPropertyName(a)/]. + * + * @return the object title of [aClass.getTheParentPropertyName(a)/]. + */ +@JsonProperty +public String get[aClass.getTheParentPropertyName(a).toUpperFirst()/]ObjectTitle() { + return get[aClass.getTheParentPropertyName(a).toUpperFirst()/]() != null ? get[aClass.getTheParentPropertyName(a).toUpperFirst()/]().getObjectTitle() : null; +} +[/for] +[/template] + +[template public genParentObjectKeyGetter(aClass : Class, parentAss: Association, identifying : Boolean, isKeyClass: Boolean)] +/** + * Return the object key of [aClass.getTheParentPropertyName(parentAss)/]. + * + * @return the object key of [aClass.getTheParentPropertyName(parentAss)/]. + */ +@JsonProperty +public String get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey() { + return get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]() != null ? get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]().getObjectKey() : null; +} +[if(aClass.getParentClass(parentAss).hasCompositeKey())] +[for(id : Property | aClass.getParentClass(parentAss).getClassIDsIncludingFK())] +[genExternalCKGetter(aClass, parentAss, id, identifying, isKeyClass)/] +[/for] +[/if] +[/template] + +[template public genParentObjectKeySetter(aClass : Class, parentAss: Association, identifying: Boolean)] +/** + * Set object key of [aClass.getTheParentPropertyName(parentAss)/]. + * + */ +@JsonProperty +public void set[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey(String objectKey) { + if (EntityUtils.isValueChanged(get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey(), objectKey, false)) { + [aClass.getParentClass(parentAss).name.toUpperFirst()/] [aClass.getParentClass(parentAss).name.toLowerFirst()/] = new [aClass.getParentClass(parentAss).name.toUpperFirst()/](); + [aClass.getParentClass(parentAss).name.toLowerFirst()/].setObjectKey(objectKey); + set[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]([aClass.getParentClass(parentAss).name.toLowerFirst()/]); + } +} + + +[for(id : Property | aClass.getParentClass(parentAss).getClassIDsIncludingFK())] +[genExternalCKSetter(aClass, parentAss, id, identifying)/] +[/for] + +[/template] + +[** + * Generate ParentId setter for the Class + * @author: Vittorio Niespolo +*/] +[template public genParentIdSetter(aClass : Class)] +[for(a : Association | aClass.getParentAssociations())] +/** + * Imposta il valore dell'attributo [getParentIdName(aClass, a)/], appartenente all'oggetto [aClass.getTheParentPropertyName(a)/], nell'entity + * corrente. + * + * @param a[aClass.getParentClass(a).getClassIdName().toUpperFirst()/] + * + */ +@JsonDeserialize +public void set[getParentIdName(aClass, a).toUpperFirst()/]([aClass.getParentClass(a).getClassIdType()/] a[aClass.getParentClass(a).getClassIdName().toUpperFirst()/]) { + // If the parent entity object is null, then create a new one + if([aClass.getTheParentPropertyName(a)/] == null) + { + [aClass.getTheParentPropertyName(a)/] = new [aClass.getParentClass(a).name.toUpperFirst()/](); + } + // Set value to the attribute + [aClass.getTheParentPropertyName(a)/].set[aClass.getParentClass(a).getClassIdName().toUpperFirst()/](a[aClass.getParentClass(a).getClassIdName().toUpperFirst()/]); +} +[/for] +[/template] + +[** + * Generate service instancing for childs + * @author: Vittorio Niespolo +*/] +[template public genChildServices(aClass : Class)] +[for(c:Class| aClass.getChildClassesNoDup())] +[if((getServiceClassName(c).toString().equalsIgnoreCase(getServiceClassName(aClass)))._not())] +private final [getServiceClassName(c)/] [getServiceClassName(c).toString().toLowerFirst()/];[/if][/for] +[/template] + +[** + Metodo per generare il getter OK delle classi padri dei modelli importati + @author Simone Punzo +/] + +[template public genImportedParentObjectKeySetter(aClass : Class)] +[for(ass : Association | aClass.getParentAssFromImportedModels())] +/** + * Imposta il valore degli attributi ID , appartenente all'oggetto [aClass.getTheParentPropertyName(ass)/], nell'entity + * corrente per permettere una corretta interrogazione del DB anche se le due entità non sono accedibili una dall'altra + * (gestite da due MS diversi) + * @param key + * + */ +public void set[aClass.getTheParentPropertyName(ass).toUpperFirst()/]ObjectKey(String key) { + if (key == null || key.trim().length() == 0) { + return; + } + String['['/]] array = StringUtils.splitByWholeSeparatorPreserveAllTokens(key, getRowIdFieldDelimiter()); + int ctr = 0; + [for(prop : Property | aClass.getParentClass(ass).getClassIDs()) separator('\tctr++;\n')] + set[prop.name.toUpperFirst()/](get[prop.type.getJavaType()/]CheckedAgainstNullContent(array['['/]ctr])); + [/for] + +} +[/for] +[/template] + +[** + Metodo per generare il getter OK delle classi padri dei modelli importati + @author Simone Punzo +/] +[template public genImportedParentObjectKeyGetter(aClass : Class)] +[for(a : Association | aClass.getParentAssFromImportedModels())] +/** + * Return the object key of [aClass.getTheParentPropertyName(a)/]. + * + * @return the object key of [aClass.getTheParentPropertyName(a)/]. + */ +public String get[aClass.getTheParentPropertyName(a).toUpperFirst()/]ObjectKey() { + StringBuilder output = new StringBuilder(); + [for(p:Property | aClass.getParentClass(a).getClassIDs()) separator('\toutput.append(getRowIdFieldDelimiter());\n')] + output.append(get[p.name.toUpperFirst()/]()); + [/for] + return output.toString(); +} +[/for] +[/template] + +[template genJoinColumnName(aClass: Class, parentAss: Association, property: Property)] +[comment][if(parentAss.isSelfRelation())][camelToUnderscore(aClass.getParentEnd(parentAss).name)/][else][camelToUnderscore(property.name)/][/if][if(aClass.getParentClass(parentAss).hasCompositeKey())]_[camelToUnderscore(property.name)/][/if][/comment] +[parentAss.getPhysicalMappedName(property)/] +[/template] + + + +[template public genExternalCKGetter(aClass: Class, parentAss: Association, id: Property, identifying: Boolean, isKeyClass: Boolean)] +[for(grandParentAss: Association| aClass.getParentClass(parentAss).getIdentifyingParentAssociations())] +/** + * Return the [id.name/]. + * + * @return [id.name/]. + */ +@JsonProperty +public [id.type.getJavaType()/] get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/][id.name.toUpperFirst()/]() { + // If the parent entity object is null, then return null + [if(identifying)] + if ([if(isKeyClass._not())][aClass.getClassIdName()/] == null || [aClass.getClassIdName()/].[/if]get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]() == null) { + [else] + if (get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]() == null) { + [/if] + return null; + } + // Return requested attribute + [if(identifying)] + [if(aClass.getParentClass(parentAss).isInInnerID(id))] + return [if(isKeyClass._not())][aClass.getClassIdName()/].[/if]get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]().get[id.name.toUpperFirst()/](); + [else] + return [if(isKeyClass._not())][aClass.getClassIdName()/].[/if]get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]()[if(aClass.getParentClass(parentAss).hasCompositeKey())].get[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]()[/if].get[id.name.toUpperFirst()/](); +[comment] return [if(isKeyClass._not())][aClass.getClassIdName()/].[/if]get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]().get[aClass.getParentClass(parentAss).getTheParentPropertyName(grandParentAss).toUpperFirst()/][id.name.toUpperFirst()/]();[/comment] + [/if] + [else] + [if(aClass.isInInnerID(id))] + return [aClass.getTheParentPropertyName(parentAss)/].get[id.name.toUpperFirst()/](); + [else] + return [aClass.getTheParentPropertyName(parentAss)/].get[aClass.getParentClass(parentAss).getTheParentPropertyName(grandParentAss).toUpperFirst()/][id.name.toUpperFirst()/](); + [/if] + [/if] +} +[/for] +[/template] + +[template public genExternalCKSetter(aClass: Class, parentAss: Association, id: Property, identifying: Boolean)] +[for(grandParentAss: Association| aClass.getParentClass(parentAss).getIdentifyingParentAssociations())] +/** + * Set the [id.name/]. + * @param [id.name/] + * + */ +@JsonProperty +public void set[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/][id.name.toUpperFirst()/]([id.type.getJavaType()/] [id.name/]) { + if (EntityUtils.isValueChanged(get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/][id.name.toUpperFirst()/](), [id.name/], false)) { + if (get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]() == null) { + set[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/](new [aClass.getParentClass(parentAss).getEntityClassName()/]()); + } + [if(aClass.getParentClass(parentAss).isInInnerID(id))] + get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]().set[id.name.toUpperFirst()/]([id.name/]); + [else] + get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]()[if(aClass.getParentClass(parentAss).hasCompositeKey())].get[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]()[/if].set[id.name.toUpperFirst()/]([id.name/]); +[comment] get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]().set[aClass.getParentClass(parentAss).getTheParentPropertyName(grandParentAss).toUpperFirst()/][id.name.toUpperFirst()/]([id.name/]);[/comment] + [/if] + } +} +[/for] +[/template] + +[comment]TODELETE[/comment] +[template public getExternalCKIdName(parentClass: Class, grandParentAss: Association, id: Property)] +[if(parentClass.isInInnerID(id))] +[id.name.toUpperFirst()/] +[else] +ciao +[comment][parentClass.getTheParentPropertyName(grandParentAss)/][getExternalCKIdName(parentClass.getParentClass(grandParentAss), grandParentAss, id)/][/comment] +[/if] +[/template] + +[template public genParentObjectTitleGetter(aClass : Class, parentAss: Association)] +/** + * Return the object title of [aClass.getTheParentPropertyName(parentAss)/]. + * + * @return the object title of [aClass.getTheParentPropertyName(parentAss)/]. + */ +@JsonProperty +public String get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectTitle() { + return get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]() != null ? get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]().getObjectTitle() : null; +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/auditable.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/auditable.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b871aaaf9a52a69d06e150d52551b1ee7468fa09 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/auditable.mtl @@ -0,0 +1,94 @@ +[comment encoding = UTF-8 /] +[comment] + +Auditable Java Class Template + +@author Vittorio Niespolo + +[/comment] +[module auditable('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] + +[template public genAuditable(isMs : Boolean) post(writeAndFormat(isMs.getAuditableFileName()))] +[if(isMs)] +package [getLibsUtilitiesPackage()/]; +[else] +package [getUtilitiesPackage()/]; +[/if] + +import java.time.LocalDateTime; + +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; + +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +[if(isMs)] +import [getEntityLibsPackage()/].BaseEntity; +[else] +import [getEntityPackage()/].BaseEntity; +[/if] + +/** + * Class for audit data. This class is extended by entity flagged as auditable. + */ +@EntityListeners(AuditingEntityListener.class) +@MappedSuperclass +public abstract class Auditable extends BaseEntity { + @CreatedBy + @Column(name = "created_by") + private String createdBy; + + @CreatedDate + @Column(name = "created_date", updatable = false) + private LocalDateTime createdDate; + + @LastModifiedBy + @Column(name = "last_modified_by") + private String lastModifiedBy; + + @LastModifiedDate + @Column(name = "last_modified_date", updatable = false) + private LocalDateTime lastModifiedDate; + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public LocalDateTime getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(LocalDateTime createdDate) { + this.createdDate = createdDate; + } + + public String getLastModifiedBy() { + return lastModifiedBy; + } + + public void setLastModifiedBy(String lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + public LocalDateTime getLastModifiedDate() { + return lastModifiedDate; + } + + public void setLastModifiedDate(LocalDateTime lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/cacheConfig.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/cacheConfig.mtl new file mode 100644 index 0000000000000000000000000000000000000000..327fe6790b5d29fdba4905ef7b56abc992710c2e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/cacheConfig.mtl @@ -0,0 +1,45 @@ +[comment encoding = UTF-8 /] + +[comment] + +Controller Java Class Template + +@author Vittorio Niespolo + +[/comment] + +[module cacheConfig('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] + +[template public genCacheConfig(isMs : Boolean) post(writeAndFormat(isMs.getCacheConfigFileName()))] +[if(isMs)] +package [getLibsUtilitiesPackage()/]; +[else] +package [getUtilitiesPackage() /]; +[/if] +import java.util.Arrays; + +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.concurrent.ConcurrentMapCache; +import org.springframework.cache.support.SimpleCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean + public CacheManager cacheManager() { + SimpleCacheManager cacheManager = new SimpleCacheManager(); + cacheManager.setCaches(Arrays.asList( + new ConcurrentMapCache("PrivilegePerRole") + )); + return cacheManager; + } +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/classNameUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/classNameUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..45f44716d771935f41f5c9a0274026aea1b058bc --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/classNameUtils.mtl @@ -0,0 +1,168 @@ +[comment encoding = UTF-8 /] + +[comment] + +ClassName Utility's templates +This library contains methods to get classNames + +[/comment] + +[module classNameUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] + +[** + * Get the ServiceClassName + * @author: Vittorio Niespolo +*/] +[template public getServiceClassName(aType : Type)] +[aType.name.concat('Service')/] +[/template] + +[** + * Get the ServiceClassObject + * @author: Vittorio Niespolo +*/] +[template public getServiceObjectName(aType : Type)] +[aType.name.concat('Service').toLowerFirst()/] +[/template] + +[** + * Get the EntityClassName + * @author: Vittorio Niespolo +*/] +[template public getEntityClassName(aType : Type)] +[aType.name/] +[/template] + +[template public getWriteDtoName(aType : Type)] +[getEntityClassName(aType)/]WriteDto +[/template] + +[template public getParentEntityClassName(aClass : Class, parentAss: Association)] +[aClass.getParentClass(parentAss).getEntityClassName()/] +[/template] + +[template public getInterfaceName(aType : Type)] +I[aType.name/] +[/template] + +[template public getEntityModelName(aType : Type)] +[aType.name/] +[/template] + +[template public getEntityCKClassName(aType: Type)] +[aType.name.concat('Key')/] +[/template] + +[** + * Get the ClassObjectName + * @author: Vittorio Niespolo +*/] +[template public getEntityObjectName(aType : Type)] +[aType.name.toLowerFirst()/] +[/template] + +[** + * Get the Entity_ClassName for the auto-generated metamodel + * @author: Vittorio Niespolo +*/] +[template public getEntity_ClassName(aType : Type)] +[aType.name.concat('_')/] +[/template] + +[template public getObjectName(aType : Type)] +[aType.name.toLowerFirst()/] +[/template] + +[template public getObjectRepositoryName(aClass : Class)] +[aClass.name.toLowerFirst().concat('Repository')/] +[/template] + +[template public getServiceImplClassName(aClass : Class)] +[aClass.name.concat('ServiceImpl')/] +[/template] + +[template public getControllerClassName(aClass : Class)] +[aClass.name.concat('Controller')/] +[/template] + +[template public getDtoClassName(aClass:Class)] +[aClass.name.concat('Dto')/] +[/template] + +[template public getCriteriaClassName(aClass : Class)] +[aClass.name.concat('Criteria')/] +[/template] + +[template public getRepositoryClassName(aClass : Class)] +[aClass.name.concat('Repository')/] +[/template] + +[template public getFilterServiceClassName(aClass : Class)] +FilterService<[aClass.name/]> +[/template] + +[template public getKeyClassName(aClass : Class)] +[aClass.name.concat('Key')/] +[/template] + +[template public getMainClassName(oclAny : OclAny)] +[getProjectName().toUpperFirst().concat('Application').substituteAll('.', '')/] +[/template] + +[template public getMainClassNameAsMs(oclAny : OclAny)] +[getArtifact().toString().dashToCamelCase().toUpperFirst()/] +[/template] + +[template public getWebConfigClassName(oclAny : OclAny)] +['WebConfig'/] +[/template] + +[template public getEntityDtoClassName(aClass : Class)] +[aClass.name.concat('Dto')/] +[/template] + +[template public getEntityWriteDtoClassName(aClass: Class)] +[aClass.name.concat('WriteDto')/] +[/template] + +[template public getEntityKeyDtoClassName(aClass: Class)] +[aClass.name.concat('KeyDto')/] +[/template] + +[template public getGatewayConfigClassName(oclAny:OclAny)] +[getCleanArtifact().toUpperFirst().concat('GatewayApplication')/] +[/template] + +[template public getGatewayAppTestClassName(oclAny:OclAny)] +[getCleanArtifact().toUpperFirst().concat('GatewayApplicationTests')/] +[/template] + +[comment]Funcs for assembler and controller class names[/comment] +[template public getAssemblerClassName(aClass:Class)] +[aClass.name.concat('ModelAssembler')/] +[/template] + +[template public getDashedEntityClassName(aClass : Class)] +[aClass.getEntityClassName().toLowerFirst().camelToDash()/] +[/template] + +[template public getObjectKeyClassName(aClass : Class)] +[aClass.name.concat('ObjectKey')/] +[/template] + +[template public getObjectTitleClassName(aClass : Class)] +[aClass.name.concat('ObjectTitle')/] +[/template] + + +[template public getChildDtoClassName(aClass:Class, association : Association)] +[getEntityClassName(getChildClass(aClass,association)).concat('Dto')/] +[/template] + +[template public getChildWriteDtoClassName(aClass : Class , association : Association)] +[getEntityClassName(getChildClass(aClass,association)).concat('WriteDto')/] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/constants.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/constants.mtl new file mode 100644 index 0000000000000000000000000000000000000000..bdc3ffb6e929ea9d1864fbdbb6214e14d90fcf97 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/constants.mtl @@ -0,0 +1,57 @@ +[comment encoding = UTF-8 /] + +[comment] + +Controller Java Class Template + +@author Vittorio Niespolo + +[/comment] + +[module constants('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] + +[template public genConstants(isMs : Boolean) post(writeAndFormat(isMs.getConstantsFileName()))] +[if(isMs)] +package [getLibsUtilitiesPackage()/]; + +public class Constants{ + private Constants() { + throw new IllegalStateException("Utility class"); + } + public static final String ROWIDFIELDDELIMITER = "~"; + public static final String CORRELATION_KEY = "X-Correlation-ID"; +} +[else] +package [getUtilitiesPackage() /]; + + +public class Constants{ + private Constants() { + throw new IllegalStateException("Utility class"); + } + + public static final String ROWIDFIELDDELIMITER = "_727_"; + private static final String title1="\n\nVVVVVVVV VVVVVVVV iiii llllll a :: a 222222222222222\n"; + private static final String title2="V::::::V V::::::V i::::i l::::l a :: a 2:::::::::::::::22\n"; + private static final String title3="V::::::V V::::::V iiii l::::l a :: a 2::::::222222:::::2\n"; + private static final String title4="V::::::V V::::::V l::::l 2222222 2:::::2\n"; + private static final String title5=" V:::::V V:::::V ooooooooooo iiiiiii l::::l aaaaaaaaaaaaa 2:::::2\n"; + private static final String title6=" V:::::V V:::::Voo:::::::::::oo i:::::i l::::l a::::::::::::a 2:::::2\n"; + private static final String title7=" V:::::V V:::::Vo:::::::::::::::o i::::i l::::l aaaaaaaaa:::::a 2222::::2\n"; + private static final String title8=" V:::::V V:::::V o:::::ooooo:::::o i::::i l::::l a::::a 22222::::::22\n"; + private static final String title9=" V:::::V V:::::V o::::o o::::o i::::i l::::l aaaaaaa:::::a 22::::::::222\n"; + private static final String title10=" V:::::V V:::::V o::::o o::::o i::::i l::::l aa::::::::::::a 2:::::22222\n"; + private static final String title11=" V:::::V:::::V o::::o o::::o i::::i l::::l a::::aaaa::::::a 2:::::2\n"; + private static final String title12=" V:::::::::V o::::o o::::o i::::i l::::l a::::a a:::::a 2:::::2\n"; + private static final String title13=" V:::::::V o:::::ooooo:::::oi::::::il::::::la::::a a:::::a 2:::::2 222222 M\n"; + private static final String title14=" V:::::V o:::::::::::::::oi::::::il::::::la:::::aaaa::::::a 2::::::2222222:::::2 I\n"; + private static final String title15=" V:::V oo:::::::::::oo i::::::il::::::l a::::::::::aa:::a2::::::::::::::::::2 C\n"; + private static final String title16=" VVV ooooooooooo iiiiiiiillllllll aaaaaaaaaa aaaa22222222222222222222 E\n\n"; + public static final String LOG_TITLE= title1+title2+title3+title4+title5+title6+title7+title8+title9+title10+title11+title12+title13+title14+title15+title16; +} +[/if] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/controllerJavaDoc.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/controllerJavaDoc.mtl new file mode 100644 index 0000000000000000000000000000000000000000..2bd2fa651ecf6343732a18a1dcbef03b5d3ab3a1 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/controllerJavaDoc.mtl @@ -0,0 +1,36 @@ +[comment encoding = UTF-8 /] +[module controllerJavaDoc('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] + +[** + * Generate MasterDetailUpdate javadoc + * @author Vittoro Niespolo +*/] +[template public genMasterDetailUpdateDoc(oclAny : OclAny)] +/** +//TODO DOCUMENTATION +*/ +[/template] + +[** + * Generate AttachmentPathList javadoc + * @author Vittoro Niespolo +*/] +[template public genAttachmentPathListDoc(oclAny : OclAny)] +/** +//TODO DOCUMENTATION +*/ +[/template] + +[template public genGetAllPaginatedDoc(aClass: Class)] +/** + * GET : get all the [getEntityClassName(aClass)/] paginated + * + * @param pageable + * pagination info. You can use page and/or size as parameters in + * your GET requests + * @return the ResponseEntity with status 200 (OK) and the list of [getEntityClassName(aClass).toLowerCase()/] in + * body + */ +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/controllerUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/controllerUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..d91da32022abfda9acd0214c877c76968eaf897c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/controllerUtils.mtl @@ -0,0 +1,421 @@ +[comment encoding = UTF-8 /] + +[comment]VN I TEMPLATE DI QUESTO FILE SONO STATI DEPRECATI, I NUOVI POSSONO ESSERE TROVATI IN controllerMsUtils.mtl[/comment] + + +[comment] +Controller Utility's templates +This library contains template to generate controller's methods +[/comment] + +[module controllerUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::controllerJavaDoc /] +[import it::micegroup::voila2::cartridge::library::springboot::securityUtils /] +[** + * Generate getAllPaginated api method + * @author Vittorio Niespolo +*/] +[template public genGetAllPaginated(aClass : Class)] +[genGetAllPaginatedDoc()/] +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_findPaginated')") +@GetMapping("") +public ResponseEntity> findPaginated([getCriteriaClassName(aClass)/] criteria, Pageable pageable) { + Page<[getEntityClassName(aClass)/]> page = [getServiceClassName(aClass).toLowerFirst()/].findByCriteria(criteria, pageable); + return ResponseEntity.ok().body(page); +} +[/template] + +[** + * Generate List version of getAll api method + * @author Vittorio Niespolo +*/] +[template public genGetAllListed(aClass : Class)] +/** + * GET : get all the [getEntityClassName(aClass)/] + * + * @return List of all saved [getEntityClassName(aClass)/] + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_findListed')") +@GetMapping("/list") +public ResponseEntity> findListed([getCriteriaClassName(aClass)/] criteria) { + List<[getEntityClassName(aClass)/]> list = [getServiceClassName(aClass).toLowerFirst()/].findByCriteria(criteria); + return ResponseEntity.ok().body(list); +} +[/template] + +[** + * @Deprecated **** + * Generate getByCriteria api method + * @author Vittorio Niespolo +*/] +[template public genGetByCriteria(aClass : Class)] +/** + * GET /criteria : get all the [getEntityClassName(aClass)/] filtered by a criteria. + * + * @param criteria + * the criterias which the requested entities should match + * @param pageable + * pagination info. You can use page and/or size as parameters in + * your GET requests + * @return the ResponseEntity with status 200 (OK) and the list of [getEntityClassName(aClass)/] in + * body +*/ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_getByCriteria')") +@PostMapping("/criteria") +public ResponseEntity> getByCriteria([getCriteriaClassName(aClass)/] criteria, Pageable pageable) { + Page<[getEntityClassName(aClass)/]> page = [getServiceClassName(aClass).toString().toLowerFirst()/].findByCriteriaPaged(criteria, pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page); + return ResponseEntity.ok().headers(headers).body(page); +} +[/template] + +[** + * Generate getById api method + * @author Vittorio Niespolo +*/] +[template public genGetById(aClass : Class)] +/** + * {@code GET /[aClass.getDashedEntityClassName()/]/:objectKey} : get the [aClass.getDashedEntityClassName()/] with given objectKey. + * + * @param objectKey the objectKey of the [aClass.getDashedEntityClassName()/] to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the [aClass.getDashedEntityClassName()/], or with status {@code 404 (Not Found)}. + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_getById')") +@GetMapping("/id/{id}") +public ResponseEntity<[getEntityClassName(aClass)/]Resource> getById(@PathVariable [aClass.getClassIdType()/] id) { +return toResponseEntity([getServiceClassName(aClass).toString().toLowerFirst()/].findById(id), null); +[comment] [getEntityClassName(aClass)/] [getEntityClassName(aClass).toLowerFirst()/] = [getServiceClassName(aClass).toString().toLowerFirst()/].findById(id);[/comment] +[comment]VN Scommentare se non si necessitano i links[/comment] +[comment] return [getServiceClassName(aClass).toString().toLowerFirst()/].findById(id);[/comment] +[comment] if([getEntityClassName(aClass).toLowerFirst()/] != null){ + return new Resource<>([getEntityClassName(aClass).toLowerFirst()/], + [genSelfLink(aClass)/] + [genChildLinks(aClass)/] + [genParentLinks(aClass)/] + ); + } + else{ + return null; + }[/comment] +} +[/template] + +[** + * Generate getByObjectKey api method + * @author Vittorio Niespolo +*/] +[template public genGetByObjectKey(aClass : Class)] +/** + * {@code GET /[aClass.getDashedEntityClassName()/]/:objectKey} : get the [aClass.getDashedEntityClassName()/] with given objectKey. + * + * @param objectKey the objectKey of the [aClass.getDashedEntityClassName()/] to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the [aClass.getDashedEntityClassName()/], or with status {@code 404 (Not Found)}. + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_getByObjectKey')") +@GetMapping("/{objectKey:.+}") +[comment]public Resource<[getEntityClassName(aClass)/]> getByObjectKey(@PathVariable String objectKey, Pageable pageable) {[/comment] +public ResponseEntity<[getEntityClassName(aClass)/]Resource> getByObjectKey(@PathVariable String objectKey) { + return toResponseEntity([getServiceClassName(aClass).toString().toLowerFirst()/].findByObjectKey(objectKey), null); +[comment] [getEntityClassName(aClass)/] [getEntityClassName(aClass).toLowerFirst()/] = [getServiceClassName(aClass).toString().toLowerFirst()/].findByObjectKey(objectKey);[/comment] +[comment][comment]VN Scommentare se non si necessitano i links[/comment] +[comment] return [getServiceClassName(aClass).toString().toLowerFirst()/].findById(id);[/comment][/comment] +[comment] if([getEntityClassName(aClass).toLowerFirst()/] != null){ + return new Resource<>([getEntityClassName(aClass).toLowerFirst()/], + [genSelfLink(aClass)/] + [genChildLinks(aClass)/] + [genParentLinks(aClass)/] + ); + } + else{ + return null; + }[/comment] +} +[/template] + +[** + * Generate exists api method + * @author Vittorio Niespolo +*/] +[template public genExistsById(aClass : Class)] +/** + * GET /exists: Boolean to check if a [getEntityClassName(aClass)/] exists + * + * @param id + * + * @return true if [getEntityClassName(aClass)/] exists + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_exists')") +@GetMapping("/exists/{objectKey:.+}") +public boolean exists(@PathVariable String objectKey) { + [getEntityClassName(aClass)/] [getEntityClassName(aClass).toLowerFirst()/] = new [getEntityClassName(aClass)/](); + [getEntityClassName(aClass).toLowerFirst()/].setObjectKey(objectKey); + return [getServiceClassName(aClass).toString().toLowerFirst()/].exists([getEntityClassName(aClass).toLowerFirst()/].get[getClassIdName(aClass).toUpperFirst()/]()); +} +[/template] + +[** + * Generate update api method + * @author Vittorio Niespolo +*/] +[template public genUpdate(aClass : Class)] +/** + * {@code PUT /[aClass.getDashedEntityClassName()/]} : Updates an existing [aClass.getEntityClassName()/]. + * + * @param [aClass.getEntityClassName()/] the [aClass.getEntityClassName()/] to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated [aClass.getEntityClassName()/], + * or with status {@code 400 (Bad Request)} if the [aClass.getEntityClassName()/] is not valid, + * or with status {@code 500 (Internal Server Error)} if the [aClass.getEntityClassName()/] couldn't be updated. + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_update')") +@PutMapping("") +public ResponseEntity<[getEntityClassName(aClass)/]Resource> update(@Valid @RequestBody [getEntityClassName(aClass)/] [getEntityObjectName(aClass)/]) { + [getEntityClassName(aClass)/] up[getEntityClassName(aClass)/] = [getServiceObjectName(aClass)/].update([getEntityObjectName(aClass)/]); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert(APPLICATION_NAME, true, ENTITY_NAME, up[getEntityClassName(aClass)/].getObjectKey())) + .body(new [getEntityClassName(aClass)/]Resource(up[getEntityClassName(aClass)/])); +} +[/template] + +[** + * Generate create api method + * @author Vittorio Niespolo +*/] +[template public genCreate(aClass : Class)] +/** + * {@code POST /[aClass.getDashedEntityClassName()/]} : Create a new [aClass.getEntityClassName()/]. + * + * @param [aClass.getEntityClassName()/] the [aClass.getEntityClassName()/] to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with body the new [aClass.getEntityClassName()/], or with status {@code 400 (Bad Request)} if the [aClass.getEntityClassName()/] has already an ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_create')") +@PostMapping("") +public ResponseEntity<[getEntityClassName(aClass)/]Resource> create(@RequestBody [getEntityClassName(aClass)/] [getEntityClassName(aClass).toLowerFirst()/]) throws URISyntaxException{ + [getEntityClassName(aClass)/] new[getEntityClassName(aClass)/] = [getServiceClassName(aClass).toString().toLowerFirst()/].insert([getEntityClassName(aClass).toLowerFirst()/]); + + return ResponseEntity.created(new URI("/api/[getEntityClassName(aClass).toLowerFirst()/]/" + new[getEntityClassName(aClass)/].getObjectKey())) + .headers(HeaderUtil.createEntityCreationAlert(APPLICATION_NAME, true, ENTITY_NAME, new[getEntityClassName(aClass)/].getObjectKey())) + .body(new [getEntityClassName(aClass)/]Resource(new[getEntityClassName(aClass)/])); +} +[/template] + +[** + * Generate deleteById api method + * @author Vittorio Niespolo +*/] +[template public genDeleteByID(aClass : Class)] +/** + * {@code DELETE /[aClass.getDashedEntityClassName()/]/:objectKey} : delete the [aClass.getDashedEntityClassName()/] with given objectKey. + * + * @param objectKey the objectKey of the [(aClass.getEntityClassName())/] to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_delete')") +@DeleteMapping("/{objectKey:.+}") +public ResponseEntity delete(@PathVariable String objectKey) { + [getEntityClassName(aClass)/] [getEntityClassName(aClass).toLowerFirst()/] = new [getEntityClassName(aClass)/](); + [getEntityClassName(aClass).toLowerFirst()/].setObjectKey(objectKey); + [getServiceClassName(aClass).toString().toLowerFirst()/].deleteById([getEntityClassName(aClass).toLowerFirst()/].get[getClassIdName(aClass).toUpperFirst()/]()); + return ResponseEntity.noContent().headers(HeaderUtil.createEntityDeletionAlert(APPLICATION_NAME, true, ENTITY_NAME, objectKey)).build(); +} +[/template] + +[** + * Generate api method for massive delete + * @author Vittorio Niespolo +*/] +[template public genMassDelete(aClass : Class)] +/** + * DELETE : Delete existing [getEntityClassName(aClass)/] based on the given collection. + * + * @param entities + * + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_mass-delete')") +@DeleteMapping("/mass-delete") +public void massDelete(@RequestBody Collection<[getEntityClassName(aClass)/]> entities) { + [getServiceClassName(aClass).toLowerFirst()/].massDelete(entities); +} +[/template] + +[** + * Generate api method for massive insert + * @author Vittorio Niespolo +*/] +[template public genMassInsert(aClass : Class)] +/** + * POST : Create new [getEntityClassName(aClass)/] based on given collection. + * + * @param entities + * + * @return List of created [getEntityClassName(aClass)/]. Code 201 + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_mass-insert')") +@PostMapping("/mass-insert") +public List<[getEntityClassName(aClass)/]> massInsert(@RequestBody Collection<[getEntityClassName(aClass)/]> entities) { + return [getServiceClassName(aClass).toLowerFirst()/].massInsert(entities); +} +[/template] + +[** + * Generate api method for massive update + * @author Vittorio Niespolo +*/] +[template public genMassUpdate(aClass : Class)] +/** + * PUT : Update [getEntityClassName(aClass)/] based on given collection. + * + * @param entities + * + * @return Created [getEntityClassName(aClass)/]. Code 201 + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_mass-update')") +@PutMapping("/mass-update") +public List<[getEntityClassName(aClass)/]> massUpdate(@RequestBody Collection<[getEntityClassName(aClass)/]> entities) { + return [getServiceClassName(aClass).toLowerFirst()/].massUpdate(entities); +} +[/template] + +[** + * Generate api method to find childs by class id + * @author Vittorio Niespolo +*/] +[template public genFindChildsById(aClass : Class) post(trim())] +[for(childAss: Association | getChildAssociations(aClass))] +/** + * GET /[camelToDash(aClass.getTheChildPropertyName(childAss))/]_id: Search all [camelToDash(aClass.getTheChildPropertyName(childAss))/] childs of [aClass.name/] + * + * @param id of [aClass.name/] + * + * @return Page of [camelToDash(aClass.getTheChildPropertyName(childAss))/] + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_get[getEntityClassName(aClass.getChildClass(childAss)).toUpperFirst()/]ById')") +@GetMapping("/[camelToDash(aClass.getTheChildPropertyName(childAss))/]_{id}") +public Page<[getEntityClassName(aClass.getChildClass(childAss))/]> get[getEntityClassName(aClass.getChildClass(childAss)).toUpperFirst()/]By[getEntityClassName(aClass)/]Id(@PathVariable String objectKey, Pageable pageable) { + [getEntityClassName(aClass)/] [getEntityClassName(aClass).toLowerFirst()/] = new [getEntityClassName(aClass)/](); + [getEntityClassName(aClass).toLowerFirst()/].setObjectKey(objectKey); + return [getServiceClassName(aClass.getChildClass(childAss)).toLowerFirst()/].findBy[aClass.getChildClass(childAss).getTheParentPropertyName(childAss).toUpperFirst()/]([getEntityClassName(aClass).toLowerFirst()/], pageable); +} +[/for] +[/template] + +[** + * Generate api method to find elements by parent class id + * @author Vittorio Niespolo +*/] +[template public genGetByParentID(aClass : Class)] +[for(parentAss: Association | getParentAssociations(aClass))] +/** + * GET /[camelToDash(aClass.getTheParentPropertyName(parentAss))/]_id: Search all [aClass.name/] for the given [aClass.getParentClass(parentAss).getEntityClassName()/] (parent) + * + * @param id of [aClass.getParentClass(parentAss).getEntityClassName()/] + * @param pageable + * @return Page of [aClass.name/] for the given [aClass.getParentClass(parentAss).getEntityClassName()/] (parent) + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_getBy[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]Id')") +@GetMapping("/[camelToDash(aClass.getTheParentPropertyName(parentAss))/]/{objectKey:.+}") +public Page<[aClass.name/]> get[aClass.getEntityClassName()/]By[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]Id(@PathVariable String objectKey, Pageable pageable) { + [getEntityClassName(aClass.getParentClass(parentAss))/] [getObjectName(aClass.getParentClass(parentAss))/] = new [getEntityClassName(aClass.getParentClass(parentAss))/](); + [getObjectName(aClass.getParentClass(parentAss))/].setObjectKey(objectKey); + return [aClass.getServiceClassName().toLowerFirst()/].findBy[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]([getObjectName(aClass.getParentClass(parentAss))/], pageable); +} +[/for] +[/template] + +[** + * Generate method to update a list of a specific child + * @author Vittoro Niespolo +*/] +[template public genMasterDetailUpdate(aClass : Class)] +[genMasterDetailUpdateDoc()/] +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_masterDetailUpdate')") +@PostMapping("/master-detail-update") +public [aClass.getEntityClassName()/] masterDetailUpdate(@RequestBody [aClass.getEntityClassName()/] [aClass.getEntityClassName().toLowerFirst()/]){ + return [getServiceClassName(aClass).toLowerFirst()/].masterDetailUpdate([aClass.getEntityClassName().toLowerFirst()/]); +} +[/template] + +[** + * Generate method to get all privileges for the given roles + * @author Vittoro Niespolo +*/] +[template public genGetPrivilegesByRoles(oclAny : OclAny)] +/** + * GET /privilege-by-roles: Return a collection of privileges associated to the given roles + * + * @param roles + * @param pageable + * @return + */ +@PreAuthorize(AUTH + "('privilege-per-role_privilege-by-roles')") +@GetMapping("/privilege-by-roles") +public Collection getPrivilegeByRoles(@RequestParam String['['/]] roles) { + Collection privilegePerRoles = new ArrayList<>(); + for (String roleName : roles) { + Role role = new Role(); + role.setObjectKey(roleName); + privilegePerRoles.addAll(privilegePerRoleService.findByTheRole(role, Pageable.unpaged()).getContent()); + } + return privilegePerRoles; +} +[/template] + +[** + * Generate api method to find elements by parent class id + * @author Vittorio Niespolo +*/] +[template public genGetChildByObjectKey(aClass : Class, aModel: Model){childAssociation : Collection(OclAny) = aClass.getChildAssociations();}] +[for(childAss : Association | childAssociation)] +/** + * GET /id/[camelToDash(aClass.getChildClass(childAss).getEntityClassName())/]: Search all [aClass.getChildClass(childAss).getEntityClassName()/] (childs) for the given [aClass.getEntityClassName()/] + * + * @param objectKey ObjectKey of [aClass.getEntityClassName()/] + * @param pageable + * @return Page of [aClass.getChildClass(childAss).getEntityClassName()/] for the given [aClass.getEntityClassName()/] + */ +@GetMapping("/{objectKey:.+}/[camelToDash(aClass.getChildClass(childAss).getEntityClassName())/]") +[genPreAutorize(aClass, camelToUnderscore(getEntityClassName(aClass)).toUpperCase(), 'FIND_BY_'.concat(camelToUnderscore(aClass.getTheChildPropertyName(childAss)).toUpperCase()).concat('OBJECT_KEY'), aModel)/] +public ResponseEntity> get[aClass.getTheChildPropertyName(childAss).toUpperFirst()/]ByObjectKey(@PathVariable String objectKey, Pageable pageable) { + [aClass.getEntityClassName()/] [aClass.getEntityClassName().toLowerFirst()/] = new [aClass.getEntityClassName()/](); + [aClass.getEntityClassName().toLowerFirst()/].setObjectKey(objectKey); + return ResponseEntity.ok().body([aClass.getChildClass(childAss).getEntityClassName().toLowerFirst()/]Service.findBy[aClass.getChildClass(childAss).getTheParentPropertyName(childAss).toUpperFirst()/]([aClass.getEntityClassName().toLowerFirst()/], pageable)); +} +[/for] +[/template] + +[** + * Generate api method to find elements by parent for the given otherParent + * @author Vittorio Niespolo +*/] +[template public genFindOtherParentByParent(aClass : Class){parentAssociations : Collection(OclAny) = aClass.getParentAssociations();}] +[if(parentAssociations -> size() > 1)] +[for(parentAss : Association | parentAssociations)] +[for(otherParentAss : Association | aClass.getParentAssociationsExcluding(parentAss))] +[if(parentAss.isIdentifying() and otherParentAss.isIdentifying())] +/** + * + * GET: /[aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/]/{objectKey:.+}: Return Page of a [aClass.getParentClass(parentAss).getEntityClassName()/] for a given [aClass.getParentClass(otherParentAss).getEntityClassName()/] + * + * @param objectKey + * @param pageable + * @return + */ +@PreAuthorize(AUTH + "('[aClass.getDashedEntityClassName()/]_find[aClass.getParentClass(parentAss).getEntityClassName()/]By[getTheParentPropertyName(aClass, otherParentAss)/]')") +@GetMapping("/[aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/]/{objectKey:.+}") +public Page<[aClass.getParentClass(parentAss).getEntityClassName()/]> find[aClass.getParentClass(parentAss).getEntityClassName()/]By[getTheParentPropertyName(aClass, otherParentAss)/](@PathVariable String objectKey, Pageable pageable) { + [aClass.getParentClass(otherParentAss).getEntityClassName()/] [aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/] = new [aClass.getParentClass(otherParentAss).getEntityClassName()/](); + [aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/].setObjectKey(objectKey); + return [aClass.getEntityClassName().toLowerFirst()/]Service.find[aClass.getParentClass(parentAss).getEntityClassName()/]By[getTheParentPropertyName(aClass, otherParentAss).toString().toUpperFirst()/]([aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/], pageable); +} +[/if] +[/for] +[/for] +[/if] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/dtoUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/dtoUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..8038755ba0ca2ce9d7cda1c1e8823d2dc5d0987d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/dtoUtils.mtl @@ -0,0 +1,107 @@ +[module dtoUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] + +[comment]campi id padre[/comment] +[template public genAttributesFromParent(aClass : Class)post(trim())] +[for(parentAss : Association | aClass.getNotIdentifyingParentAssociations())] +[if(aClass.getParentClass(parentAss).hasCompositeKey()._not())] +[for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())] +private [parentId.type.getJavaType()/] [parentId.getParentIdName(aClass, parentAss)/]; +[/for][/if] +[/for] +[for(parentAss : Association | aClass.getNotIdentifyingParentAssociations())] +@JsonProperty +private String [aClass.getTheParentPropertyName(parentAss)/]ObjectTitle; +@JsonProperty +private String [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; +[/for] + +[comment]campi id padri imported models , da vedere se possiamo direttamente mettere una variabile String parentClassObjectKey[/comment] +[for(parentAss : Association | aClass.getParentAssFromImportedModels())] +[for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())] +@NotNull +private [parentId.type.getJavaType()/] [parentId.getParentIdName(aClass, parentAss)/]; +[/for][/for] +[/template] + +[template public genChildrenDto(aClass : Class)post(trim())] +[comment]Collection figli[/comment] +[for(childAss : Association | aClass.getChildAssociations())] +@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) +private Collection<[getChildDtoClassName(aClass,childAss)/]> [getTheChildPropertyName(aClass, childAss)/]; +[/for] +[comment]Collection figli importati[/comment] +[for(childAss : Association | aClass.getChildAssFromImportedModels())] +@JsonProperty(access = Access.WRITE_ONLY) +private Collection<[getChildDtoClassName(aClass,childAss)/]> [getTheChildPropertyName(aClass, childAss)/]; +[/for] +[/template] + +[template public genDtoAttributes(aClass : Class)post(trim())] +[for(property : Property | aClass.getFiltrableAttributes())] +[if(property.hasDefinition())] +/** +[getDefinition(property)/] +*/[/if] +[genAnnotatedDtoProperty(property, aClass)/] +[/for] +[/template] + +[template public genAnnotatedDtoProperty(property : Property , aClass : Class)] +[genAnnotation(property, aClass)/] +private [property.type.getJavaType()/] [property.name/]; +[/template] + +[template private genAnnotation(property : Property , aClass : Class)] +[comment][if(property.isID)]@NotNull[/if][/comment] +[if(property.type.getJavaType() = 'LocalDate')]@JsonDeserialize(using = LocalDateDeserializer.class) +@JsonSerialize(using = LocalDateSerializer.class)[/if] +[/template] + + +[template public genWriteDtoAttributes(aClass : Class) post (trim())] +[for(property : Property | aClass.getFiltrableAttributes())] +[if(property.hasDefinition())] +/** + [getDefinition(property)/] +*/[/if] +[genAnnotatedDtoProperty(property, aClass)/] +[/for] +[comment]campi id padre[/comment] +[for(parentAss : Association | aClass.getNotIdentifyingParentAssociations())] +private String [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; +[comment][for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())][/comment] +[comment]@NotNull[/comment] +[comment]private [parentId.type.getJavaType()/] [parentId.getParentIdName(aClass, parentAss)/];[/comment] +[comment][/for][/comment] +[/for] + +[comment]campi id padri imported models , da vedere se possiamo direttamente mettere una variabile String parentClassObjectKey[/comment] +[for(parentAss : Association | aClass.getParentAssFromImportedModels())] +private String [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; +[for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())] +[comment]@NotNull[/comment] +private [parentId.type.getJavaType()/] [parentId.getParentIdName(aClass, parentAss)/]; +[/for] +[/for] + +[comment]Collection figli [/comment] +[for(childAss : Association | aClass.getChildAssociations())] +@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) +private Collection<[getChildWriteDtoClassName(aClass,childAss)/]> [getTheChildPropertyName(aClass, childAss)/]; +[/for] + +[comment]Collection figli importati[/comment] +[for(childAss : Association | aClass.getChildAssFromImportedModels())] +@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) +private Collection<[getChildWriteDtoClassName(aClass,childAss)/]> [getTheChildPropertyName(aClass, childAss)/]; +[/for] +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/entityKeyUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/entityKeyUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..2f9d6a9a16d088f4d56f9732c9f889e4109831fc --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/entityKeyUtils.mtl @@ -0,0 +1,201 @@ +[module entityKeyUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::generalUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils/] + +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils/] + + + +[template public genSerialUID(aClass : Class)] +// Generated SERIAL UID +private static final long serialVersionUID = [getGeneratedSerialUID(aClass)/]; +[/template] + +[template public genCKAttributes(aClass : Class)] +[for(id: Property | aClass.getClassIDs())] +[genAnnotatedProperty(id, aClass)/] +[/for] +[for(a : Association | aClass.getIdentifyingParentAssociations())] +[comment][if(a.isParentRequired())][/comment] +@NotNull +[if(isOneToOneRelation(a))] +@OneToOne(fetch = FetchType.EAGER) +[elseif(not(isOneToOneRelation(a)))] +@ManyToOne(fetch = FetchType.LAZY) +[/if] +[if(aClass.getParentClass(a).getClassIDsIncludingFK() -> size() > 1)] +@JoinColumns({ +[/if] +[for(p : Property | aClass.getParentClass(a).getClassIDsIncludingFK()) separator(',')] +@JoinColumn(name = "[getFKColumnName(aClass, a, p)/]", referencedColumnName = "[p.getPhysicalColumnName().camelToUnderscore()/]", nullable = [if(a.isParentRequired() or a.isIdentifying())]false[elseif(not a.isParentRequired() and not a.isIdentifying())]true[/if][if(isInCompositeKey(aClass, p) or isInCompositeKey(aClass.getParentClass(a), p))], insertable = false, updatable = false[/if]) +[/for] +[if(aClass.getParentClass(a).getClassIDsIncludingFK() -> size() > 1)] +}) +[/if] +@JsonBackReference("the[getEntityClassName(aClass)/]") +@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"}, allowSetters = true) +@ToString.Exclude private [aClass.getParentClass(a).name/] [aClass.getTheParentPropertyName(a)/]; +[/for] +[/template] + +[template public genCKGetterSetter(aClass : Class)] +[genCKParentGetter(aClass)/] +[genCKParentSetter(aClass)/] +[/template] + +[template public genCKParentGetter(aClass : Class)] +[for(parentAss : Association | aClass.getIdentifyingParentAssociations())] +/** + * Return the [getParentIdName(aClass, parentAss)/] from [aClass.getTheParentPropertyName(parentAss)/]. + * + * @return [getParentIdName(aClass, parentAss)/] from [aClass.getTheParentPropertyName(parentAss)/]. + */ +@JsonProperty +public [aClass.getParentClass(parentAss).getClassIdType()/] get[getParentIdName(aClass, parentAss).toUpperFirst()/]() { + // If the parent entity object is null, then return null + if (get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]() == null) { + return null; + } + // Return requested attribute + return [aClass.getTheParentPropertyName(parentAss)/].get[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/](); +} +[if(aClass.getParentClass(parentAss).hasCompositeKey())] +[for(id : Property | aClass.getParentClass(parentAss).getClassIDsIncludingFK())] +/** + * Return the [id.name/]. + * + * @return [id.name/]. + */ +@JsonProperty +public [id.type.getJavaType()/] get[id.name.toUpperFirst()/]() { + // If the parent entity object is null, then return null + if (get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]() == null) { + return null; + } + // Return requested attribute + return [aClass.getTheParentPropertyName(parentAss)/].get[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]().get[id.name.toUpperFirst()/](); +} +[/for] +[/if] +[/for] +[/template] + +[template public genCKParentSetter(aClass : Class)] +[for(parentAss : Association | aClass.getIdentifyingParentAssociations())] +/** + * Imposta il valore dell'attributo [getParentIdName(aClass, parentAss)/], appartenente all'oggetto [aClass.getTheParentPropertyName(parentAss)/], nell'entity + * corrente. + * + * @param a[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/] + * + */ +@JsonDeserialize +public void set[getParentIdName(aClass, parentAss).toUpperFirst()/]([aClass.getParentClass(parentAss).getClassIdType()/] a[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]) { + // If the parent entity object is null, then create a new one + if([aClass.getTheParentPropertyName(parentAss)/] == null) + { + [aClass.getTheParentPropertyName(parentAss)/] = new [aClass.getParentClass(parentAss).name.toUpperFirst()/](); + } + // Set value to the attribute + [aClass.getTheParentPropertyName(parentAss)/].set[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/](a[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]); +} +[if(aClass.getParentClass(parentAss).hasCompositeKey())] +[for(id : Property | aClass.getParentClass(parentAss).getClassIDsIncludingFK())] +/** + * Set the [id.name/]. + * @param [id.name/] + * + */ +@JsonProperty +public void set[id.name.toUpperFirst()/]([id.type.getJavaType()/] [id.name/]) { + // If the parent entity object is null, then create a new one + if([aClass.getTheParentPropertyName(parentAss)/] == null) + { + [aClass.getTheParentPropertyName(parentAss)/] = new [aClass.getParentClass(parentAss).name.toUpperFirst()/](); + } + [if(aClass.getParentClass(parentAss).hasCompositeKey())] + if([aClass.getTheParentPropertyName(parentAss)/].get[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]() == null) + { + [aClass.getTheParentPropertyName(parentAss)/].set[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/](new [aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]()); + } + [/if] + // Set value to the attribute + get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]().get[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]().set[id.name.toUpperFirst()/]([id.name/]); +} +[/for] +[/if] +[/for] +[/template] + +[template public genCKConstructor(aClass : Class){ckAttributes: Collection(OclAny) = getCompositeKeyAttributesWithMappedNames(false);}] +public [getKeyClassName(aClass)/]( +[for( p: Property | ckAttributes) separator(',')] +[p.type.getJavaType()/] [p.name/][/for] +[if(aClass.hasParentsWithCK() and ckAttributes->size() >0)],[/if] +[for(parentAss: Association | aClass.getParentAssociationHavingCK()) separator(',')] + [aClass.getParentClass(parentAss).getEntityClassName().toUpperFirst()/]Key [aClass.getParentClass(parentAss).getEntityClassName().toLowerFirst()/]Key +[/for]) + { + [for(p:Property | ckAttributes)] + this.set[p.name.toUpperFirst()/]([p.name/]); + [/for] + [for(parentAss: Association | aClass.getParentAssociationHavingCK())] + this.set[aClass.getParentClass(parentAss).getEntityClassName()/]Key([aClass.getParentClass(parentAss).getEntityClassName().toLowerFirst()/]Key); + [/for] +} + +[/template] + +[template public genOFConstructorForCK(aClass : Class){ckAttributes: Collection(OclAny) = getCompositeKeyAttributesWithMappedNames(false);}] +public static [getEntityCKClassName(aClass)/] of([for( p: Property | ckAttributes) separator(',')] +[p.type.getJavaType()/] [p.name/][/for] +[if(aClass.hasParentsWithCK() and ckAttributes->size() >0)],[/if] +[for(parentAss: Association | aClass.getParentAssociationHavingCK()) separator(',')] + [aClass.getParentClass(parentAss).getEntityClassName().toUpperFirst()/]Key [aClass.getParentClass(parentAss).getEntityClassName().toLowerFirst()/]Key[/for]){ + return new [getEntityCKClassName(aClass)/]([for( p: Property | ckAttributes) separator(',')][p.name/][/for][if(aClass.hasParentsWithCK() and ckAttributes->size() >0)],[/if][for(parentAss: Association | aClass.getParentAssociationHavingCK())] + [aClass.getParentClass(parentAss).getEntityClassName().toLowerFirst()/]Key[/for]); +} +[/template] + +[template public genCKEquals(aClass : Class)] +@Override +public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + [getEntityCKClassName(aClass)/] that = ([getEntityCKClassName(aClass)/]) obj; + + [for(parent : Association | aClass.getIdentifyingParentAssociations())] + if (!Objects.equals([aClass.getTheParentPropertyName(parent)/],that.[aClass.getTheParentPropertyName(parent)/])) return false; + [/for] + return true; +} +[/template] + +[template public genCKHashCode(aClass : Class)] + @Override +public int hashCode() { + int result = 0; + [for(parent : Association | aClass.getIdentifyingParentAssociations())] + result = result + ([getTheParentPropertyName(aClass,parent)/] != null ? [getTheParentPropertyName(aClass,parent)/].hashCode() : 0); + [/for] + result = 31 * result; + return result; +} +[/template] + +[template public getFKColumnName(aClass : Class, a: Association, p: Property)] +[if(a.isSelfRelation())][camelToUnderscore(getTheSelfPropertyName(getChildClass(aClass, a), a)).concat('_')/][/if][camelToUnderscore(a.getPhysicalMappedName(p))/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/entityUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/entityUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..44b44acaa741cda06a10bb2de6c6f166c7bcaaa0 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/entityUtils.mtl @@ -0,0 +1,436 @@ +[comment encoding = UTF-8 /] + +[comment] + +Entity Utilities Templates + +[/comment] + +[module entityUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::generalUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils/] + +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] + + + +[template public genAddChild(aClass : Class){childAssociations : Collection(OclAny) = aClass.getChildAssociations();}] +[for(childAss : Association | childAssociations)] +public void add[aClass.getChildEntityName(childAss).toUpperFirst()/]([aClass.getChildClass(childAss).name/] [aClass.getChildClass(childAss).name.toLowerFirst()/]){ + [aClass.getTheChildPropertyName(childAss).toLowerFirst()/].add([aClass.getChildClass(childAss).name.toLowerFirst()/]); +} +[/for] +[/template] + +[template public genConstructor(aClass : Class){attributes : Collection(Property) = aClass.getAttributesWithoutIDs();}] +public [aClass.getEntityClassName()/](String objectKey) +{ + super(); + setObjectKey(objectKey); +[comment] [if(aClass.hasGeneralClass())] + set[aClass.getClassIdName().toUpperFirst()/]([aClass.getClassIdName()/]); + [else] + this.[aClass.getClassIdName()/] = [aClass.getClassIdName()/]; + [/if] + [if(aClass.hasExternalPK())] + [for(a : Association | aClass.getParentAssociations())] + this.[aClass.getTheParentPropertyName(a)/] = new [aClass.getParentClass(a).name.toUpperFirst()/](); + [for(parentId:Property | aClass.getParentClass(a).getClassIDs())] + this.[aClass.getTheParentPropertyName(a)/].set[parentId.name.toUpperFirst()/](this.[aClass.getClassIdName()/].get[parentId.name.toUpperFirst()/]()); + [/for] + [/for] + [/if][/comment] +} +[if(aClass.getAttributesWithoutIDs()->size() >= 1 or (aClass.getAttributesWithoutIDs()->size() = 1 and aClass.getStringProperties()->size() = 0))] +public [aClass.getEntityClassName()/]([if(aClass.hasCompositeKey())][aClass.getKeyClassName()/] [aClass.getKeyClassName().toLowerFirst()/], [/if][comment]Composite Key[/comment] +[for(p: Property | aClass.getAttributesWithoutIDs())separator(', ')][comment]Attributi interni[/comment] +[p.type.getJavaType()/] [p.name/][/for] +[comment]Ids[/comment] +[if(aClass.hasCompositeKey()._not())], [for(p: Property | aClass.getClassIDs())separator(', ')] +[p.type.getJavaType()/] [p.name/][/for][/if]) +{ + super(); + + [comment] CompositeKey [/comment] + [if(aClass.hasCompositeKey())] + this.[aClass.getKeyClassName().toLowerFirst()/] = [aClass.getKeyClassName().toLowerFirst()/]; + [/if] + + [comment] Attributi non ID [/comment] + [for(attribute:Property | aClass.getAttributesWithoutIDs())] + this.[attribute.name/] = [attribute.name/]; + [/for] + [comment] ID interni [/comment] + [if(aClass.hasCompositeKey()._not())] + [for(attribute: Property | aClass.getClassIDs())separator(', ')] + this.[attribute.name/] = [attribute.name/];[/for][/if] + } +[/if] +[/template] + +[** + * Generate annotations for a Property of a Class + * @author: Vittorio Niespolo +*/] +[template public genAnnotation(aProperty : Property, aClass : Class) post(trim()) {definition : String = aProperty.getColumnDefinition(aClass); length : Integer = aProperty.getPhysicalColumnLenght();}] +[if(aProperty.isID and aClass.hasCompositeKey()._not())]@Id +[if(aClass.hasAutogeneratedId())]@GeneratedValue(strategy = GenerationType.IDENTITY)[/if] +[elseif(aProperty.isRequired())]@NotNull +[/if] +[if(aProperty.isID and aClass.hasCompositeKey()._not() and aClass.hasDefinition() and aClass.hasAutogeneratedId())]//WARNING For some RDBMS this syntax may not work. Manually delete COMMENT if you are not using Mysql.[/if] +@Column(name = "[aProperty.getPhysicalColumnName()/]"[if(isInCompositeKey(aClass, aProperty))], insertable = false, updatable = false[/if] +, columnDefinition="[definition/]" +) +[if(aProperty.isDateTime())]@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")[/if] +[/template] + +[** + * Generate annoted Property for a Class + * @author: Vittorio Niespolo +*/] +[template public genAnnotatedProperty(aProperty: Property, aClass : Class) post(trim())] +[genAnnotation(aProperty, aClass)/] +private [aProperty.type.getJavaType()/] [aProperty.name/]; +[/template] + +[** + * Generate basic operations for a Class + * @author: Vittorio Niespolo +*/] +[template public genOperations(aClass : Class)] +[for (o: Operation | aClass.ownedOperation) separator('\n')] +public void [o.name/]() { + // TODO should be implemented +} +[/for] +[/template] + +[** + * Generate basic getter and setter for a Class + * @author: Vittorio Niespolo +*/] +[template public genGetterSetter(aClass : Class)] +[if(aClass.hasCompositeKey()._not())] +[for (p: Property | aClass.getClassIDs())] +[genGetter(p)/] +[genSetter(p)/] +[/for] +[/if] +[for (p: Property | aClass.getAttributesWithoutIDs())] +[genGetter(p)/] +[genSetter(p)/] +[/for] +[/template] + +[** + * Generate basic getter for a Property + * @author: Vittorio Niespolo +*/] +[template public genGetter(aProperty: Property)] +/** + * @return the [aProperty.name/] + */ +[if(aProperty.isBoolean())] +public boolean is[aProperty.name.toUpperFirst()/]() { + return (this.[aProperty.name/] == null) ? false : this.[aProperty.name/].booleanValue(); +} +[else] +public [aProperty.type.getJavaType()/] get[aProperty.name.toUpperFirst()/]() { + return this.[aProperty.name/]; +} +[/if] +[/template] + +[** + * Generate basic setter for a Property + * @author: Vittorio Niespolo +*/] +[template public genSetter(aProperty: Property)] +/** + * @param [aProperty.name/] to set + */ +public void set[aProperty.name.toUpperFirst()/]([aProperty.type.getJavaType() /] [aProperty.name/]) { + this.[aProperty.name/] = [aProperty.name/]; +} +[/template] + +[** + * Generate a getter method with a given propertyName and TypeName + * @author: Vittorio Niespolo +*/] +[template public genGetterByPropNameNType(propertyName: String, typeName : String)] +/** + * @return the [propertyName/] + */ +public [typeName/] get[propertyName.toUpperFirst()/]() { + return this.[propertyName/]; +} +[/template] + +[** + * Generate a setter method with a given propertyName and TypeName + * @author: Vittorio Niespolo +*/] +[template public genSetterByPropNameNType(propertyName: String, typeName : String)] +/** + * @param [propertyName/] to set + */ +public void set[propertyName.toUpperFirst()/]([typeName/] [propertyName/]) { + this.[propertyName/] = [propertyName/]; +} +[/template] + +[** + * Generate a random serial UID for a Java Serialized Class + * @author: Vittorio Niespolo +*/] +[template public genSerialUID(aClass : Class)] +// Generated SERIAL VERSION UID +private static final long serialVersionUID = [getGeneratedSerialUID(aClass)/]; +[/template] + +[** + * Generate annoted attributes for a Class + * @author: Vittorio Niespolo +*/] +[template public genAttributes(aClass : Class)] +[if(aClass.hasCompositeKey()._not())] +[for (p: Property | aClass.getClassIDs())] +[genAttribute(aClass, p)/] +[/for] +[/if] +[for (p: Property | aClass.getAttributesWithoutIDs())] +[genAttribute(aClass, p)/] +[/for] +[/template] + +[template public genAttribute(aClass: Class, p: Property)] +[if(getDefinition(p).oclIsUndefined()._not() and getDefinition(p).toString().size() <> 0)] +/** + [getDefinition(p)/] +*/ +[/if] +[genAnnotatedProperty(p, aClass)/] +[/template] + +[** + * Generate CompositeKey constructor using fields + * @author Vittorio Niespolo +*/] +[template public genCompositeKeyConstructor(aClass : Class){ckAttributes: Collection(OclAny) = getCompositeKeyAttributesWithMappedNames(false);}] +public [getKeyClassName(aClass)/]( +[for( p: Property | ckAttributes) separator(',')] +[p.type.getJavaType()/] [p.name/][/for]) + { + super(); + [for(p:Property | ckAttributes)] + this.[p.name/] = [p.name/]; + [/for] +} +[/template] + +[** + * Generate CompositeKey for the Class + * @author: Vittorio Niespolo +*/] +[template public genCompositeKey(aClass : Class, aModel : Model){ckAttributes: Collection(OclAny) = getCompositeKeyAttributesWithMappedNames(false);}] +@Embeddable +public static class [getKeyClassName(aClass)/] implements Serializable { + + /** + * Default Constructor + */ + public [getKeyClassName(aClass)/]() { + // TODO Auto-generated constructor stub + } + + /** + * Generated serial UID + */ + private static final long serialVersionUID = [getGeneratedSerialUID()/]; + + // ATTRIBUTES + [for(p : Property | ckAttributes) separator('\n')] + @Column(name = "[camelToUnderscore(p.name)/]") + [p.type.getJavaType()/] [p.name/]; + [/for] + + // GETTER/SETTER + [for (p: Property | ckAttributes) separator('\n')] + [genGetter(p)/] + [genSetter(p)/] + [/for] + + //FIELDS CONSTRUCTOR + [genCompositeKeyConstructor(aClass)/] + + public String toString(){ + StringBuilder output = new StringBuilder(); + [for (p: Property | ckAttributes) separator('\noutput.append("-");\n')] + output.append([p.name/]); + [/for] + return output.toString(); + } +} +[/template] + +[template public genPrePersist(aClass : Class, aModel : Model)] +// PREPERSIST +[if(aClass.hasCompositeKey())] +public void syncCK() { +if([getKeyClassName(aClass).toLowerFirst()/] == null) { + [getKeyClassName(aClass).toLowerFirst()/] = new [getKeyClassName(aClass).toUpperFirst()/](); +} +[for(a : Association | aClass.getIdentifyingParentAssociations())] + if(get[aClass.getTheParentPropertyName(a).toUpperFirst()/]() != null) { + [getKeyClassName(aClass).toLowerFirst()/].set[aClass.getParentIdName(a).toUpperFirst()/](get[aClass.getTheParentPropertyName(a).toUpperFirst()/]().get[aClass.getParentIdName(a).toUpperFirst()/]()); + } +[/for] +} +[/if] + +@PrePersist +[if(aModel.isCachingEnabled())] +[if(aClass.isInPrivilegePerRoleRole())] +@CacheEvict(value ="PrivilegePerRole", key = "#privilegePerRoleKey") +[/if] +[/if] +public void prePersist() { +[if(aClass.hasCompositeKey())] + syncCK(); +[/if] +} + +[if(aModel.isCachingEnabled())] +[if(aClass.isInPrivilegePerRoleRole())] +@PreRemove +@CacheEvict(value ="PrivilegePerRole", key = "#privilegePerRoleKey") +public void PreRemove() { + +} +[/if] +[/if] +[/template] + +[template public genPreUpdate(aClass : Class, aModel : Model)] +[if(aModel.isCachingEnabled())] +[if(aClass.isInPrivilegePerRoleRole())] +@CacheEvict(value ="PrivilegePerRole", key = "#privilegePerRoleKey") +[/if] +[/if] +@PreUpdate +public void PreUpdate() { +[if(aClass.hasCompositeKey())] + syncCK(); +[/if] +} +[/template] + +[template public genGetObjectTitle(aClass : Class)] +public String getObjectTitle() { + StringBuilder output = new StringBuilder(); + output.append(get[aClass.getFirstStringAttribute()/]()); + return output.toString(); +} +[/template] + +[template public getPhysicalTableName(aClass : Class)] +[if(aClass.getTableName().oclIsUndefined() or aClass.getTableName() = '')] +[camelToUnderscore(aClass.getEntityClassName())/][else] +[camelToUnderscore(aClass.getTableName())/][/if] +[/template] + +[comment] +Metodo per creare la proprety Key per Entity quando questa risulta avere una CK che gestiamo con una classe Key +[/comment] +[template public genCompositeKeyProperty(aClass : Class)] +@EmbeddedId +private [getEntityCKClassName(aClass)/] [getEntityCKClassName(aClass).toString().toLowerFirst()/]; +[/template] + +[comment] +Metodo per creare i getter e setter delle proprerty dei parent quando la entity ha CK e quindi una classe Key +a cui fare riferimento per accedere ai padri +[/comment] +[template public genCKParentGetterSetter(aClass : Class)] +[for(parent : Association | aClass.getIdentifyingParentAssociations())] +[genCKGetter(parent, aClass)/] +[genCKSetter(parent, aClass)/] +[/for] +[if(aClass.hasCompositeKey())] +[for(id : Property | aClass.getClassIDs())] +[genInternalCKGetter(aClass, id)/] +[genInternalCKSetter(aClass, id)/] +[/for] +[/if] +[/template] + +[template public genInternalCKGetter(aClass : Class, id: Property)] +/** +* @return the [id.getNaturalLanguageName()/] +*/ +@JsonProperty(access = Access.WRITE_ONLY) +public [id.type.getJavaType()/] get[id.name.toUpperFirst()/](){ + return [getEntityCKClassName(aClass).toString().toLowerFirst()/] != null ? [getEntityCKClassName(aClass).toString().toLowerFirst()/].get[id.name.toUpperFirst()/]() : null; +} +[/template] + +[template public genInternalCKSetter(aClass : Class, id: Property)] +/** + * @param a[id.getNaturalLanguageName()/] to set + */ +public void set[id.name.toUpperFirst()/]([id.type.getJavaType()/] [id.name/]){ + if([getEntityCKClassName(aClass).toString().toLowerFirst()/] == null){ + [getEntityCKClassName(aClass).toString().toLowerFirst()/] = new [getEntityCKClassName(aClass)/](); + } + [getEntityCKClassName(aClass).toString().toLowerFirst()/].set[id.name.toUpperFirst()/]([id.name/]); +} +[/template] + +[template public genCKGetter(parent : Association,aClass : Class)] +/** +* @return the [getEntityClassName(aClass.getParentClass(parent))/] +*/ +@JsonProperty(access = Access.WRITE_ONLY) +public [getEntityClassName(aClass.getParentClass(parent))/] get[getTheParentPropertyName(aClass,parent).toString().toUpperFirst()/](){ + return [getEntityCKClassName(aClass).toString().toLowerFirst()/] != null ? [getEntityCKClassName(aClass).toString().toLowerFirst()/].get[getTheParentPropertyName(aClass,parent).toString().toUpperFirst()/]() : null; +} +[/template] + +[template public genCKSetter(parent : Association,aClass : Class)] +/** + * @param a[getEntityClassName(aClass.getParentClass(parent))/] to set + */ +public void set[getTheParentPropertyName(aClass,parent).toString().toUpperFirst()/]([getEntityClassName(aClass.getParentClass(parent))/] a[getEntityClassName(aClass.getParentClass(parent))/]){ + if([getEntityCKClassName(aClass).toString().toLowerFirst()/] == null){ + [getEntityCKClassName(aClass).toString().toLowerFirst()/] = new [getEntityCKClassName(aClass)/](); + } + [getEntityCKClassName(aClass).toString().toLowerFirst()/].set[getTheParentPropertyName(aClass,parent).toString().toUpperFirst()/](a[getEntityClassName(aClass.getParentClass(parent))/]); +} +[/template] + +[template public genEqualsHashcode(aClass: Class)] +@Override +public boolean equals(Object o) { + if (this == o) return true; + if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false; + [aClass.getEntityClassName()/] that = ([aClass.getEntityClassName()/]) o; + return [aClass.getClassIdName().toLowerFirst()/] != null && Objects.equals([aClass.getClassIdName().toLowerFirst()/], that.[aClass.getClassIdName().toLowerFirst()/]); +} + +@Override +public int hashCode() { + return Objects.hash([aClass.getClassIdName().toLowerFirst()/]); +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/fileNameUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/fileNameUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..c6173b485bcdf7413285abcc272255795032bafe --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/fileNameUtils.mtl @@ -0,0 +1,380 @@ +[comment encoding = UTF-8 /] +[module fileNameUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[comment]READ ME : tutte le funzioni con l'if sono stato rifattorizzate in modo da + essere riusate anche nel caso dei MicroServizi , il ramo else rappresenta ciò che + facevano normalmente con springboot[/comment] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::folderUtils/] +[template public getMainClassFileName(oclAny: OclAny)] +[getMainClassFolderName().concat(getMainClassNameAsMs()).concat('.java')/] +[/template] + +[template public getWebConfigFileName(oclAny : OclAny)] +[getMainClassFolderName().concat(getWebConfigClassName()).concat('.java')/] +[/template] + +[template public getPermissionFileName(oclAny : OclAny)] +[getWebSecurityFolderName().concat('Permission.java')/] +[/template] + +[template public getControllerFileName(aClass : Class)] +[getControllerFolderName().concat(aClass.getControllerClassName()).concat('.java')/] +[/template] + +[template public getAssemblerFileName(aClass : Class)] +[getAssemblerFolderName().concat(aClass.getAssemblerClassName()).concat('.java')/] +[/template] + +[template public getServiceFileName(aType : Type)] +[getServiceFolderName().concat(aType.name).concat('Service.java')/] +[/template] + +[template public getServiceImplFileName(aType : Type)] +[getServiceImplFolderName().concat(aType.name).concat('ServiceImpl.java')/] +[/template] + +[template public getBaseServiceImplFileName(isMsLib : Boolean)] +[if(isMsLib)] +[getMsServiceImplFolderName().concat('BaseServiceImpl.java')/] +[else] +[getServiceImplFolderName().concat('BaseServiceImpl.java')/] +[/if] +[/template] + +[template public getEntityFileName(aType : Type)] +[getEntityFolderName(aType).concat(aType.name).concat('.java')/] +[/template] + +[template public getEntityCKFileName(aType : Type)] +[getEntityFolderName(aType).concat(aType.name).concat('Key.java')/] +[/template] + +[template public getRepositoryFileName(aType : Type)] +[getRepositoryFolderName(aType).concat(aType.name).concat('Repository.java')/] +[/template] + +[template public getGlobalExceptionFileName(oclAny : OclAny)] +[getAdvicesFolderName().concat('/GlobalExceptionHandler.java')/] +[/template] + +[template public getMsWebApplicationYMLName(oclAny : OclAny)] +[getWebResourceFolderName().concat('/application.yml')/] +[/template] + +[template public getSecurityConfigFileName(oclAny : OclAny)] +[getConfigFolderName().concat('/SecurityConfig.java')/] +[/template] + +[template public getMapperConfigFileName(oclAny : OclAny)] +[getConfigFolderName().concat('/MapperConfig.java')/] +[/template] + +[template public getCriteriaFileName(aType : Type)] +[getCriteriaFolderName(aType).concat(aType.name).concat('Criteria.java')/] +[/template] + +[template public getParentPomFileName(oclAny : OclAny)] +[getParentModuleFolderName().concat('/pom.xml')/] +[/template] + +[template public getCorePomFileName(oclAny : OclAny)] +[getCoreModuleFolderName().concat('/pom.xml')/] +[/template] + +[template public getImplPomFileName(oclAny : OclAny)] +[getImplModuleFolderName().concat('/pom.xml')/] +[/template] + +[template public getWebPomFileName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/pom.xml')/] +[/template] + +[template public getPermissionsFileName(oclAny : OclAny)] +[getRootFolderName().concat('/sql/permissions.sql')/] +[/template] + +[template public getBaseEntityFileName(isMsLib : Boolean)] +[if(isMsLib)] +[getMsEntityFolderName().concat('/BaseEntity.java')/] +[else] +[getEntityFolderName().concat('/BaseEntity.java')/] +[/if] +[/template] + +[template public getBaseDTOFileName(oclAny:OclAny)] +[getBaseDTOFolderName().concat('/BaseDto.java')/] +[/template] + +[template public getBaseEntityServiceFileName(isMsLib : Boolean)] +[if(isMsLib)] +[getMsServiceFolderName().concat('/BaseEntityService.java')/] +[else] +[getServiceFolderName().concat('/BaseEntityService.java')/] +[/if] +[/template] + +[template public getBaseEntityServiceImplFileName(oclAny : OclAny)] +[getServiceImplFolderName().concat('/BaseEntityServiceImpl.java')/] +[/template] + +[template public getBaseControllerFileName(isMsLib : Boolean)] +[if(isMsLib)] +[getMsControllerFolderName().concat('BaseController.java')/] +[else] +[getControllerFolderName().concat('/BaseController.java')/] +[/if] +[/template] + + +[comment]Dto nella cartella web di ogni microservice[/comment] +[template public getEntityDtoFileName(aClass : Class)] +[getDtoFolderName().concat(aClass.name).concat('Dto').concat('.java')/] +[/template] + +[template public getDtoWriteFileName(aClass : Class)] +[getDtoFolderName().concat(aClass.name).concat('WriteDto').concat('.java')/] +[/template] + +[template public getKeyDtoFileName(aClass : Class)] +[getDtoFolderName().concat(aClass.name).concat('KeyDto').concat('.java')/] +[/template] + +[template public getMailWriteDtoFileName(oclAny : OclAny)] +[getDtoFolderName().concat('MailWriteDto').concat('.java')/] +[/template] + +[template public getBaseRepositoryFileName(isMsLib: Boolean )] +[if(isMsLib)] +[getMsRepositoryFolderName().concat('BaseRepository.java')/] +[else] +[getRepositoryFolderName().concat('/BaseRepository.java')/] +[/if] +[/template] + + +[template public getBaseAttachmentControllerFileName(isMsLib : Boolean)] +[if(isMsLib)] +[getMsControllerFolderName().concat('BaseAttachmentController.java')/] +[else] +[getControllerFolderName().concat('/BaseAttachmentController.java')/] +[/if] +[/template] + +[template public getBaseAssemblerFileName(oclAny:OclAny)] +[getBaseAssemblerFolderName().concat('/BaseModelAssembler.java')/] +[/template] + +[template public getBaseResponseFileName(oclAny:OclAny)] +[getResponseLibsFolderName().concat('/BaseResponse.java')/] +[/template] + +[comment][template public getApplicationPropertiesFileName(profile : String)] +[getResourcesFolderName().concat('/application-').concat(profile).concat('.properties')/] +[/template][/comment] + +[template public getApplicationResourcesFileName(lang : String)] +[getResourcesFolderName().concat('/applicationResources').concat(lang).concat('.properties')/] +[/template] + +[template public getUpdateLiquibaseFileName(oclAny : OclAny)] +[getLiquibaseFolderName().concat('/update.xml')/] +[/template] + +[template public getConstantsFileName(isMs : Boolean)] +[if(isMs)] +[getLibsUtilitiesFolderName().concat('/Constants.java')/] +[else] +[getUtilitiesFolderName().concat('/Constants.java')/] +[/if] +[/template] + +[template public getServiceMailName(oclAny : OclAny)] +[getServiceFolderName().concat('/MailManagerService.java')/] +[/template] + +[template public getServiceImplMailName(oclAny : OclAny)] +[getServiceImplFolderName().concat('/MailManagerServiceImpl.java')/] +[/template] + +[template public getInitSecurityScriptXMLFileName(oclAny : OclAny)] +[getLiquibaseFolderName().concat('/changeset/initSecurityScript.xml')/] +[/template] + +[template public getInitSecurityScriptSQLFileName(oclAny : OclAny)] +[getLiquibaseFolderName().concat('/sql/initSecurityScript.sql')/] +[/template] + +[template public getLog4j2PropertiesFileName(oclAny : OclAny)] +[getResourcesFolderName().concat('/log4j2.xml')/] +[/template] + +[template public getAuditableFileName(isMs : Boolean)] +[if(isMs)] +[getLibsUtilitiesFolderName().concat('/Auditable.java')/] +[else] +[getUtilitiesFolderName().concat('/Auditable.java')/] +[/if] +[/template] + +[template public getJasperReportFileName(isMs:Boolean)] +[if(isMs)] +[getLibsUtilitiesFolderName().concat('/JasperReportsCache.java')/] +[else] +[getUtilitiesFolderName().concat('/JasperReportsCache.java')/] +[/if] +[/template] + +[** + * Getter for AuthController file's name + * @author Vittorio Niespolo +*/] +[template public getAuthControllerFileName(oclAny : OclAny)] +[getControllerFolderName().concat('/AuthController.java')/] +[/template] + +[** + * Getter for AuthenticationEntryPointBean file's name + * @author Vittorio Niespolo +*/] +[template public getAuthenticationEntryPointBeanFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/AuthenticationEntryPointBean.java')/] +[/template] + +[** + * Getter for AuthenticationFilterBean file's name + * @author Vittorio Niespolo +*/] +[template public getAuthenticationFilterBeanFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/AuthenticationFilterBean.java')/] +[/template] + +[** + * Getter for AuthenticationProviderBean file's name + * @author Vittorio Niespolo +*/] +[template public getAuthenticationProviderBeanFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/AuthenticationProviderBean.java')/] +[/template] + +[** + * Getter for PasswordEncoderBean file's name + * @author Vittorio Niespolo +*/] +[template public getPasswordEncoderBeanFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/PasswordEncoderBean.java')/] +[/template] + +[** + * Getter for AccessDeniedHandlerBean file's name + * @author Vittorio Niespolo +*/] +[template public getAccessDeniedHandlerBeanFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/AccessDeniedHandlerBean.java')/] +[/template] + +[template public getAuthServiceFileName(oclAny : OclAny)] +[getServiceFolderName().concat('/AuthService.java')/] +[/template] + +[template public getAuthServiceImplFileName(oclAny : OclAny)] +[getServiceImplFolderName().concat('/AuthServiceImpl.java')/] +[/template] + +[template public getSecurityUserDetailRepositoryFileName(oclAny : OclAny)] +[getRepositoryFolderName().concat('/SecurityUserDetailRepository.java')/] +[/template] + +[template public getSecurityUserDetailServiceImplFileName(oclAny : OclAny)] +[getServiceImplFolderName().concat('/SecurityUserDetailServiceImpl.java')/] +[/template] + +[template public getWebSecurityConfigurerFileName(oclAny : OclAny)] +[getMainClassFolderName().concat('/WebSecurityConfigurer.java')/] +[/template] + +[template public getCustomMethodSecurityExpressionHandlerFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/CustomMethodSecurityExpressionHandler.java')/] +[/template] + +[template public getCustomSecurityExpressionRootFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/CustomSecurityExpressionRoot.java')/] +[/template] + +[template public getCustomPermissionEvaluatorFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/CustomPermissionEvaluator.java')/] +[/template] + +[template public getMethodSecurityConfigFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/MethodSecurityConfig.java')/] +[/template] + +[template public getCustomMethodSecurityExpressionRootFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/CustomMethodSecurityExpressionRoot.java')/] +[/template] + +[template public getUserNotFoundExceptionFileName(oclAny : OclAny)] +[getSecurityFolderName().concat('/UserNotFoundException.java')/] +[/template] + +[template public getCacheConfigFileName(isMs : Boolean)] +[if(isMs)] +[getLibsUtilitiesFolderName().concat('/CacheConfig.java')/] +[else] +[getUtilitiesFolderName().concat('/CacheConfig.java')/] +[/if] +[/template] + +[template public getResourceFileName(aType : Type)] +[getWebResourceFolderName().concat(aType.name).concat('Resource.java')/] +[/template] + +[template public getApplicationPropertiesFileName(profile: String)] +[getResourcesFolderName().concat('/application')/][if(not profile.equalsIgnoreCase(''))]-[profile/][/if].properties +[/template] + +[template public getDbScriptFileName(oclAny : OclAny)] +[getLiquiBaseSqlFolderName().concat('/initDbScript.sql')/] +[/template] + +[template public getMailControllerFileName(oclAny : OclAny)] +[getControllerFolderName().concat('MailController.java')/] +[/template] + +[template public getResourceServerSecurityConfigFileName(oclAny:OclAny)] +[getLibsSecurityFolderName().concat('/ResourceServerSecurityConfig.java')/] +[/template] + +[template public genKeycloakRealmRoleConverterFileName(oclAny:OclAny)] +[getLibsSecurityFolderName().concat('/KeycloakRealmRoleConverter.java')/] +[/template] + +[template public getMsInterceptorFileName(oclAny : OclAny)] +[getActuatorFolderName().concat('/').concat(getMainClassNameAsMs()).concat('Interceptor.java')/] +[/template] + +[template public getMsPropertiesFileName(oclAny : OclAny)] +[getActuatorFolderName().concat('/').concat(getMainClassNameAsMs()).concat('Properties.java')/] +[/template] + +[template public getMsConfigFileName(oclAny : OclAny)] +[getConfigFolderName().concat('/').concat(getMainClassNameAsMs()).concat('Config.java')/] +[/template] + +[template public getLiquibaseConfigurationBeanFileName(oclAny : OclAny)] +[getConfigFolderName().concat('/LiquibaseConfigurationBean.java')/] +[/template] + +[template public getCustomSpringLiquibaseFileName(oclAny : OclAny)] +[getConfigFolderName().concat('/CustomSpringLiquibase.java')/] +[/template] + +[template public getBaseEntityServiceMongoFileName(oclAny : OclAny)] +[getMsServiceFolderName().concat('/BaseEntityServiceMongo.java')/] +[/template] + +[template public getJPAAutditConfigFileName(oclAny:OclAny)] +[getLibsSecurityFolderName().concat('/JPAAuditConfig.java')/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/filterUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/filterUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..ba628770d88711062e04387409566751605b6c3f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/filterUtils.mtl @@ -0,0 +1,145 @@ +[comment encoding = UTF-8 /] +[module filterUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::generalUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] + + +[template public genFilterProperties(aClass : Class)] +[for (attribute : Property | aClass.getFiltrableAttributes()) separator('\n')] +private [getFilterType(attribute.type)/] [attribute.name/]; +[/for] +[/template] + + +[template public genFilterGetterSetter(aClass : Class)] +[for (p:Property | aClass.getFiltrableAttributes())] +/** + * @return the [p.name/] + */ +public [p.type.getJavaType().concat('Filter')/] get[p.name.toUpperFirst()/]() { + return this.[p.name/]; +} + +/** + * @param [p.name/] to set + */ +public void set[p.name.toUpperFirst()/]([p.type.getJavaType().concat('Filter') /] [p.name/]) { + this.[p.name/] = [p.name/]; +} +[/for] +[/template] + +[comment]@author Simone Punzo +generate getters and setters for filters imported father[/comment] +[template public genFilterImportedFatherGetterSetter(aClass : Class)] +[for(parentAss: Association | aClass.getParentAssFromImportedModels())] +[comment] [for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())] +/** + * @return the [parentId.getParentPropAssName(aClass, parentAss) /] + */ + +public [parentId.type.getFilterType()/] get[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst() /](){ + return this.[parentId.getParentPropAssName(aClass, parentAss)/]; +} + +/** + * @param [parentId.getParentPropAssName(aClass, parentAss) /] to set + */ +public void set[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst() /] ([parentId.type.getFilterType()/] [parentId.getParentPropAssName(aClass, parentAss) /]) { + this.[parentId.getParentPropAssName(aClass, parentAss) /] = [parentId.getParentPropAssName(aClass, parentAss) /]; +} + [/for][/comment] + + public String get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey() { + return [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; + } + + public void set[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey(String [aClass.getTheParentPropertyName(parentAss)/]ObjectKey) { + this.[aClass.getTheParentPropertyName(parentAss)/]ObjectKey = [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; + } +[/for] +[/template] + +[comment] +@autor Luca Barone +generates setters and getters for filters father +[/comment] +[template public genFilterFatherGetterSetter(aClass : Class)] +[for(parentAss: Association | getParentAssociations(aClass))] +[comment] [for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())] +/** + * @return the [parentId.getParentPropAssName(aClass, parentAss) /] + */ + +public [parentId.type.getFilterType()/] get[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst() /](){ + return this.[parentId.getParentPropAssName(aClass, parentAss)/]; +} + +/** + * @param [parentId.getParentPropAssName(aClass, parentAss) /] to set + */ +public void set[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst() /] ([parentId.type.getFilterType()/] [parentId.getParentPropAssName(aClass, parentAss) /]) { + this.[parentId.getParentPropAssName(aClass, parentAss) /] = [parentId.getParentPropAssName(aClass, parentAss) /]; +} +[/for][/comment] + + public String get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey() { + return [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; + } + + public void set[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey(String [aClass.getTheParentPropertyName(parentAss)/]ObjectKey) { + this.[aClass.getTheParentPropertyName(parentAss)/]ObjectKey = [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; + } +[/for] + +[/template] + +[comment] +@autor Luca Barone +generates class-filter for filters compositeKey of father +[/comment] +[template public genFatherCompositeFilter(aClass : Class)] +[for(fClass: Class | getParentClasses(aClass))] + [if(hasCompositeKey(fClass))] +@Embeddable +public static class [getClassIdType(fClass)/]Filter extends it.micegroup.voila2runtime.filter.Filter<[getClassIdType(fClass)/]> { + + /** + * Generated serial UID + */ + private static final long serialVersionUID = [getGeneratedSerialUID()/]; + + /** + * Default Constructor + */ + public [getClassIdType(fClass)/]Filter() { + // TODO Auto-generated constructor stub + } +} + [/if] +[/for] +[/template] + +[template public genFilterPropertiesFather(aClass : Class)] +[for(parentAss: Association | getParentAssociations(aClass))] +[comment] [for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())] +private [parentId.type.getFilterType()/] [parentId.getParentPropAssName(aClass, parentAss) /]; + [/for][/comment] +private String [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; +[/for] +[/template] + +[template public genFilterPropertiesImportedFather(aClass: Class)] +[for(parentAss : Association | aClass.getParentAssFromImportedModels())] +[comment] [for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())] +private [parentId.type.getFilterType()/] [parentId.getParentPropAssName(aClass , parentAss)/]; + [/for][/comment] +private String [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; +[/for] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/folderUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/folderUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..0053ab647af3c765412a39791bb008ddabf8a82c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/folderUtils.mtl @@ -0,0 +1,151 @@ +[comment encoding = UTF-8 /] +[module folderUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties /] + +[template public getWebModuleName(oclAny : OclAny)] +[getArtifact().concat('-web')/] +[/template] + +[template public getCoreModuleName(oclAny : OclAny)] +[getArtifact().concat('-core')/] +[/template] + +[template public getModelModuleName(oclAny : OclAny)] +[getArtifact().concat('-model')/] +[/template] + +[template public getImplModuleName(oclAny : OclAny)] +[getArtifact().concat('-impl')/] +[/template] + +[template public getAngularModuleName(oclAny : OclAny)] +[getArtifact().concat('-angular2')/] +[/template] + +[template public getWebModuleFolderName(oclAny : OclAny)] +[getArtifact().concat('/modules/').concat(getWebModuleName())/] +[/template] + +[template public getCoreModuleFolderName(oclAny : OclAny)] +[getArtifact().concat('/modules/').concat(getCoreModuleName())/] +[/template] + +[template public getImplModuleFolderName(oclAny : OclAny)] +[getArtifact().concat('/modules/').concat(getImplModuleName())/] +[/template] + +[template public getAngularModuleFolderName(oclAny : OclAny)] +[getArtifact().concat('/modules/').concat(getAngularModuleName())/] +[/template] + +[template public getRootDotSettingsFolderName(oclAny : OclAny)] +[getRootFolderName().concat('/.settings')/] +[/template] + +[template public getImplDotSettingsFolderName(oclAny : OclAny)] +[getImplModuleFolderName().concat('/.settings')/] +[/template] + +[template public getCoreDotSettingsFolderName(oclAny : OclAny)] +[getCoreModuleFolderName().concat('/.settings')/] +[/template] + + +[template public getWebDotSettingsFolderName(oclAny: OclAny)] +[getWebModuleFolderName().concat('/.settings/')/] +[/template] + +[template public getMainClassFolderName(oclAny: OclAny)] +[getWebModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/')/] +[/template] + +[template public getControllerFolderName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/controller/')/] +[/template] + +[template public getActuatorFolderName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/actuator/')/] +[/template] + +[template public getWebSecurityFolderName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/security/')/] +[/template] + +[template public getAssemblerFolderName(oclAny:OclAny)] +[getWebModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/assembler/')/] +[/template] + +[template public getServiceFolderName(oclAny : OclAny)] +[getCoreModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/service/')/] +[/template] + +[template public getEntityFolderName(oclAny : OclAny)] +[getCoreModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/entity/')/] +[/template] + +[template public getRepositoryFolderName(oclAny : OclAny)] +[getCoreModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/repository/')/] +[/template] + +[template public getServiceImplFolderName(oclAny : OclAny)] +[getImplModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/service/')/] +[/template] + +[template public getCriteriaFolderName(oclAny : OclAny)] +[getCoreModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/criteria/')/] +[/template] + +[template public getUtilitiesFolderName(oclAny : OclAny)] +[getCoreModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/utilities/')/] +[/template] + +[template public getDtoFolderName(oclAny:OclAny)] +[getWebModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/dto/')/] +[/template] + +[template public getResourcesFolderName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/src/main/resources/')/] +[/template] + +[template public getAdvicesFolderName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/advices/')/] +[/template] + +[template public getConfigFolderName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/config/')/] +[/template] + +[template public getLiquibaseFolderName(oclAny : OclAny)] +[getWebResourceFolderName().concat('/db/liquibase')/] +[/template] + +[template public getLiquiBaseSqlFolderName(oclAny : OclAny)] +[getLiquibaseFolderName().concat('/sql')/] +[/template] + +[template public getWebModuleResourceFolderName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/src/main/resources')/] +[/template] + +[template public getParentModuleFolderName(oclAny : OclAny)] +[getArtifact()/] +[/template] + +[template public getSecurityFolderName(oclAny : OclAny)] +[getCoreModuleFolderName().concat('/src/main/java/').concat(getBasePackageName().substituteAll('.','/')).concat('/security/')/] +[/template] + +[template public getWebResourceFolderName(oclAny : OclAny)] +[getWebModuleFolderName().concat('/src/main/resources/')/] +[/template] + +[template public getRootFolderName(oclAny : OclAny)] +[getArtifact()/] +[/template] + + + + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/fullyQualifiedNamesUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/fullyQualifiedNamesUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b4554df574c2139fda6160819277f6aeb30c2bcd --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/fullyQualifiedNamesUtils.mtl @@ -0,0 +1,75 @@ +[comment encoding = UTF-8 /] +[module fullyQualifiedNamesUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::runtimeUtils /] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] + +[template public getEntityTypeFullyQualified(aType : Type)] +[getGenericPackage(aType).concat('.entity').concat('.').concat(aType.name)/] +[/template] + +[template public getEntityCKTypeFullyQualified(aType : Type)] +[getGenericPackage(aType).concat('.entity').concat('.').concat(aType.name).concat('Key')/] +[/template] + +[template public getAssemblerFullyQualified(aType : Type)] +[getGenericPackage(aType).concat('.assembler').concat('.').concat(aType.name)/]ModelAssembler +[/template] + +[template public getEntity_TypeFullyQualified(aType : Type)] +[getEntityTypeFullyQualified(aType).concat('_')/] +[/template] + +[template public getCriteriaTypeFullyQualified(aType : Type)] +[getCriteriaPackage(aType).concat('.').concat(aType.name).concat('Criteria')/] +[/template] + +[template public getFilterPackage(aType : Type)] +[getGenericPackage(aType).concat('.specification.').concat('FilterService')/] +[/template] + +[template public getRepositoryTypeFullyQualified(aType : Type)] +[getRepositoryPackage(aType).concat('.').concat(aType.name).concat('Repository')/] +[/template] + +[template public getFilterServiceFullyQualified(aType : Type)] +[getRuntimePackage().concat('.specification.FilterService')/] +[/template] + +[template public getFilterTypeFullyQualified(oclAny: OclAny)] +[getRuntimePackage().concat('.filter')/] +[/template] + +[template public getServiceTypeFullyQualified(aType : Type)] +[getGenericPackage(aType).concat('.service.').concat(aType.name).concat('Service')/] +[/template] + +[template public getCompositeKeyTypeFullyQualified(aClass: Class)] +[getEntityTypeFullyQualified(aClass).concat('.').concat(aClass.getClassIdType())/] +[/template] + + +[template public getUtilitiesFullQualified(oclAny : OclAny)] +[getGenericPackage().concat('.utilities')/] +[/template] + +[template public getLibsUtilitiesFullQualified(oclAny:OclAny)] +[getGenericPackage().concat('.libs.utilities')/] +[/template] + +[template public getEntityPackFullyQualified(oclAny : OclAny)] +[getGenericPackage().concat('.entity')/] +[/template] + +[template public getResourceFullyQualified(aClass : Class)] +[getGenericPackage()/].resource.[aClass.name/]Resource; +[/template] + +[template public getControllerFullyQualified(aType : Type)] +[getGenericPackage(aType).concat('.controller').concat('.').concat(aType.name)/]Controller +[/template] + +[template public getDtoFullyQualified(aType: Type)] +[getGenericPackage(aType).concat('.dto.').concat(aType.name)/]Dto +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/importUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/importUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..fedf023604c4eecc0d27568f63f54040faf41586 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/importUtils.mtl @@ -0,0 +1,834 @@ +[comment encoding = UTF-8 /] +[module importUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::runtimeUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] +[import it::micegroup::voila2::cartridge::library::common::utilities /] +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fullyQualifiedNamesUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] + +[template public genBaseServiceImplImports(isMsLib : Boolean) post(trim())] +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternUtils; + +import org.springframework.stereotype.Service; + +[if(isMsLib)] +import [getLibsUtilitiesPackage()/].JasperReportsCache; +import [getRuntimeExceptionPackage()/].BusinessException; +import net.sf.jasperreports.engine.JRException; +import java.io.IOException; +[else] +import [getUtilitiesPackage()/].JasperReportsCache; +[/if] + +import net.sf.jasperreports.engine.JasperCompileManager; +import net.sf.jasperreports.engine.JasperReport; +[/template] + +[template public genServiceImplImportsAsMs(aClass : Class)] +import lombok.RequiredArgsConstructor; +import [getServiceLibsPackageAsMs()/].BaseServiceImpl; +[if(aClass.hasCompositeKey())] +import [getEntityPackage()/].[aClass.getClassIdName().toUpperFirst()/]_; +[/if] + +[if(aClass.hasChilds())] +import java.util.stream.Collectors; +[for(childAss : Association | aClass.getChildAssociations())] +[if(aClass.getChildClass(childAss) <> aClass)] +import [getEntityPackage()/].[getEntityClassName(getChildClass(aClass,childAss))/]; +[/if] +[/for] +import [getRuntimeGenericEntityFullyQualified()/]; +[/if] +import [getRuntimeExceptionPackage()/].BusinessException; +import net.sf.jasperreports.engine.JRException; +[/template] + +[template public genServiceImplImports(aClass : Class, aModel : Model,isMs: Boolean) post(trim())] +import java.util.Map; +import java.util.List; +import java.util.Locale; +import java.util.HashMap; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ResourceBundle; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; + +import org.springframework.context.i18n.LocaleContextHolder; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.sf.jasperreports.engine.JRParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.JasperReport; +import net.sf.jasperreports.engine.JasperFillManager; +import net.sf.jasperreports.engine.JasperExportManager; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +[for(type : String | getAttributeJavaTypesNoDuplicates(getParentIdAttributesAsSequence(aClass)))] +import [getRuntimePackage().concat('.filter.')/][type/]; +[/for] + +import [getEntityTypeFullyQualified(aClass)/]; + +[genCompositeKeyImports(aClass,isMs)/] +[genParentEntityImport(aClass)/] +[genParentCompositeKeyImports(aClass,isMs)/] + +import [getEntity_TypeFullyQualified(aClass)/]; +import [getCriteriaTypeFullyQualified(aClass)/]; +import [getRepositoryTypeFullyQualified(aClass)/]; +import [getFilterServiceFullyQualified(aClass)/]; + + +[for(parentAss: Association | getParentAssociations(aClass))] +[if(parentAss.isIdentifying() and aClass.getParentClass(parentAss) <> aClass)] +import [getEntityPackage()/].[aClass.getParentClass(parentAss).name/]_; +[if(aClass.getParentClass(parentAss).hasCompositeKey())] +import [getEntityPackage()/].[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]_; +[/if] +[/if] +[/for] + +[genImportsForSpecification(aClass)/] + +[comment][for(c : Class | aClass.getChildClasses())] +import [getServiceTypeFullyQualified(c)/]; +[/for][/comment] + +[if(isInSecurityUserRole(aClass) or aClass.generalizeSecurityUserRole())] +import org.springframework.security.crypto.password.PasswordEncoder; +import [getGenericPackage().concat('.entity')/].Role; +import [getGenericPackage().concat('.entity')/].RolePerSecurityUser.RolePerSecurityUserKey; +import [getGenericPackage().concat('.entity')/].RolePerSecurityUser; +[/if] + +[if(aModel.isCachingEnabled() and (aClass.isInPrivilegePerRoleRole() or aClass.isInPrivilegeRole()))] +import org.springframework.cache.annotation.Cacheable; +[if(aModel.isCachingEnabled() and aClass.isInPrivilegeRole())] +import org.springframework.cache.annotation.CacheEvict; +[/if] +[/if] + +[if(getParentClasses(aClass) -> size() > 1)] +import org.springframework.data.domain.PageImpl; +[if(not aClass.hasChilds())] +import java.util.stream.Collectors; +[/if][/if] +[/template] + +[template public genChildServiceImport(aClass : Class) post(trim())] +[for(c : Class | aClass.getChildClasses())] +[if(c <> aClass)] +import [getServiceTypeFullyQualified(c)/]; +[/if] +[/for] +[/template] + +[template public genChildEntityImport(aClass : Class) post(trim())] +[for(c : Class | aClass.getChildClasses())] +[if(c <> aClass)] +import [getEntityTypeFullyQualified(c)/]; +[/if] +[/for] +[/template] + +[template public genParentEntityImport(aClass : Class) post(trim())] +[for(c : Class | aClass.getParentClasses())] +[if(c <> aClass)] +import [getEntityTypeFullyQualified(c)/]; +[/if] +[/for] +[/template] + +[template public genMailRequestDtoImports(oclAny : OclAny)] +import javax.validation.constraints.NotNull; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Map; +[/template] + +[template public genControllerImportsAsMs(aClass:Class)] +import lombok.RequiredArgsConstructor; +import [getEntityTypeFullyQualified(aClass)/]; +import [getAssemblerFullyQualified(aClass)/]; +import [getCriteriaTypeFullyQualified(aClass)/]; +import [getServiceTypeFullyQualified(aClass)/]; +[genChildServiceImport(aClass)/] +[genChildEntityImport(aClass)/] +[genParentEntityImport(aClass)/] +[genParentCompositeKeyImports(aClass,true)/] +[if(isInPrivilegePerRoleRole(aClass))] +import java.util.Collection; +import java.util.ArrayList; +import org.springframework.web.bind.annotation.RequestParam; +[/if] +import [getRuntimeExceptionPackage()/].*; +import [getControllerLibsPackageAsMs()/].BaseController; +import [getEntityDtoPackage()/].[getDtoClassName(aClass)/]; +import [getEntityDtoPackage()/].[getEntityWriteDtoClassName(aClass)/]; +import [getResponseLibsPackageAsMs()/].BaseResponse; +import [getLibsRequestPackageAsMs()/].BaseRequest; +import javax.annotation.PostConstruct; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.PagedModel; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import javax.validation.Valid; +import java.net.URI; +import java.util.Locale; +[comment]import java.util.Map;[/comment] +import java.util.Optional; + +[comment]childMap[/comment] +import java.util.Collection; +import org.modelmapper.PropertyMap; +import java.util.stream.Collectors; +[/template] + +[template public genBaseResponseImports(oclAny:OclAny)] +import java.io.Serializable; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.hateoas.RepresentationModel; +import [getRuntimeExceptionPackage()/].ErrorDetails; +import [getRuntimeResponsePackage()/].Messages; +import lombok.Data; +[/template] + +[template public genControllerImports(aClass : Class,isMs : Boolean) post(trim())] +import [getEntityTypeFullyQualified(aClass)/]; +import [getResourceFullyQualified(aClass)/] +import [getCriteriaTypeFullyQualified(aClass)/]; +import [getServiceTypeFullyQualified(aClass)/]; +[comment]import [getRuntimePackage()/].web.utils.HeaderUtil;[/comment] + +[genChildServiceImport(aClass)/] +[genChildEntityImport(aClass)/] +[genParentEntityImport(aClass)/] + +[comment][genCompositeKeyImports(aClass,isMs)/][/comment] +[genParentCompositeKeyImports(aClass,isMs)/] + +import javax.validation.Valid; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.List; +import java.util.Optional; + +[if(isInPrivilegePerRoleRole(aClass))] +import java.util.Collection; +import java.util.ArrayList; +import org.springframework.web.bind.annotation.RequestParam; +[/if] +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; + +import java.net.URI; +import java.net.URISyntaxException; + +import org.springframework.security.access.prepost.PreAuthorize; +[/template] + +[template public genCriteriaImports(aClass : Class) post(trim())] +import java.io.Serializable; +[if(hasFatherWithCompositeKey(aClass))] +import javax.persistence.Embeddable; +[/if] + +[if(aClass.hasParents() and aClass.getParentStringId()->size() = 0)] +import [getRuntimePackage()/].filter.StringFilter; +[/if] + +[for(type : String | getAttributeJavaTypesNoDuplicates(getAttributesFromClassAndParents(aClass)))] +import [getRuntimePackage().concat('.filter.')/][type/]; +[/for] +[/template] + +[template public genImportsForProperty(aClass : Class)] +[for(imp: String | aClass.getImportsForProperty())] +[imp/] +[/for] +[/template] + +[template public genEntityImportsAsMs(aClass:Class)] + +[/template] + + +[template public genEntityImports(aClass : Class) post(trim())] +import java.io.Serializable; + +[aClass.genImportsForProperty()/] +import javax.persistence.Column; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +[if(aClass.hasCompositeKey())] +import javax.persistence.EmbeddedId; +[if(aClass.isInPrivilegePerRoleRole())] +import javax.persistence.PreRemove; +import org.springframework.cache.annotation.CacheEvict; +[/if] +[else] +[if(isClassExtended(aClass))] +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +[/if] +import javax.persistence.Id; +[if(aClass.hasAutogeneratedId())] +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +[/if] +[/if] +import javax.persistence.Entity; +[if(aClass.hasParents() or (aClass.hasParents()._not() and aClass.hasOneToOneRelation() and aClass.hasNavigableParents()))] +import javax.persistence.JoinColumn; +import javax.persistence.JoinColumns; +[/if] +[if(aClass.hasManyToOneRelation() or aClass.hasOneToOneRelation())] +import javax.persistence.FetchType; +[/if] +[if(aClass.hasChilds())] +import java.util.Collection; +import java.util.ArrayList; +import javax.persistence.OneToMany; +import javax.persistence.CascadeType; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import lombok.ToString; +[/if] + +[if(aClass.hasParents() or aClass.hasChilds())] +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +[/if] + +[if(aClass.hasParents())] +[if(aClass.hasNoIdentifyingParent())] +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonBackReference; +[/if] +[if(aClass.hasOneToOneRelation())] +import javax.persistence.OneToOne; +[/if] +[if(aClass.hasOneToOneRelation() or aClass.hasManyToOneRelation())] +[if(aClass.hasNoIdentifyingParent())] +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; +[/if][/if] +[/if] +[if(aClass.hasParentsWithCK())] +import javax.persistence.JoinColumns; +[/if] + +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Getter; +import lombok.AllArgsConstructor; + +import javax.persistence.Table; +[comment]import javax.validation.constraints.NotNull;[/comment] + +import org.apache.commons.lang3.StringUtils; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.hibernate.Hibernate; +import java.util.Objects; + +[genParentCKImports(aClass)/] + +[if(aClass.isAuditable())] +import [getLibsUtilitiesPackageAsMs()/].Auditable; +[else] +import [getLibsEntityPackageAsMs()/].BaseEntity; +[/if] +import [getRuntimeUtilsPackage().concat('.EntityUtils')/]; +[/template] + +[template public genBaseRepositoryImports(oclAny : OclAny) post(trim())] +import [getRuntimeRepositoryPackage().concat('.GenericRepository')/]; +import org.springframework.data.repository.NoRepositoryBean; +[/template] + +[template public genRepositoryImportsAsMs(oclAny:OclAny)] +import [getRepositoryLibsPackageAsMs()/].BaseRepository; +[/template] + +[template public genRepositoryImports(aClass : Class,isMs : Boolean) post(trim())] +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.Collection; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +[if(aClass.hasParents())] +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +[/if] +import [getEntityTypeFullyQualified(aClass)/]; +[genCompositeKeyImports(aClass,isMs)/] +[genParentEntityImport(aClass)/] +[genParentCompositeKeyImports(aClass,isMs)/] +[/template] + +[template public genServiceImportsAsMs(oclAny:OclAny)] +import [getServiceLibsPackageAsMs()/].BaseEntityService; +import [getRuntimeExceptionPackage()/].BusinessException; +[/template] + +[template public genServiceImports(aClass: Class,isMs : Boolean) post(trim())] +import [getEntityTypeFullyQualified(aClass)/]; +import [getCriteriaTypeFullyQualified(aClass)/]; + +[if(aClass.hasParents())] +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +[/if] +[genCompositeKeyImports(aClass,isMs)/] +[genParentEntityImport(aClass)/] +[genParentCompositeKeyImports(aClass,isMs)/] +[/template] + +[template public genCompositeKeyImports(aClass : Class,isMs : Boolean)] +[if(aClass.hasCompositeKey() and isMs._not())] +import [getCompositeKeyTypeFullyQualified(aClass)/]; +[/if] +[if(aClass.hasCompositeKey() and isMs)] +import [getEntityCKTypeFullyQualified(aClass)/]; +[/if] +[/template] + +[template public genCKImports(aClass : Class)] +import [getEntityCKTypeFullyQualified(aClass)/]; +[/template] + +[template public genChildCompositeKeyImports(aClass : Class,isMs : Boolean)] +[for(c : Class | aClass.getChildClasses())] +[genCompositeKeyImports(c,isMs)/] +[/for] +[/template] + +[template public genParentCompositeKeyImports(aClass : Class,isMs : Boolean)] +[for(c : Class | aClass.getParentClasses())] +[genCompositeKeyImports(c,isMs)/] +[/for] +[/template] + +[template public genParentCKImports(aClass : Class)] +[for(aClass : Class | aClass.getParentClasses())] +[if(aClass.hasCompositeKey())] +[genCKImports(aClass)/] +[/if] +[/for] +[/template] + +[template public genBaseEntityImports(isMs : Boolean)] +import [getRuntimeGenericEntityFullyQualified()/]; +[if(isMs)] +import [getLibsUtilitiesFullQualified()/].Constants; +[else] +import [getUtilitiesFullQualified()/].Constants; +[/if] +[/template] + +[template public genBaseAttachmentControllerImports(oclAny : OclAny)] +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import [getRuntimeStorageServiceFullyQualified()/]; +import [getCriteriaPackage().concat('.').concat('AttachmentCriteria')/]; +import [getEntityPackage().concat('.').concat('Attachment')/]; +import [getServicePackage().concat('.').concat('AttachmentService')/]; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import [getRuntimeStringFilterFullyQualified()/]; +import org.springframework.web.bind.annotation.RequestBody; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +[/template] + + +[** + * Generate imports for mail service + * @author Luca Barone +*/] +[template public genMailServiceImports(oclAny : OclAny)] +import org.springframework.beans.factory.InitializingBean; +import [getRuntimeMailMailManagerFullyQualified()/]; +[/template] + + +[** + * Generate imports for mail service impl + * @author Luca Barone +[/comment] +[template public genMailServiceImplImports(oclAny : OclAny)] +import [getRuntimeMailMailManagerFullyQualified()/]; +import [getRuntimeMailMailManagerImplFullyQualified()/]; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.velocity.app.VelocityEngine; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.DependsOn; +import org.springframework.stereotype.Service; + +[genMailServiceImplRepositoryImportsMs()/] + +[/template] + +[** + * Generate imports for mail service impl + * @author Luca Barone +[/comment] +[template public genMailServiceImplRepositoryImports(oclAny : OclAny)] +import [getGenericPackage().concat('.repository.MailConfigRepository;')/] +import [getGenericPackage().concat('.repository.MailStyleRepository;')/] +import [getGenericPackage().concat('.repository.MailTemplateRepository;')/] +[/template] + +[comment]Generare import for mail service impl in Ms architecture + @author Simone Punzo [/comment] +[template public genMailServiceImplRepositoryImportsMs(oclAny: OclAny)] +import [getRepositoryPackage().concat('.MailConfigRepository;')/] +import [getRepositoryPackage().concat('.MailStyleRepository;')/] +import [getRepositoryPackage().concat('.MailTemplateRepository;')/] +import [getEntityPackage().concat('.MailConfig;')/] +import [getEntityPackage().concat('.MailStyle;')/] +import [getEntityPackage().concat('.MailTemplate;')/] +[/template] + +[template public genEntityDtoImports(aClass : Class)] +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +[if(aClass.hasCompositeKey())] +import [getEntityPackage()/].[aClass.getClassIdName().toUpperFirst()/]; +[/if] + +[if(aClass.hasChilds())] +import java.util.Collection; +[/if] + +import com.fasterxml.jackson.annotation.JsonProperty; +[if(aClass.hasChilds() or aClass.hasParents())] +import com.fasterxml.jackson.annotation.JsonProperty.Access; +[/if] +[for(propertyType : String | getAttributeJavaTypesNoDuplicates(aClass.getFiltrableAttributes()))] +[if(propertyType = 'LocalDateFilter')] +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +[/if] +[if(propertyType = 'LocalDateTimeFilter')] +import java.time.LocalDateTime; +[/if] +[/for] +[/template] + +[template public genImportsForPropertyDto(aClass:Class)] +[getImportsForPropertyDto(aClass)/] +[/template] + +[template public genBaseDtoImport(oclAny:OclAny)] +import [getBaseDtoLibsPackage()/].BaseDto; +[/template] + +[template public genBaseModelAssemblerImports(oclAny:OclAny)] +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; + +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.hateoas.Link; +import org.springframework.hateoas.LinkRelation; +import org.springframework.hateoas.RepresentationModel; +import org.springframework.hateoas.server.RepresentationModelAssembler; + +import [getControllerLibsPackage()/].BaseController; +import [getEntityLibsPackage()/].BaseEntity; +import [getResponseLibsPackage()/].BaseResponse; + + +import java.net.URI; +[/template] + +[template public genResourceImports(aClass : Class) post(trim())] +import [getEntityTypeFullyQualified(aClass)/]; +import [getControllerFullyQualified(aClass)/]; + +[for(parentAss : Association | aClass.getParentAssociations())] +[if(aClass.getParentClass(parentAss) <> aClass)] +import [getControllerFullyQualified(aClass.getParentClass(parentAss))/]; +[/if] +[/for] + +[if(aClass.hasChilds())] +import org.springframework.data.domain.PageRequest; +[/if] +import org.springframework.hateoas.Resource; +import org.springframework.hateoas.mvc.ControllerLinkBuilder; +import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; +[/template] + +[template public genDtoImports(oclAny:OclAny)] +import java.io.Serializable; +import org.springframework.hateoas.RepresentationModel; +import [getRuntimeGenericObjectFullyQualified()/]; +[/template] + +[template public genDtoImportsForMapperConfig(aModel : Model)] +[for(aClass : Class | aModel.getEntities()) ] +import [getDtoFullyQualified(aClass)/]; +import [getEntityTypeFullyQualified(aClass)/]; +[/for] +[/template] + +[template public genAssemblerImports(aClass : Class)] +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; +import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.Link; +import org.springframework.stereotype.Component; +[if(aClass.getParentAssFromImportedModels()->size() > 0)] +import org.springframework.hateoas.LinkRelation; +[/if] + +import [getBaseAssemblerPckAsMs()/].BaseModelAssembler; +import [getControllerFullyQualified(aClass)/]; +import [getDtoFullyQualified(aClass)/]; +import [getEntityTypeFullyQualified(aClass)/]; + + +[for(parentAss : Association | aClass.getParentAssociations())] +[if(aClass.getParentClass(parentAss) <> aClass)] +import [getControllerFullyQualified(aClass.getParentClass(parentAss))/]; +[/if] +[/for] + +[for(childAss : Association | aClass.getChildAssociations())] +[if(aClass.getChildClass(childAss) <> aClass)] +import [getControllerFullyQualified(aClass.getChildClass(childAss))/]; +[/if] +[/for] + +[/template] + +[template public genEntityKeyImports(aClass : Class)] +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Objects; + +import lombok.ToString; + +import [getRuntimeUtilsPackage().concat('.EntityUtils')/]; +[/template] + +[template public genGenericDtoImport(oclAny : OclAny)] +import [getRuntimeGenericDtoFullyQualified()/]; +[/template] + +[template public genMailControllerImports(oclAny:OclAny)] +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import [getRuntimeExceptionPackage()/].BusinessException; +import [getServicePackage()/].MailManagerService; +import [getLibsRequestPackageAsMs()/].BaseRequest; +import [getEntityDtoPackage()/].MailDto; +[/template] + +[template public genResourceServerSecurityConfigImports(oclAny:OclAny)] +import java.util.Arrays; +import java.util.Collections; + +import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.convert.converter.Converter; +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; +import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +[/template] + +[template public genKeycloakRealmRoleConverterInports(oclAny:OclAny)] +import org.springframework.core.convert.converter.Converter; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.oauth2.jwt.Jwt; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +[/template] + +[template public genMsPropertiesImports(oclAny : OclAny)] +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +[/template] + +[template public genMsConfigImports(oclAny : OclAny)] +import [getActuatorPackage()/].[getMainClassNameAsMs()/]Interceptor; +import [getActuatorPackage()/].[getMainClassNameAsMs()/]Properties; +import io.micrometer.core.instrument.MeterRegistry; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.handler.MappedInterceptor; +[/template] + +[template public genMsInterceptorImports(oclAny : OclAny)] +import io.micrometer.core.instrument.MeterRegistry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +[/template] + +[template public genMailDtoImports(oclAny : OclAny)] +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; +import lombok.EqualsAndHashCode; +[/template] + +[template public genImportsForSpecification(aClass: Class)] +import [getEntityPackage()/].[aClass.getEntityClassName().toUpperFirst()/]_; +[if(aClass.hasCompositeKey())] +import [getEntityPackage()/].[aClass.getClassIdName().toUpperFirst()/]_; +[/if] +[for(parentAss : Association | aClass.getParentAssociations())] +[if(parentAss.isOneToOneRelation())] +import [getEntityPackage()/].[aClass.getParentClass(parentAss).getEntityClassName().toUpperFirst()/]_; +[if(aClass.hasCompositeKey())] +import [getEntityPackage()/].[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]_; +[/if] +[elseif(parentAss.isSelfRelation()._not() and parentAss.isOneToOneRelation()._not())] +[genImportsForSpecification(aClass.getParentClass(parentAss))/] +[/if] +[/for] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/mailManagerServiceImplUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/mailManagerServiceImplUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..487e4015ba8f50f80568f575a35cdba4f9dc40fe --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/mailManagerServiceImplUtils.mtl @@ -0,0 +1,228 @@ +[comment encoding = UTF-8 /] + +[comment] + +Mail Utils Template + +@author Luca Barone + +[/comment] +[module mailManagerServiceImplUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::runtimeUtils/] + +[** + * Generete a MailManager with abstract methods implementated + * @author Luca Barone +*/] +[template public genAttributeMailManager(oclAny : OclAny)] +/* + You must define the abstract methods of MailManager. + In this file you can find a example of implementation ( commented ). + If you define MailConfig , MailTemplate and MailStyle in standard mode, + you can use this implementation directly. +*/ +private MailManagerImpl mailManager = new MailManagerImpl() { + + /* this method initialize the style list (is obliged) */ + @Override + protected void initMailStyle() { + try { + + mapMailStyle = new HashMap(); + List listStyle = new ArrayList<>(); + listStyle = mailStyleRepository.findAll(); + [getRuntimeMailStyleFullyQualified()/] mailStyle; + for (MailStyle style : listStyle) { + mailStyle = new [getRuntimeMailStyleFullyQualified()/](); + mailStyle.setMailStyleId(style.getMailStyleId()); + mailStyle.setMailStyleDescription(style.getMailStyleDescription()); + mailStyle.setMailStyleHeader(style.getMailStyleHeader()); + mailStyle.setMailStyleFooter(style.getMailStyleFooter()); + mapMailStyle.put(mailStyle.getMailStyleId(), mailStyle); + } + + } catch (Exception e) { + LOGGER.error("Error stack trace: ", e); + } + } + + /* this method initialize the template list (is obliged) */ + @Override + protected void initMailTemplates() { + try { + + mapMailTemplate = new HashMap(); + List listTemplate = new ArrayList<>(); + listTemplate = mailTemplateRepository.findAll(); + [getRuntimeMailTemplateFullyQualified()/] mailTemplate; + for (MailTemplate template : listTemplate) { + mailTemplate = new [getRuntimeMailTemplateFullyQualified()/](); + mailTemplate.setBeanFactory(getApplicationContext()); + mailTemplate.setMailTemplateId(template.getMailTemplateId()); + mailTemplate.setAttachments(template.getAttachments()); + mailTemplate.setEnabled((template.getAbilitaNotificheEmail())); + mailTemplate.setMailBcc(template.getMailBcc()); + mailTemplate.setMailBodyHtml(template.getMailBodyHtml()); + mailTemplate.setMailBodyText(template.getMailBodyText()); + mailTemplate.setMailCc(template.getMailCc()); + mailTemplate.setMailFrom(template.getMailFrom()); + mailTemplate.setMailReplyTo(template.getMailReplyTo()); + if(template.getMailSubject() == null) + mailTemplate.setMailSubject("default"); + else + mailTemplate.setMailSubject(template.getMailSubject()); + mailTemplate.setMailTemplateDescription(template.getMailTemplateDescription()); + mailTemplate.setMailTo(template.getMailTo()); + mailTemplate.setSkipTitle((template.getSkipTitle())); + mailTemplate.setTheMailConfig(getMailConfigs().get(template.getMailConfigId())); + mailTemplate.setTheMailStyle(mapMailStyle.get(template.getMailStyleId())); + mapMailTemplate.put(mailTemplate.getMailTemplateId(), mailTemplate); + } + mailManager.setMailTemplates(mapMailTemplate); + + } catch (Exception e) { + LOGGER.error("Error stack trace: ", e); + } + } + + /* this method initialize the event list (is optional)*/ + @Override + protected void initMailEvents() { + try { + + } catch (Exception e) { + LOGGER.error("Error stack trace: ", e); + } + } + + /* this method initialize the config list (is obliged) */ + @Override + protected void initMailConfigs() { + try { + + mapMailConfig = new HashMap(); + List listConfig = new ArrayList<>(); + listConfig = mailConfigRepository.findAll(); + [getRuntimeMailConfigFullyQualified()/] mailConfig; + for (MailConfig config : listConfig) { + + mailConfig = new [getRuntimeMailConfigFullyQualified()/](); + mailConfig.setBeanFactory(getApplicationContext()); + mailConfig.setMailConfigId(config.getMailConfigId()); + mailConfig.setMailConfigDescription(config.getMailConfigDescription()); + mailConfig.setEnabled((config.getAbilitaNotificheEmail())); + mailConfig.setMailBccAddress(config.getMailCcAddress()); + mailConfig.setMailCcAddress(config.getMailBccAddress()); + mailConfig.setMailCrypto(config.getMailCrypto()); + mailConfig.setMailDefaultSubject(config.getMailDefaultSubject()); + mailConfig.setMailFromAddress(config.getMailFromAddress()); + mailConfig.setMailNomeHost(config.getMailNameHost()); + mailConfig.setMailPassword(config.getMailPassword()); + mailConfig.setMailPort(config.getMailPort()); + if (config.getMailSPA()== null || config.getMailSPA()) { + mailConfig.setMailSPA("S"); + } else { + mailConfig.setMailSPA("N"); + } + mailConfig.setMailUsername(config.getMailUsername()); + mailConfig.setEnabled(true); + mapMailConfig.put(mailConfig.getMailConfigId(), mailConfig); + } + mailManager.setMailConfigs(mapMailConfig); + + } catch (Exception e) { + LOGGER.error("Error stack trace: ", e); + } + } + + /* + this method initialize the velocity engine (is obliged) + if not initialized, you can't use features velocity engine + */ + @Override + protected void initMailVelocityEngine() { + try { + + mailManager.setVelocityEngine(new VelocityEngine()); + + } catch (Exception e) { + LOGGER.error("Error stack trace: ", e); + } + } +}; +[/template] + +[** + * Generate MailTemplateRepository standard + * @author Luca Barone +*/] +[template public genMailTemplateRepositoryAttribute(oclAny : OclAny)] +MailTemplateRepository mailTemplateRepository; +[/template] + +[** + * Generate MailStyleRepository standard + * @author Luca Barone +*/] +[template public genMailStyleRepositoryAttribute(oclAny : OclAny)] +MailStyleRepository mailStyleRepository; +[/template] + +[** + * Generate MailConfigRepository standard + * @author Luca Barone +*/] +[template public genMailConfigRepositoryAttribute(oclAny : OclAny)] +MailConfigRepository mailConfigRepository; +[/template] + +[** + * Implement alfterPropertiesSet() standard + * @author Luca Barone +*/] +[template public genAfterPropertiesSetMail(oclAny : OclAny)] +public void afterPropertiesSet() throws Exception { + // TODO Auto-generated method stub + mailManager.setTestMode(false); + mailManager.afterPropertiesSet(); +} +[/template] + + +[** + * Implement getMailManager() standard + * @author Luca Barone +*/] +[template public genGetMailManagerMail(oclAny : OclAny)] +public MailManager getMailManager() { + return mailManager; +} +[/template] + + +[** + * Define map attribute for mailManagerServiceImpl + * @author Luca Barone +*/] +[template public genMailServiceImplAttributedMap(oclAny : OclAny)] +private Map mapMailConfig; + +private Map mapMailStyle; + +private Map mapMailTemplate; +[/template] + + +[** + * Define attribute map for read information from db + * @author Luca Barone +*/] +[template public genMailServiceImplAttributedMapModel(oclAny : OclAny)] +private List<[getGenericPackage().concat('.entity.MailConfig')/]> listConfig; + +private List<[getGenericPackage().concat('.entity.MailStyle')/]> listStyle; + +private List<[getGenericPackage().concat('.entity.MailTemplate')/]> listTemplate; +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/applicationYML.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/applicationYML.mtl new file mode 100644 index 0000000000000000000000000000000000000000..0dcdf2729bb12172d036736102374e662732139f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/applicationYML.mtl @@ -0,0 +1,86 @@ +[module applicationYML('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] + +[template public genMsWebApplicationYML(aModel : Model) post(writeAndFormat(getMsWebApplicationYMLName()))] +server: + port: ${PORT:[getPortNumber()/]} + servlet: + context-path: /[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/] + +spring: + application: + name: [getRootArtifactId()/]-[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/]-service + liquibase: + enabled: false + security: + oauth2: + resourceserver: + jwt: + issuer-uri: http://${KK_URL:localhost}:${KK_PORT:8282}/auth/realms/[getRootArtifactId()/] + jwk-set-uri: http://${KK_URL:localhost}:${KK_PORT:8282}/auth/realms/[getRootArtifactId()/]/protocol/openid-connect/certs + +# data: +# rest: +# basePath: /[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/] + jpa: + hibernate: + show-sql: true + [if(isSecurityMicroservice()._not())] + ddl-auto: create + naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy + database-platform: org.hibernate.dialect.H2Dialect + datasource: + driverClassName: org.h2.Driver + url: jdbc:h2:mem:[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/];MODE=MYSQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + username: [getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/] + password: + + h2: + console: + enabled: true + settings: + web-allow-others: true + path: /h2-console + [else] +[comment] datasource: + url: jdbc:mysql://localhost:3306/keycloak?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false + username: keycloak + password: keycloak [/comment] + datasource: + url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:keycloak}?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false + username: ${USER_NAME:keycloak} + password: ${USER_PASSWORD:keycloak} + [/if] + devtools: + livereload: + port: 35830 + +logging: + level: + root: INFO + org.hibernate.SQL: TRACE + org.springframework: DEBUG + +gateway: + baseuri: http://localhost:8090 +[comment] Scommentare quando il FE sarà in container baseuri: http://[aModel.getGateway().name.toLower()/]:8090[/comment] +[comment] baseuri: http://192.168.111.71:8090[/comment] + +jasperreports: + dir: reports + debug: true + +management: + endpoints: + web: + exposure: + include: "*" + endpoint: + health: + show-details: always +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/customSpringLiquibase.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/customSpringLiquibase.mtl new file mode 100644 index 0000000000000000000000000000000000000000..d873629af7b982d2e7980ab814537fd6343b7758 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/customSpringLiquibase.mtl @@ -0,0 +1,51 @@ +[module customSpringLiquibase('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] + +[template public genCustomSpringLiquibase(oclAny : OclAny) post(writeAndFormat(getCustomSpringLiquibaseFileName()))] +package [getConfigPackage()/]; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.BeanNameAware; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ResourceLoaderAware; +import org.springframework.core.io.ResourceLoader; + +import liquibase.exception.LiquibaseException; +import liquibase.integration.spring.SpringLiquibase; + +public class CustomSpringLiquibase implements InitializingBean, BeanNameAware, ResourceLoaderAware { + + private static final Logger LOGGER = LogManager.getLogger(CustomSpringLiquibase.class); + private SpringLiquibase springLiquibase; + + public CustomSpringLiquibase(SpringLiquibase liquibase) { + springLiquibase = liquibase; + } + + @Override + public void afterPropertiesSet() { + try { + springLiquibase.afterPropertiesSet(); + } catch (LiquibaseException e) { + LOGGER.error("LiquibaseConfig ", e); + } + } + + @Override + public void setBeanName(String name) { + springLiquibase.setBeanName(name); + } + + @Override + public void setResourceLoader(ResourceLoader resourceLoader) { + springLiquibase.setResourceLoader(resourceLoader); + } +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/db/genMsDBScript.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/db/genMsDBScript.mtl new file mode 100644 index 0000000000000000000000000000000000000000..eb48e94b23876e88b1ee537288b3b5d2e11c0003 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/db/genMsDBScript.mtl @@ -0,0 +1,49 @@ +[module genMsDBScript('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] + +[template public genDBScript(aModel : Model ) post(writeAndFormat(getDbScriptFileName()))] +[if(isNotificationMicroservice())] +[genDBNotification()/] +[/if] +[if(isDemoMicroservice())] +[genDBDemo()/] +[/if] +[/template] + +[template public genDBNotification(oclAny : OclAny)] +INSERT INTO mail_config (MAIL_CONFIG_ID, MAIL_CONFIG_DESCRIPTION, ABILITA_NOTIFICHE_EMAIL, MAIL_NAME_HOST, MAIL_PORT, MAIL_CRYPTO, MAIL_SPA, MAIL_USERNAME, MAIL_PASSWORD, MAIL_DEFAULT_SUBJECT, MAIL_FROM_ADDRESS, MAIL_CC_ADDRESS, MAIL_BCC_ADDRESS) VALUES ('DEFAULT', 'Default mail configuration', TRUE, 'localhost', '25', NULL, NULL, 'DAG\\webo', NULL, 'Orchestratore WebO', 'webo@mef.gov.it', NULL, NULL); + +INSERT INTO mail_style (MAIL_STYLE_ID, MAIL_STYLE_DESCRIPTION, MAIL_STYLE_HEADER, MAIL_STYLE_FOOTER) VALUES ('DEFAULT', 'Nuovo style 2020', 'head', 'foot'); + +INSERT INTO mail_template (MAIL_TEMPLATE_ID, MAIL_TEMPLATE_DESCRIPTION, MAIL_SUBJECT, MAIL_BODY_HTML, MAIL_BODY_TEXT, MAIL_FROM, MAIL_TO, MAIL_CC, MAIL_BCC, MAIL_REPLY_TO, SKIP_TITLE, ABILITA_NOTIFICHE_EMAIL, ATTACHMENTS, MAIL_CONFIG_ID, MAIL_STYLE_ID) VALUES ('TEST_TEMPLATE',null, 'subject' , null , 'ciao' , 'bye' , 'simone@email.it',null, 'becc@gmail.cane' , null,TRUE,TRUE,null,'DEFAULT','DEFAULT'); +[/template] + +[template public genDBDemo(oclAny: OclAny)] +[comment]INSERT INTO CLIENTE VALUES ('dottore','PPPPPPP','ciao@example.com','08111111','mice','DFO383AFA','pippo','www.ciao.it','08113434','bakugo'); +INSERT IGNORE INTO TIPO_ORDINE (`id_tipo_ordine`, `nome_tipo_ordine`) VALUES (1,'fornitore'); +INSERT IGNORE INTO TIPO_ORDINE (`id_tipo_ordine`, `nome_tipo_ordine`) VALUES (2,'ignora'); +INSERT IGNORE INTO NAZIONE (`nome_nazione`) VALUES ('Italia'); +INSERT IGNORE INTO DIPARTIMENTO (`id_dipartimento`, `codice`, `nome_nazione`) VALUES (1, 'COD', 'Italia'); +INSERT IGNORE INTO REPARTO_VENDITE (`nome_reparto`, `id_dipartimento`, `codice`, `nome_nazione`) VALUES ('Falegnameria', 1, 'COD', 'Italia'); +INSERT IGNORE INTO PRODOTTO (`id_prodotto`, `created_by`, `created_date`, `last_modified_by`, `last_modified_date`, `descrizione_prodotto`, `prezzo_unitario`, `scheda_tecnica`) VALUES (1, 'anonymousUser', '2021-09-15 15:17:04.766', 'anonymousUser', '2021-09-15 15:17:04.766','Pentola in acciaio inox',14.50, 0x89504e470d0a1a0a0000000d49484452000001e1000001f90806000000b6cf86f80000825a744558746d7866696c65002533436d7866696c65253230686f73742533442532326170702e6469616772616d732e6e65742532322532306d6f646966696564253344253232323032312d30362d3134543133253341323225334131352e3530365a2532322532306167656e74253344253232352e302532302857696e646f77732532304e5425323031302e3025334225323057696e3634253342253230783634292532304170706c655765624b69742532463533372e3336253230284b48544d4c2532432532306c696b652532304765636b6f292532304368726f6d6525324639312e302e343437322e3130312532305361666172692532463533372e333625323225323065746167253344253232767a6e49774663496e59374134333047412d545525323225323076657273696f6e25334425323231342e372e37253232253230747970652533442532326465766963652532322533452533436469616772616d2532306964253344253232734e3869355a3476387363586a5653744a6c62582532322532306e616d65253344253232506167652d31253232253345374c315838253242504b665362386158527046584b34524534456b5968343430496b63694c79703325324652253246356c6a535a62733358314c33765857636d724f496445496a66376c30412532466e54796a58486449636a36552532425a486e374a77544b6a6a253242682532464a3851424559773676344149253242657645514c4866673238357972376664466642707a71796e3850517239483179724c5033397a3454494d37564b4e667a7559446e3266703876666a4d587a504f7825324665316b787448383736786925324638373862634e4b34253246667452763871573874636f685a42253246475a667a366c332532424d544e4d304c2532464f645045664625324639657961654d7332482532467179465525324242504b7a634f7725324650725748567a6541754c39515a646639346e25324677646c253246653745353735662532466d527547494a304e715758555575316b35763276577a7a412532462532464c374b567663727238583746543925324231343841706d414d676a456a474e627066465344663266454b4b3970324b54253242663732427425324625324247506d4d635125324257754a7925324636555a4d4b31675857777a3938692532463762774978397958394d48647825324235634c2532466e67533037253246584e70365250353534722532425058512532462532425943506d623579507a73505a5a4470594733616633736c70795a3478546348612532464a6645654b3565757659396738425a5632334a444f3877253246393649466c655a70436c35376d59636d25324636737a4359566a4f505437765a33667325324631426f33786538754d2532464a4437386279793964534566756e795a7a253246755350323467666b764225324259643477332532464766343373667845724450743956666c58496b5839486f74253246532532464c37337837253242463262665833377a253242332532424239386a663866377671487a4c374169253242567432506d7677315451453562726c6f6d625a363925324666594d6f782532464e6671496b377731683025324631497a636f6e777a4c4d6e54334253303477635a703825324637683446397a3565665066636e505a4d786e2532464b584f674276784877644664514365733725324666687925324258426467424268414345644f73782532463563335a61677147375a6d5025324263336a4d695968597638663042786a253246335a7a75386838253242253246784833324c386c3825324678384d345443674a414c253246363238682532464664777a6225324625324275684247714425324250253246667566495149302532464c636938496468253242477342515025324265253246332532424d2532466450356a253246344425324676395738442532465554712532465365666958547a35763156554e66365762796225324233414825324278436334343379596b4158627433316d506636494b5a33684f5a6467253246556d454b535643432532424163432532426d386925324246253242677a696a7839377a384e253246372532424e54507025324679706c4a7635445a674a54396825324662357325324250787757572532425637253246386664322532426339253246253246764e66736633587325324634446b337954632532466c62707630746325324671687a25324638644a3338507862395a6c4e376b7a25324264253246774c7575796a49777a54253242556b72253242566f333843647a4830333347582532466e745454524a2532467a317a6b763471354d504633784d367a4f307a3566546a4d53336b62717a357568622532424d2532466a75792532464f576178774173395139253246366e785a7a743878563777757739397937366257664162672532466a386a2532424225324648345625324266354925324666542532463931645034253242253242697a78764441672532424149386265505070307225324647426172396f2532466e253246316f54574d682532467a71643733634d36702532466c2532465171446651655939775474662532466a4e4334762532425938585065336a5a7125324239735825324261657a6b66706664376a2532464448253246366a7a3331502532466170662532424e322532462532464379507834555a58346449754b504f25324251716a7a587348644b6b393844636635364f5777727525324225324634576755504a34686a392532467554514d4c31394258742532466651584236507179375952422532426b356c6459753639684d354c4a5148624b7449486862374963504964557847593553564a373634775432626267306d6b384769667078516a4462532532465453787a74564c5656336e556e466e756f3966754f376f52784f394c585a4e6a3046414325324244344335684565524c376a4b7432776c3545614247786f624a68767125324669755a4634506c4e796638734457317a77363734384c36503777467770796c547568374971444a354d444f6f56784d633758513471674d3064584e4c666a47544a6453533273462532464d6a43655a486479366a5939314e6776535448765534753433594f75686f50545976496e39705079554a4176344c453630656f4c5a5544526765756e35695235513672253242733757466549456f6858507078667a5a4d764a55525655597532616a336b25324267364270484b6261445a5434477452556f565a517643486e793738796b3276502532424c5276732532424c6e4d47685437786454356363734d6f36543468753243524339626370792532426e467135726b253242664c4f4b586f38524d33735a7662466c75785a69754e7a7a37654546506455793370487243575a253246694f63583547504b714638753672735951454e31786f30613746566f7077485433364644654c74536e546c5572537053784c646a4d6f637562435963443774735472514c4b5a4135366e4e4d7739644772664272324871442532424f454c53473764673865674572506c68726d7357796c6851613077664f556f5225324243346c4370594352354c617932253246316c6f7947495236665077564d4764486d66665a356d496978727265253246785137512532424b6e3351546737454c55487a54533432253246425861544c4a7777624e2532427036594a48253246787276384d594d585a7559724235637858796c4857253246714641464e3531456d32414557647a4353796b625379797357625865453358414a61654570333566384d5a6225324265774a35253242337a427462467668356e72694d516a37557562766e6755756d38565a726c33253246716d367572514e654f556c304f6a4963576a4450433566624a375735324a6e346a546c557a5070686c5772356c47253242253246574734326e4325324665704f496475496c423045527258543839706c336b496f7a2532466548644a6d4245344f4830253246516c595552613852387236666d643149326e71554e494847564a4575467735563755253246504461466c36794945426b71656374427775434a45754b6c4837566c51743965766c563925324644794e4d33312532425970667236785937776348253246703267417935667a356b6b626e6c6b253242306577646357472532427461327a6272627536384a4d4f4c7a6a6b746b6f79564f5556374e6a697549667243586d7265576f426e563247253242446e7737587a52577a7952746f5535565a6831512532466c614e77312532464853714e43436931596779304274454453586e7a49396f64316a6f365955434f734d744f7836394c6576756d64666172516e374f5546356173416d2532422532464645512532465745563450713141784645672532426339737652487a414166347244336777786533435a62435164547667495849696d7170366c33614133726274726451736961674a5055547a7843585a346f78564e6233764731684e57523047652532426a5a754e54776c556a643073464e59366369793763496555386d6d6775524a5563766b786f6561326b7234474649483163464433354354463052253242375625324256456e706b2532427677356e6874656456794965695a4773584855346e785777364b324b4d7a595948664a56792532464f746b4b425a4c6658716254427a4e555a4d636458435059413136704e61546a3043554f6372346d334e594d66634e4f7a697471435377444c4a505634586956495250336b5a41593738476b443974493250416a6e3374696a6d436f456c4763776d616339686858784c494255497367594769675235417639525771334a25324638686a64574c74664a4770356d7264634c394e7875533978307549796b656d4467653372432532426b35473573637a505945526c6d4c4f6e305247342532425055417531783133326b475a6c386465253246344d647a4d594675382532464852325448714f464167724746486773566831673465757a624f6b394253543245656253354179576e3377585a777463457359634e68397041434f354b37724668353574794a796879617549784c47472532466a63434336505a6a7a5a39677a643372495666576a345057454372253246615763306b346e5168656246413958516d5943253242326c756341383667515548394f59685573436b31334f614f706f566a756625324239756950724772506e6462382532464264754f395a56506c4e6925324225324279566a253242333932457656736337253246466d253246794a66253242656361426139534a78596656346b6f3741324850765634484f5354444e56356d61414132785a7831527156336f375072326358575054426539704d25324264414737733144327878537665435a56682532463373786731716845596e51362532466d5655586c327041554c745a746f57757644667471377a44764e4a573671766e4b7547386378754379323936656b334a37514d4153694a384767554f384a625858324f74647169306a644273706c6e716c37347679327a34586b5230797053665837485471477a2532466134754a474733487875544d7a6179586c6a6e5337657a365038586f393052456a35336d75253242444f467334444e716a6447354d4c45686a544e6b596d707a4c394d7054523377627938792532426334532532426f463951685765253242373031704c4a56426a4e6951393357467a67584259456b3141566c2532424774374e666d6f61467649724e54564678337959554b7838483647567657346c5832304b6b357265594d6452576a636757626567753872787358626253376348326836704372426463724538485961513872713425324275622532425a386377253246346a4967614349644541694d32614e7a45554653626b4c572532466d7577736f45467148727268495163516f62515733314770652532426256346d5476497442545962316f36353730674e3847314f417a65552532425348446b6d4346764b58687264324844497076544b5952686d725566446b484a667642485471654856316f59436c666f51524851627a5a796f774973414e38457876434d3765325739517a47394f6d4564495947763976486f625a556b7332755a36714d574e524b32526a376b773659764765742532426b74476671645a6f6b49444d4849756c326658355a4c69435953706c78624e4d723168555a356b566e677473536e5243343563507035324c4e52727a6a724c4637535a484a704f4250416a724764386938456d656d5746527572746b7443326a59763559754c5030315436686a576b6a6867447a693955544f6e39386a7970664448657555253246412532424442624245655436444a4930306c63704c46454f79306f486f6a49493638793539493467734b766567426a4a745a48717472624b564974654771613049776b58625958784f5379716f4567507a66376b6e5445253246496d6b4d504b5539776b48466e734a544f44767451305945727641326d547847316c55665164756d6f3456347148394c5536327a654564777459394470327832546373444663416969416a6c4f72584653436f503677484a4c3572547a3438436250634f4e5a71334c7a6a32725067437870526569596b44653669644b4f6f4b334e4f425a4461566342417a6c5874456e614e7851556a394b5377542532466534626f6b356957395576705a4b4a59646a5969566e587669364c523153674c597a754644566a776c6d396c55343148654d495a74374133596f444d566473656f4d6e767470746f4d68587a7870456971334768306a624b6e6648795742627a495656305768694e6f4e6f426e38726d79586f72624a4b544b44776970713457706a364c62253246457455336b76636a62494d38776e7531736c4234493771544f365958425a715239463575414b4733576a4b58576b33327863433851544b5a72306d6959512532466b46694a68686159484f72543662505834727350685a6845685a394c4e523132452532466d4f7a4a3757366a526f6b617379325133654773516f496864685a4b6645594934356d34465971646a6941553563746235754b6173494e6b2532425343513764586772543244786941326b46746352634835764163684944537577416a677a41646d5756754937645a3355782532424f526562253242693559555431317364356a637a3147305442664f316f3944614f65596937574c544e53654f37436c34684675526455587638475a53786b64456a686a4457656432556c7347616f7459502532463164434a696458636950574d504a474776706145574b7451355a316f584b54556e38624a3934427354563356675271545265506f5646505243587a534d4c61695a785775706e616130706a4e597a74393070784c4f797133526b544e47467152425a53704c4b65466d74435164496c716e673950454d253246686f6b3768746346354234727072346a36685857444b384867656a4b774e4f5058734949364634564a556c5968633464494b6c6534453663552532426148614a69466c33544562464756774475777761756f58327957736c6f66585045544b734d25324252636d4e78527a5a593070566748634f7936527a385125324250703250665632783238723669636a3356733377415551764234534a497056584e62446c5439735a756c4b4b474b30697a4f61386e72623146784f4233384b6661635779436439483238546c253242505370343356346a64473472546e684d474b71757836396e7a65655650354e4d727a593963686c5a477569436532584a6250416d4b587865473053737679534a6648706777634f535655787176794366446a6f307643546c6a6f6c5965543042357566597868362532424e4d796f4e4d6d33574143356758415537345a676b6353313425324648345263673348504a796b5968456d4c6e51253246334f7155585177754b6a724e7a6247253242456b4d454a313679767a334a487a4f5951366657626b3647726847516763747a4c6c465743586825324235396162786e436467574d4b467a46466b48437442756a4d306971596332377438387775496c4578356572746830724142746d44397a6e784b69346d66766e737244727367513735434737346563253246537033795654374134354d6a763067703652253246646f6e7556674857356a456825324243343632752532464e6d373337253246527577704f6e426838725959574a56365151616d356c71322532426274367869346b3750253246586b7a6d58356c494b506f67647358384a684a686279517171693870356b6650426b583649637654586f58347035435a46643759646972464b786b6630744b6544314857664143306679557444675235565771796f4d4b6c79615a5649517a374c666a435a6775386250427170417165757573306858505a472532466d75684f387448517868622532466c313837496a363657775a577862364652574d4543666e566a302532466c52315950397742565832374c727a547070394879306b307a483671673947646c754f51674f4f454e6f56554d4453583959704a62336b7a5756462532424d494c72593556665247765751724a253242595a365847657371384277515178694e556c78504e42516b7458454159253242627039494a4545435a64474b34764f7542444d7358716c5a493769515046574d4572325a686c6b486f68795450467971355a6c5150786b747945695156615a4c5352773277644b3361364e38526c52715825324236726668514353556c5142696648374b564770636164764b566c69442532425a6b4b69654467594355253246253242674c4d5a67704732314c6e36697173474a57697550545330587251634f673469504d46757265343755497a317a3033423534306f302532463478354b78575138646b554c42524c643178556c555a586f672532464f526b536e61724442556b38565070763825324655716b316f774658786d4e4b55794b674c6231523552716b306f49636c30754a5850547139524d52704d546b6370383374667730636e666d33473878785144425255473878314d6338524e584e726b6c4a355934766b756c6a49667145374832393846696b71306c725548736f533862714b73724551626c5a324174393335676b7677526f414a6b4a7a77592532424e464959253242686a754244696f6d4e6e34656c564c74756433656b39525262526f593936616c62565330456a56655a6c53253242766d716d3559315446527a25324668346576574a6b574b5868477358585443534f624c3630494f62746e6c4e49564d70716e336125324638636173594277253242612532466776587351624a57764e6f37475658793843635038304c79656d4d5078766265654d517a6c6c6f534d4746764a36794a34523369735479587a316a6377394825324250484d616a694364657136514a58354d4a424632563163755a444257436451623169317a4c4375687642717738314d694d545364426d386255655255423058444d776c4a6d70674f7a48707347484b79666763563239756936706e734c4c6f3750543556586e4d6f51577355536c7244444a5663573234443554566b4e65377025324266304c5a34496d7671556b5239616b7774657925324231316f51594558316e46394b704b58336e4279703735755731626152425970347a4b553973784b46583166394d53774f31546c636b38714d6f5954533835253246564959767252416543573957374b4f4263516e6946474e4c4a73764266735652507a3664326d4d6179374168356331794e58484e4e4f755447725375364c4b416173536943564c6b374779457457327047636773706a7a544e5a53742532427a6a5243594e455a746c4c674a7a346a6e70546859306a6e5a6234253242305942583256443054734530727359784d4e51384a4771436b4858576d6a35687032654d42645a495368504c56566b6252354b6c677035537a436b47524e4b4f5a4276584f304c47486675584e34504a43594e556544504f527665517a7642644e7173326a754b6e724125324264322532423879562532464a2532426c6a476a3551253242474b4e4c51667755576f356f5675767044767853486f792532467369527a376b6273473130253242516b7825324630615470736373253242356c7168305271253246566837484e4f50624939796f6e4556515257657850766348614b306866777664383457365131694e7835315a4d39597a7543436254656e5244586c744e474c473653417655617a5653392532425a38785268354c32584c253242655968684c655a5573515337304b48624e693276574571486359717a664c686859376f395a774d526f6b69754747714a33663752553441304c4a7a39676c4d52707937535977554b67346259497a5a4b79764d50526764324f616b4941614575386c526a496b436366616270346f35446b4539666d646b473839557a73754d37764e316b6a424851636157475178535a6d4e66475669797578706e7a644a38457337586c447a38496e6a74574a72673735495133346b7233656f506561796366726f484b714278526748537943627161334144253242555a4d716b3761476855574c253242393556624f4e6c48324f4d6a4b426a6a6c626a39684f46534b546c6a6b4d4b41495664694456642532425a7379787339364646655a674d785771356e6866484b4151517379527663744c3568475351513349716e794545724f35706e25324275676f51744676712532466872614f37315959474573596446645163484179617a4578634c6e3865376f63493548454e6f397351447732576d4f674a567774576258437772504d64553042624d303043336d52776a5447346a6555315659717a6f616f50566558366673584c7655382532464425324230436f71756f704d326f624a6e3037724d63394d484a6e3950516e73714143594c2532426243434d47535348435a757133793149357078474542305a38396c4466574568725549754e6f544b74704f4d346e6b537a444b506e253242435a426f565930745a764263556161446c4a5a784b71754c316a544e695866364c33665044745a756d616c774770505968716c58565363754556692532467343736d6b6559744b3436574f73385a446232724f4c487425324632346d434f766e68426a56454b6b4e594f6b656d65393732716e3674375a64364256654c507438686f7671747739544a494944527837507a68494f7070566e7a6f50323858347975537a31253242686a30754e4431457633424971354c4d396436334b75586766314d4d6d3262703542363646784c5141466c4b3354624f4663674e372532427376576f5a66564358443343616f586e47433642627a6d3543697633575944644a48464d74306867364f634a413977356e33466c7043387438534e737565714d664578344458434f4f4f70435577253246762532426c6c384350464d55345147596e5152586943676b2532466571365952323363253242773974366635776a43653567484354535959496e51253242347668446d25324270577a6a476e4d3158323425324631446c465675786a39596462443253474647797958317530415155714344694c253246624167413969665946624c73313666713667776a37626e514b32583075355545415a706a417a5a6237474e36366362327a4479496f4442616875253242374f76334c48547625324238526b6459356a315543306f583468566772354665727a7a7550777a417833676c394252484f7948386b31253242335537644275554150666f59645574796970516368344b5537477671364e494a6e636e735a394c4d7445484c67646c5a4d454f427a7733614f6a3166444b645a6a2532466b7842334b49535350253242494e5334674d30517469574241304f394b5842487458316174343647786b6d4a79696f69687650586b564c253242494962637934456e304755536f6e33534e4a384b676a623325324273396e68393548544377633449775566646a79694c6e5357456d637170526e344d3052716750373965367245415061586174333458547a666d6a335a647137735965487a7665776b34516d7a6e64386c50336d703866354e79556c5952426f644457776e5a436e453659597a68634b6442414d543869446b586d734e304779454c63686963644675475a7a3961662532423949253246376656545a6a424b565956317376304867694c3957434e306a44506d454f514c4d79484d536b5669534e427934327650655570532532464435656571566a5925324243546425324235694c4859703049545425324242734d3733516146714e36775538356234354c664d7176684e78634b78633863586c6c5159454b5652454f4b7763546d4b664b6f4834697463786561396a797076624972644e4947466f59474b774e5069307a5062435a4b6a3479597052777978554f59317a546b7a5570476b55424754475a7a50414c48684e696e682532424d6249684e5845386b25324643546e4875534d362532466f69463950424b444a394558424b4e6d6d724b71654b7662784747327636494978537a733368747a43396f543056786d446c486f744375586232712532466a4b506b7574534e335366536a6f55386957687a496f6d565677736759614c6c37394e4d63636938624f546953786f4674626e634c6c6b655743514967324d7070553553434b614b62565a783025324252614e48784c4d685576536b35594b7076666451526a536e774b5645593871544a7852795875427349394625324247376174774c66427044766c385370746f464e454151715872453850686c49754765692532424d614533577444546374776e72386a736d5344526d45677577386856576b514337656833684b3937685575366c57656c74376f434852706559795377337446796737253242376478704176715a51666f776c7a54574b327836706261666344764b366878686d675872415763423472433659417025324269742532466b4e74414a517a496c467357594b59467544456956524765564c646c4c6a4f45357967356e6156744c4c304e507078744d4c54754d3336313364397432684c68636a4f76484a587a4a387756547851423455643230704b4c415a536558312532426f6670685139316f736c4e47367a726e796553555264253242564b7a626c6b5756357672353567355130453562734b4f484465467239365537676f7231544e594d513741253242596a75475353663654253246465661626d324439336b50684137396570795337336f4957597870714a30715776704d704c6c6e58432532466a77656e47617a775569614a345657765569427473734e4b42573035574442426c344776587a6a37554a64556b766925324263384e514f7773516a496d5576435733706341564a7847566e534f423841433565676b634b38647376766a496874484c696d49676f415a505a445543485239307a6e51676433516d43466f4b3567556c627a32414966694a7676553177253246696639695230716b4a78517366727a484f65726825324659253242464d52795a67576d524e6758353946425071566a4e5250386470494276385737506671626e6c796b42253246535225324225324270516178566279785352656c6b756f626872714270753939633959526258686a2532426c784c382532426774693365304b43516f68554330507a694358646c253242394671686350684437253242567a3475676771756f4969743770336558597050494d535a4545757758335832554c685171367749657967694c7a44593125324253644132614e6d6242596a2532426173253246754766665438452532462532467748505a67715256327442327058305361424153317456534767675a5630583367794c356e6b253242343353526f714f34566434734669436f354770396b6a5068574d7848784b5a754a78353877664f6939414f3674676a38583176564f4f44786a664c4549335a3970496672565451444f565747484e505755445261624850522532466f253242624d47765377437547447a7576774b77577569307759445732546337253242766371356f312532464c46313149496a71344138446d6e6159587832434431593662573736565168392532464d534d754e42576d4551253246416154324b394a3478454369593136337a39535031786468664e316f4e6f476a37564c7050564772334e4d416f76344d364f364c613742624f3161585668795530692532423137376578354e352532424d6939726a746f486b67447036523752766d485832684b4c746f4d71342532424a4e703734326b6f77456f4655697337392532427834432532426a6e79696339456f2532464738673242706f54625254792532425a694537304648644a253246714872485175354c7750253246634f55397334544e3372335769775338474b45466d734b7a4c3745667a712532467747443850616450786845415241737a4a7853654b5271524f25324674435453453655754566573565596876596c3541796b6735304b6e45304f494f356f504c2532425348757372654254636e7535746539486c7a3859456e79483150634d253242654449426137443261473464253246336d48713633585425324225324265253242317925324653626b523268664a433525324255746379385a493473447241363525324266764b6270726739317a464e5a6a506e25324669356f7034392532427576476e7a61695757743463706b345a64625563317268714142253242733168753662357070684b3325324645776a685050334659384e5048656449467938756266656c414e4b42536b5674384749766950647a6176634f56425a77424c6a516c54306c6a6d6e68776230356a716f7747356544575461724b4b7a6e796730376a4d796525324637493238786a79614f6e674e2532427a4470396b66325325324670315a253242704933486d317825324255654665343972663145562532424a504d6b6239323831253242595261797625324638504d65695376253246444a4b637a427832613639624d70304a567157625a35313141457478537877492532426d35653342497569396a38756d557650784556346259575654437966704e302532466f46566f3777472532467834486f53354b77425549424e333078253242634574764e71646359796b6a414325324230415973584b675447435574796a253246624178683146516f6f33526e6d45656c3331594771356d67616b3030424f666b54476966746c5730374276545a6559745a41716d33754f573262534335646b597369495a455877383234376c435259553053724c4a704a46682532424f306a6e46343673456f7869316f437259716f57545a5435626a4d4958354d46306b574a49624b41347a544a4475517378626558253242596f64495669394f31766171326c64435051676674467850627238617263765146652532464130675359704352634f484b4447536434703948303875317236383862253246395825324634436350535a48726530514e5673756f737575546b59716465676670414d715045706f7844656e744d25324645476c7a36756f50486575315a3764655266654d4d387a7a676e644b574272347a4667366b6e464e42484f7874324653764b56684f456a5233456d73733043704c7a645a4238443853366f594874377977374643785a466f4c73786f674a544a5a70315777394e50352532466b32713064483547784d616e4d78384b436e56316b434172766b4a654762666f70253242524a306b68777a6a676d70576677695831416b4a4b25324234554c693825324653776a73377146616266325a6d795a6645495a43386e585076764e59395668544c6b7777716d505932574b544861454e7970684e6c526a68436b767535593369586a7349566d59504f4c61736f4d6353726b4a46465359446e78596d566c68735655736f594b35725530394a6465484c4e6470396c664350707854686771474c44332532423176304465774a5679546b2532425949757a6b55416a675a55347448686425324275776250415370367764594d6755595076253246253242623034716b5a6539304e4749703158694d45796c65314946664643347839356768616d4c6e6c4b4d2532466a7a4156434936326c4650472532425354524336655165326b4d6435334f517a4b53546f69484a6d39615a6e497138614c564c53704225324656596e636656426d66366f4c414f7931326e75434768655858486c78756d676635362532425744727a714e2532426b446e746c775130396b3025324638717066717435786269614554727278794e3547327a36364b5148426f4d6c31524e74495478324346632532424152716b6c5a7062644670557754253246344a716b4a5256617075633056374a366a53526751253246653464616c65325833426c636725324265425266594330315764774877637659716c70704d36324166316156624530556c4d67675961753070336878576b48685631737825324272566a714a36464a34644551304d6c7241337879373157757a68556d6c4c485270504d57445569465669253246526a7943253242747230617a6559696649356d45524e6b624e784e504f6a4c61683153784b77314d5525324658434e694d4f496a6741376b77683150524f57596f492532423148475833253242565751697938685452253246544f36594b393375494b347059465056335061426e253242422532464d6b564750547a4151477a544e424f43445a3349646a4469313474744b6a2532425338304325324273425066724a667258552532424b6b6b79787a6e50386e3446625875396b5838594e566b67706654686b364d5865684d773365536837714a6253496c614543794174336d756d25324263715a426a6f4864475543545125324250253246513271704c3459486b4b6471644b304c634571733579697a493669463744686b7569716f414b546632633658456950617570326d726f6b6a4a73317645396a7a43594738736f78366a68253242376b7a726e615459503379566e77253242764b64494b556c5467724172374d576b7135446d676e494a62476f6a34366d4d754b65716a7650424f324a7041384a6b6a36446c786f617341613255634648745756336f516b445562415253716970394c6a59356964464542644c676b4c773148336c4f66765175576f346530497a476c6f6754675065334d6c707a4e6245324b4e7461304c596e4a355a6d437437765164746a7878554374506f5142484a5430706f34734d584e4e74426b4d67565962304474473555335246697856335854704c53636363567a476b683779734c61713772415578676b73387a7149644a626477666a665751694b4b6c717855253242753854454c787979644376343450304653726c705a455a68416151636534676a51253246414d37426c4f7751386731754b62776765345870594b445a704b793734305733454662764b59253246253242726d364754346d443159487253737450644f774c5059796e764d5945414a474b473358444768493873386a52584b4d4651776132674c4c397a7956334f6858493478344d43647143635473253246636e516e614d6a2532426678386d47762532427042674939515136334d6b4871334c4737636c627637687a25324635632532465a74346f637a4555613869647833706d724a6d65747738776e66536d2532426f4a4241796236364a7571596b253246414564467a306846484e653349364c35336237383247596a7871474f5444346d68666a32464a3633357439457870564637774b446f416739564a4d3776553439565146374c6c424f6650696a62724a51584b54784a6b7925324242754c796246484856717036736869684e48672532423364525043303056577673354e446e734f3479745431466c4948343953795a2532467158683144425430487039726825324236554a6a7773556648666c4a682532463762476b33734e737532324e7a386872453761394b65303874734c66767a6c52513377533131674e545173734868626166394a782532465753706d42527238575a436c68475463427278414677464a756941253242586c78704778454a67774b6e4d73586f364d676637364b6a584d6d39436661554c4a66736c73574863733762776261506d3536744f69367a6d43725825324277504e487358614459716b797474714e694f6c7235663769463067445048566e693837346d377a477a3245253242526b395965354825324643707270363361324f253242734e4f32636571395a70566478656849667a41596c73386f6c64655a7a6b6f7475716c5164334f553954716354615269596e615a78306725324672796f544e49585a6354594f5a436f726c61744e5334774b7130344b63384543306449574425324239777177597a6d796f56496c786d66504e4a696931436a6d4c3473622532465274516d746b3234764355316f6d763179697432334773726846507453727a5072756a45533463764870796370413250647975784f716c46514a7a67646d734678584d6a784e702532464d4175645736704a455561645a367336712532462532466454755570474b574b495745734b634350674b6d766d79716a6e736657646e63384c794b7378446478446a476436704d544d2532424f4a50363043744c54764a6d4a507a6a635342744a576d36794c30677078745a62336d6d4f3759733467647a556b554a79253246794241415075716f4d3168477139346c7174414d62477547623652477644716b6330357a43505776434f3565476173314469764662686235564f684e416f7a3753682532464d6348696a6246617549494a4644504b3335664753743473356b714c3257632532424a61756c794c634436754e586862253242726c7149487056514b33536c3679347141554b326847574a736d716a30354a696a5a4555624241797735414355364579576131685064676b4a5a4455455451687334505a584a334878374579724c695a4b4f6d3169797048697056634b53303644504d386c567669325065454c536a646e50645579596b6b434b6a6d31454f7054705161315a5a5a50326c5159564735253242494e55634a737261396f6f796d73626d4d5452726a514c516d75494667344e683025324269365a713265314c3855464b4a614a357779583261624f6a69374154616b6b2532465162756b745537323536415439696c715579414834664a305963376461424d37517344787a253242346a68686f6778504b63575370593441326742396458625252544362715a7968626843785378314876486e3230253242584e334e546b4a555639486d6348356125324649303671463436645737734f79414977704a3641686f74595a6d452532464a3665506825324678524b4a4c74765933626f596b355a59575561704367774b71674d763165436663646b615264514558627445625359344e434f444c6a4b71766a4156385a476e4e7a4f4d79325a4d3971416f574b7833734544734c484a45746b6d394c5a6425324276546b69446142526d5166726b35624d6b51376e3647416d675731253242466d66395766526c6d7a686c4753547a4d444a3372537a3865447a6c4a776a564474585a376d37253242617873666354316535556e34494d6e6c68755367626251777138553059635263472532424e677a556a68364f71447a374f303557413544486353466e71494f34477242306d2532424f5154746b574d33556e515767707678395937566d563865724131782532423748365767736d5467384149364f457643314a484b4663784c48594433454963693070566a6f483370344264514e25324271654833736854647758536e394a6641754a474a306d4a764e73374e3372784355305156334f71253242466a67736d613563384773675477387538487a37707634734e6a59336f79796447554f4c4f716e4b67496d7438344c62433578727565634357435772613232374d596d767a396e736d5368574433253246584243734450647950533345554f4463395351706666657931546648674e4c483741415032466b43426c625957304f6d4c46674a48726c395873787a4b79746968397869324d33597754364e6a4343457a5476337141253242304a31334648696e4e73647854524d3668723639656f6c3765424b7669554236425a686e42794e56393779737173424c356e4956367068414f546e51746e4278774a356a4557313077586b6738314572316d33684c425533615250776773596147646b484979514a72723544364e422532424833374f73436c33384665675025324254707052774348424b303735437236635a6743794c484b7530723779517561356d3663385a3952464b475a4d58506f4130796d34657864585a6c706362776d7252455153676d6835366645495425324625324653416d727852726a764f6858614279463566327153566b6b6556717525324652766d7168397567344c754f526a6b436e59457672617749364373595a4e6d62646648446b394a59572532426241776244526c64253242736f6c6353486f4b4e744a694a424252737936646c6a476631514c4e7a47374a3575494f72716f70537a6c364c7531697537414248476a31535178384561453454366a48664c32366230424d5173483541696e4f79543644416763594865384d57376a577734625733315a515453567a4a3156484b4f4a654438563965374f41587751774c62797761377445576259764d253242626e6f3959533648776e6d486c4d547645647248793557516a5a556f737775533025324675454830344d374158744f536b6f3667334f3174302532426c736a467367426a6e2532426a4e72354a396b4b61424c7264646341363668646a3663644272654f4e67564f392532426d25324248353455447a776d6c79534f6151655a72384b454a454864556268395539485671646c25324254543171516873456a4c537a794e25324231783249585642634e495654543043784a4c656e39525a654f7476776e6a4d385533496b796c564445564548304452616c6b6e474a6125324677344271456656676671756d72766d373142694b4c44464d49416d44764157503131707231734b586f787070573733494c51686b347730766b6d6f4535425454776f6e6449417976694a756a354d4943783561476b344e6b5470683771566e55766e253246534f4e6a75387254504e34594e7446497671253246425a5a44484a4e43574576253242646b556e3573754973486a7343445067534a554d6d5239516c4278366a6f5375314e4e4755577041344e6e4278614f45376d4f3359253242746264667a7957457645333445554f6c305873314e4225324663776865366d47664f4a596a69335141644e394f733766366b5a795041757535735072354668644b4563365a696b6b62617a2532466b4b587430657262524e4a6e516a67496e4750776b4b766a782532464d47764172436c3256317350694e6f37766a2532424831433578536756775149683368452532425a4163394d596d66415174634a4225324249464736253246346e7857484a5a704b6f395331253242354c332532425943745069377a703361365570462532467638373049456f676c6e7a4e36652532463544515a4d615767524b61654a47666d7a367150614c4b525837797452417037782532424f4f7061554652515a62794467554833484e644f4d4433674b78546554684c66794d3333486d3254534d446c4c36417372765772516752784b653551665164366a306859755a584f316334445158794279776847356a335041447556472532464b474154785041634d7079484b78526a6c4e71456a776b484e50427643336925324650346164646130464c6542253242667a7142456f616c67436562492532427030696c6758253242325172513142493462613277366432695677595625324247444a78684939316a354425324270445130413674577a74596179325974586737706a52437525324637526d5a466e3177466d49744d4162646d59667a726f7354347676654a534c2532427477716d453659354f5134795862253242696e363641512532425344304347742532426a474e6b705a464244534577646c756d48733948477849525a65615a5a746a584a456d676556516d51733872645a4139584338324e4f52586551634c414d597a56554c6368364546594476383741506825324661357735566a50583974727957306c3450752532424473616c5233436851355a39556b4d334f48584b71464b6233376453634e4f77346e58777661784763643651786b65376c397247646678364e446844596832565a7978576d5164703665437279537938474950514a7a4f30594c6c4c31445557757a34454c634e57576677526b324c556a534e4f253242546f2532466f6470326b58686654474b516d38707956696870253242785337516b746336423032577a664b6b45493641467a7a7a37414a3679725673754170475839356968716b355142736e5237633754313663716a583469655150554f4d676a4f324c66424a5a794949664a61534c3938253242777a62454c6766757675504b66376b464a4a397455626165656d464b593133624f6d3361313073556f6c33566c35587a4c714932676b6d3536516379667a36725759355554696f5a6d326e7a436b537569317a334e432532426b59515832524965676d5a717a4625324258455253526861684b58614c354776645938436e4967385534543774377236724a4e4a57452532423149417251547846447248483641486d474a4a67526853424f2532462532423364634637434b456137686e5473337137454c6a79513253776f4f7a49523156756a6c72686f6b4b44314e78354e4325324279515a7368306771467665555a447844467a4e4e3441554e623333347a6c71453153336f2532427870745954355a6a6c6b50374469633338464c6577675645344c46707048714c634c42537672542532464d4b6d4d47386b7135333425324638304833614c416a55586856504632546c305034676639667445447375744c6f357053704b67417156454b6c7778344366774f43414b46743571364338365451755658354e686e4435705531387275306175306a253242316e755575376d675425324230504a506e4b656a5745705843632532467274734a504550674f68436872597630614b4434705875636c436a6e4a47776a6b675264764a253242717567774458596d6434486435556164484e4b706a33536c594a76616134716c72443279474e54314d73792532423639566e4c714a324f4c73464a72786d684d65666d534525324648384f7752524f327870375a324956703471563830513941727355794a743158525a734f476b353874356e5a754962554679734a4d4c782532427133614d4c7761416d4344753735714b696c44546f4a7825324636336747785453502532463779675357797777595579474a6f354170536e494a5a6566453049727668706e7454714f2532427965423376253242415166386e6f4866384832446538663879574454356677495725324662386633557a253246583446757072382532464a2532464825324656374e51354c253246627a306e3838664e4c58367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a3646367625324278617225324636597456253246324c5676316a314c316239693158253246597457253246575055765676324c566639693162395939533957253246597456253246324c562532462532465446716e25324278366c25324273253242686572253246735771253246784d517466682532464e3677363958253246346e253246416d25324635762532464539347725324648384679763250312532467a433350253246586c524b48253246747642334a45767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a44334c387a394333502532467774792532464d5063767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a443350333168376c2532425925324278666d2532466f57356632487558356a37462532426225324268626c253246596535666d5073583576364675583968376c2532425925324278666d2532466f57356632487558356a37462532426225324268626e2532463651747a253246384c63767a44334c387a394333502532467774792532464d5063767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a44334c387a394333502532463078666d2532466b253242437565506f667a65594f25324633253246786a2532464a44755025324673326a31253246364e6764667825324644465a6e7a46754c49436c65386a302532422532467836582532466f253246513637253242773676646458447341494e6c253246414a68653576767a47734162736d4d25324256253246656138766d7678383225324644503650676578486e76336d502532467750414e52646c575525324673765250554371592532424675594f6f4c25324276564a683244253246514b754b253246544b7651253246366468366b346e2532463025324644314f39675a3858467638445538253242624e4d2532466c7831755a4f33613546645877616b5244304a3065614b674b5769553178734e444b646a6e703564253246745a6849453870545031486c304778746156436954374876356e573464434c66705453583469253246703137515839366a486b503230703448614166304f784e36586935497641344450343047583630393879572532463736646466384539564e4d2532426765753957795a517835706548504a5772586468754e726a614a695534685169424a3935386943636f784f7657424558536d6a38496e363263526d72656a59544e4e663452484d4e78634c423048754237694f654f64557a523662414a5878504a4f65796d25324658764d306568463073724734414f395a354d52506c346b78345131625154584b473046335a642532424525324249357437346738786261596b6e253246656d6858426a72397837346f3572775365376d74514246706a67774b31326754636a564b7644563351315152396a4b7a323968527a3575305677423838364d55366575376a6d74576c57375177576d5939564e78253246723730696a6d57707077775139374b74387758772532424b797a3725324673623759304d4c31505853612532467a6f4d717256743435416266613034784a79486c4c5a696f3934536e4f4d366c7634346a4444794d675676563158646b486c534d466955436f79527353573933422532465338537044774e5850496437704637544869495a37426b59766f50615a30553775496c7a77414c55514c4f366c485a65354a597561554539547650306b7842726458686862385436514242394462456f546a6a6b33624225324247764230675542575334785a68614e66686a7238307150547557554e39692532425855704f7959703050584f43645543676873645771396d61554d4e51556e716b30425243784e696f7525324639383563575553253246675448716e41696e4a4865646c504e584270336c61384425324245444f344c366d6961584437464250736a4436336f3355534d766e56586271564232676b5837577278786d6d4d554d6470785772336d446f73545079382532464e5031323943356657356a4743524c52393925324641645a512532462532463675413634425350656b576f4346557950384758552532426d72656a3835306b4355423350436f4a4b334159706b554c6d364c627a7a5968793546346f3944446371483164253246576d65736463306e68383373384872545368526532386e5736326a58744556347765315564426951354e4c444a444130414a6742253242703078386563534334545352655962704b516b70504665436d795725324272576258794176736f76422532427a574549636e3450347941665547776c49794a6c55514d67304e716a52347a794a476542737a55657554354548774d7153503864694169735634544c69666c545957386b566c377a6d445838416553503448704a743653412532464b6e6461507951784755336942734f61456b47776f6756317766576c54632532426d54765241304d4d4432397a3336594154736a41514a34647631586b716f427059443731456b71774e76755043526541537931786462374f5772527670592532464e48757a4447784559636351592532467561494a5859704f44313538764c396d306a786c504d666230795378343967504649253242685045335a5772564e46734248614451465277706b52616675587150744e3153416747634b6c346654723375584e6e4679687356316569497147654b4e4b6b764a53587934576661695242707425324277665a7531646d54536c6c426f67433758495158426b614b7a627663695938417735385563576a6f775439327148417948656a35726a66636125324267724d51484e683631374b766f4a432532424f49517a5a3361397474714f2532424d5a6e764a2532466325324225324259706c4c634c445a62674f316b3178374c6b45253242776c325244666b4a765472717a6d335538587047444d45506b324358487735467659754142325859424f64685051426f7936416a57547650364a645632787366335a34704d754345746e7773554d336774646b526279664d314a65486a5a6156594f515949744e6c4c31337a253246436e7842364152726f7932377368505666523151614e663074586966554b626e47344a6c314f69646f323650526b73426b347472773946557a43357a396641564f714537337333316d7a46777049356e713935593355744e7859476177656c4d453666764842253246476c633651716f534a7348504936776e46635445353057464f7a4e754f7578724665253242552532425750516477626a656f6d377976636e32586c76394e7a3855306c41666a315749692532422532463868447363475158636449673279515866543137377a484675696138253246425a744f696f57496978354b7557424b625564356573376b447564657a2532465a68464d684a5a78676d716b477858576955253246637977684d652532465479594566253242636264636533477273383852684c5025324644667970316a4356547168347a25324636444b6f4e32614c4c42746e31424e6e586575524b4e436d2532464136556d594e764a7a6f3643537a6648494f354e466c75534f723351344b546d424832756a79424a787273363174517575794861716a734c7a68475a6b6e574958753258676b315a526b7554724136356a2532466c4b6b51646a697453366f34784825324633564539716469317336306433754c6c31474e34576f735164616d476f3053626559253246253246696e424c6a70516325324677417379504638694b72305164376330695978325659614a467a4c41546638674e7543574d5333636e2532464d503372557a61714167794b4a6e32484d7334746e7873676c656351253246704e72472532464861646a66575461657079646362363742644b463830562532424c49653337484e356674774c6e78576e72766342646425324632574f3738726b7158253246326a58696b6c6479765a314a685363316e2532426874313872333432586f47624f6c567a44506d6c3467685a4c655a6f347a746a444654717753374335777536524e4e694b7044796456564a704546375538644d656d39526e4632734f364c7170677a6347717377787768526e43786c4d5a664b67617748784957673959357a6c6e253242345352432532423242446c31793856647075333571553150435742335062683352513672572532466779664b77426531445a3939464b34694338393345355a644264683443465568716f356e654d664c386a7736315471327a6a6162504b4a474c55462532424525324256253242547a4776536d2532425541397a685a51695a6f304e6e616558664f6635325536694f4e25324632417868734e4a377664615238546c646f69345062484d4679787250554447656a253242565432516c464475376d38723663756b2532464a49324d71253242484355684448253242614c304844364d5231383671636e32436e2532425268703269503141334d253246504852744f3974654a6a314a52453477334f6e7a72694d784635666e786d55684d71713271376f3952344e58754c6555574737654b646c594a76416d45547a3053534e30253242694478306b556234413949414a6a586b744e576379513736486f65494b565878253246696342693767486e6a765578657a4a66494c55465762307644694a7559656475374a447868707239475a614a735a763255753472377834457539714d696f4d67455079786b3265377a6c624b4f556f6c56347125324676435769306f78636b557142563764764a6f7051706567634c307669387064567146364537477959554e5a747234414a4a67336969513037715374334174474454396c524e54356b5052616731784b717625324252547a5a38486f30346b76544348667a466c346a505862664d6c76705330726b5539324a6b3151577a6a486c4e54695a5338534a46384725324625324253783859373869637648504a4147695165675732566f596b4f6f534f5632397563424b654a303665794f4e5678735677346d6f5836646e68474a454e677a6572345a446b455a4f355445754845746b35534133672532424537624746796330436b57365479785335394361305245452532425971786e4b7165435879584b507a67527970796c725a6a4c7079652532466265516d6a65365275374c3442456b746d3731323473654473726a7234316725324665736a515757253242506172464d6a33495a77384c745364534c4c4a663259315137466f346778575070394a4e6645797354783151387a34396338756f54472532426a3346646b537337354d784131514d7a5435496e32387951597548345347474c6f3657795a72523451544f4d734747706433726e4b417159665534314e74395056366158556e36595165646e3030463665706542417337727841384633253246524b4d637158354b5161716a7676332532463276754f5a636d68354c7176305659426235594143743537564f336776546346344f7546577a326159417948306f54496f6268675233664536336f6f344a724d764f656b51253246414b32694663577639534b47766f34663673376d78584750306271665172787425324655657937504539346f654f74634f6247366157532532465835594b5465624d32426d706d39727872776a745533636a6d7a667a37627a43574975314c253242666f746e6a696d253246524d73553359397855325868444c676d4b376750384c744f7474534f4f386858337a4f4f5555375279316e50577256253246775959384b6e434f5472305a54756d736c436d6246516836757972316f7963774d6234614e324a62345473432532427145506c5525324246555636564e253242596b424678737652685471726d626f7a39306470374b4d6d253242536757773838736846626d3769333141647556672532424d63746b74686e5a345a6c6c326645334b346d617061746b7a39526e6c576c356d37564c61466c704d4c253242646f614d756151624f654b593337473954577a4e364e253246566a7850546c754c416443586c376268337579486725324232627a7867253246563368756a506c346d526961253242703657713242253242434c5639306e695a696f4834624b344e4f4455306a4255253242614863384d71757a6d36744474346d4856383056304f25324634537a357837457a476a4f6532773066774a396369643371557175426470383968626335666d7557507a6b744b774c4a71663574456d4a306151384564677a496142534c47394f306b4639553838455a677a543143363932567164564f5a5a64525263303745725235795a5769326330553774397770766e4a6979564d6458253242736473646e4a732532463854644d46336544696a533044536531596269756a316d646e553134717865747369644e666e51627a46524b58454631486456784d596a713770595561764942694c47773251253242304d726e424551684973645a53356e253246546a7a385069794c6f756f51253242465643777242325277717577634a6b4c54567750596d535269253242624a76636f504c37685539784a73506d5a37505832574b7677776f6c564c334b345a6162462532424d683356646f4143455255674e77737366646c4e74553679527647523830516a3655544865506525324238716e52366f3447306f5555764f5863374c7248554d4c6f3249424f4d636f4f756831533252334e724474415856756c597659344c38717665303759377553357a2532463653634b38416c693853696744455925324633624d6d6f34454b6845746b4138334563736d736a76575056796c383550445246566b4a644255513456713671394d77586447324668776850316f755846446f3231507975755a50344b4a6a4a4a5764464a4e735142696f6e5864427a59646c54594d6a596a5a744b506276536e75347670786651634f477a75385a5a4339253242477a754c4b553664593733693351303879543570764d65744d71565337576d6f4b7745363836796e784c37766a47475446323569773355316874253242746837517732713571794b747a4339375877792532466d6d48414b725865704636446a3663583749526c357468642532427259476d3752316d346d726b6e2532424d7157443332455339714a63622532423438785a696b41576d596d33597938746d68523855774d4c5a6a5125324236586639576f546a695457647a6a694d71516b63694c5464504755546c51334739524c32373432334e66455554336d5a314d4651415a4f50746f6c4d78343155366843646d6961442532464f794a4d6d316d5352434355684c75666e566c427968415670464f644b6a4e4e37677171653335545650764575477559733935786a47702532424a4f6c43566e4a37515644614761615349596b7361655558445a74506737734b7331614237626e50455a5679556d433631376e545a77453753546b66567159513969345930695a4a504f664b62415264466557765239624d35346a6b7a3145555248344c39695558335a53305678664d535a63452532465a6a736479645149784f63456b5852585632644a4a4f6c455a79696d73754231477a423647306834704752426855573257374a7052457947776a71626c7569253242615277474a3435314969455335796b4c3279334377794c5734653252253242392532426a55733469686d4a6a4578356b4a35717979463531467a50574f46526d494547436f6f394e7a7047527448384e4171342532466b7469253242612532465154636839496136414f516d58757a6d317453703355564a6c467a6e574265744e33704d57766d48514c4a456971474d4a66577465677642365876434a3525324262656f42586a6e35786c797a5a4379315050694d7a536a75323257636b5377774c3261336a5a666b7866754857525759755a64437333436c32624f52466375323238584652794e716f58774456755a4e65585a42735557323639646570735451354a666a386c684164377925324630323767454e4351574a6171626b3637645567337925324674714238555a6955783531796a4944456e6d31594939506367506d587a4835554f54394c536857655775634a71624f59253246787a4774385a2532425a337a4c763348373674476f31346f6d4a4e754b385036453479383032313841325837444e463973714c556a6662774e373168614146477667484957697141556b433879796f6d714f4725324655626756346233314d4d747857423530356a616c59783878714678776c72377936487265663756304652533076377452433725324673467a487930564f6f56534e4e36767a773941545175434d7348723156306256334176564b676d3663444662765261384f4d2532424651534f374f6277794867614844636f4a6b734a6c544f6751357148344f454a6f5249756830467147745731797773536e6442345070703075587379644879654358334264316925324647747631545a774f644e6a6d4357564c49466c78663576333250657a755333446a61427a5a544e67344467706674637734714f725949346637515470724f4653526376656f334470354f6525324634445051646c4f4d4b566a4f5a7439433842466e7370425951635857345a58714d45315867516b4c4773477465556c436d72485a7479367a426454466a6f6768456157586c504661487670644b7a4a47687974615a34464a4b493173746a7a75483950367539546165566c63727a536549595251762532425968464a49396b503863525a76534433526839745356474d63775331767076357a626d6841784f6a55253242516b6533253242634939377a616269714a416a542532464a61363675524d4653797342513546364152496c376f465050486b5054324f3175253242456c4849747349486e2532464a48756a7a7a597a36494759333368314163334b4e496e38506c6f4f62393773756d71764c714474356a2532464642784b4a7575714b6b46414d72633553734f456d77456e4150533471557141316c49726d71312532424d4f4e4f767764367a3254664d584f572532464872564251475351363477665530625465383035704a69495470684c5a5333526730413957574e636e4f6f444b534b3231535a6a54753966427863316b4f5a304b48623132704850762532425a66515443336e4f3747747a344c775a6b3625324242424f355966327164712532425a4a3969466a423630374a596d616e4331745039645337324825324243635a6a7578613339743342444e744c344561505a574e724842396c493034787272387447567a564f5a53477039426f686a796d4242476c7478684a424e6d6e76347a6d4839667a36462532464452656f782532465364525269526253745a3525324272596e47753634435a5249535177794d642532424e51665271417869634b5764794830483557556453636337594968737a48326b434456425a565935414967504d5847374d36754e44597063726c45463173784f514a787545545057655a627925324236784a4c78766d3233317876593464456b2532426e4c253246627249456870574e714c6a37757278506c6a654b67695845466a55726f71746a4e677936586275596f496b72744676477a314c575a43356c516d355966795352504c576c31655039726e58797a3241493347537a6a504277253242636f596e796647594c41414a467a506d773072696e66546b316551505a396c516a4367673859474b52444a63656e39562532466f69517a70655a25324670794c543278796d79494965464f314b5a6a694651534741466c6d792532426e36253246574678504a48586c53556a6754786642726944366176487a4a444175647368637832537a726e30766333344b4e2532466d6748536b6356614759426c72434939364f777871306938787a4f486d44677742735148765072763966333774356c5961624a79344f44796e444f4b536f7a6b6f4374574a6e38525978453734506a53767646385964544f6f7566783369545655685941682532425a25324642465a75646951617159556137464f79746769347743253246455235627544684f526d50487436687872634953367a76684852536a4b53794869675453397758333643344c514a32724277316e32645045634e25324243454a494143637141615a394754657425324661644e6c35333251513639745325324234436a25324644536b524f624c584e4f3867756c25324271427a4a7342544f38253246554c474956667a6c4a3972416e324f75474b4b34666f323265764333374f73516d345563583053486d733963534d6b6f253242612532466644583172674e4b684136494456422532423064584c4a52794d58696932577941306f67472532465138734b414f554969315972486b71434f5747716b567a5531764a33536f355a65434a45653376626332397167716d4e594b4841623841307a6f424342374453637463713341314d475a586c41676c794b6e6449657878734436685577553770506d737448534c5968424362467676487925324265396b58253242303137756f2532464473324d594668736b784c4838356d577a747844424a697833766d52695a64477150424536544a4225324237466c594253353264346a6f3259743446253246624543556f613858374572475a526e36455558476b5742562532464239746a58796144476c5432614d4a77463146664f253242797564594a6759694676514a2532463346374c674f2532423735486d314b64506b346a68344a6e6651525025324274596c43636c79786237345134644e63366f386d7a72706c43366b697759253242536d596c51516d683050525939376b31526a6b315339253242516232336b796e536e3277433838577a364c67506c4854307a6125324653525756304c56624c733649325545716f797a4d56476371366d7158694e25324663536869466442342532466859506453727173776452376552384d595356416a644d777033446f444b7438634e5770786a3371444c757675746d394c684c3755716d65736853515933743646637538586d253246436c6b5a686e675132427439306f697469707876424e466268312532426a534742564a414943535a68756e78253246756a717a51386432514364544f6b675a4c634832363075624a4341517852783155627237526742466945716c733642354d783545794e4d6939684c6f7a504179374b554e5036705a5a356c654f784b3136543431444c2532466d47646350376830516169765a6a4f424845794770566249543053385432355159793725324231546b4e374b69644e65414f57323871736b66786d597825324270446678714f6731454d64646e58775648414c484d25324625324645764b7258253246654c4251676a6938427431522532463166377a494767486e667539445773644a3074576568504271633825324625324251704539563171394e3754786751522532464841305857674f466b6b45357750386d456759304d465736467458764c4c6f732532464a7a663154666270765677253242626730515745624341316f4841253242364a75575639305649666b576d646c5a4b56336134567352703244476f414630497543704e4763644a76556d525053595a4d466850567153686c57492532463738536c6e4242785a4b6a6a727879705a4b7a37524d48744b4c75553041694b473934516364524872534a524436644d4c76504748775138735877253246586d7a4c54413066534b623041716854623948466675347364477a45567942766b794f587532742532465378334e76576c32755778375131664c4f6b306c4c79497a302532466e3738785574253242642532427a367a66315a686b53754e7a6b734e2532467679704a4164734c356b4c386f7a4b426339715857696131566e6139664d74534267417a4f50584b70736d316e543569485771644c25324631456c4554645a353941616138754447714b4c5a664537446f794a42356f6b553954514a25324232253242617131594f64744b4b4f504a4c7056365976344a61556e4b5a345038394c5154506158305734253242717765747874375131685753566e46437172686e253242384e314e4873566371577a3936496c326c694134567769486e6f76366539557931344c5673592532464c7142484273393138394f6d563161516233655958537867456b654e31617451763272386c3665657938564a6454504769365048506a34495757253246436e4d34537a495641366c6837353761534d776b5132532532467a586b7a6253446c4964586f78765438686e34253242415766723855644163334a796e6e47685941544439316e587546364e38586e796c53655425324665776f55535934714f30253246783554673530773148306e676b3856676e76384c524748567a253242794b5966324656596f6237665473486f467a55487a574b51564a31566f424a463638714b4c5a69253242574d7a6c3246666d756d545a756f50314b715643746250574f31396d33766e7430746674387148776d6a663172517a3754725147594456697061747a795a44645634253246706b4c485966506d5137435659575550664a74253246475a4b663445685052354e57523870644825324656253246696749387a38514b6e664a5a253242253242755277253246675a3135787031663373324d566b68253246474d793459584b7369553859704a556c6e534834627a36714e765435687a31694254497035306c6d506c4c58397570486658253246504349746e383330253246377337667349366e48745439507956586f305134424f313666527750525225324638395343436f373525324269624d6876635925324668587a30692532467371593258653753513744796177447925324241444c6d4c6c4d50704c6754624437504a5877436150526e34586f34376925324262364532322532467a7857496c4d446f5a6e396f4d77797562347643436e78764c68685a6434786b7078253246354d4b73653338635430253242336c38616a65306125324675613668714758533659744e6f3975635468586551305348583145453052596d5373596c44624f4533693663494256385a453356752532423571684137794d344c364246366a566c54342532423054377268737849306b43475567706670786e487976724f375377517771762532467350787a545a6341495a6a6c49746d41506b4e72424636787625324652496c6a73482532464a5a6d34646442384b3157724b6c7531784847572532427962443144676239537933455330417834775765443673546e435076507775335155596f5349355777782532424136615a47364c6548487769592532423373555542456f6431557052796f71634a4d4d50594f514f665a576b4979733645674d3425324248635625324651425a466d64504563696336566f68774c4a446a4439424d386541343279734846696d4138663959776a42316e5858466c462532463943706844417a33483038686642796775666874705965766e6161735a3038694642496a76476777774853314c436444444f4552647263726e7a44624b39615453633858354f4766656b504b6a7547764a5675545a645368696939783525324668395957475033344a624c3274586b79684d7948743725324669754f576c34414e436f7a44684a537264344a4c6e4177794f58433042425238646835415555744434577831376839434c64517639474263376c63523643457a4d59443571394b6646427376674169434c766a7255446c6f3744316e3975527a4350585771464374306b42354c33543277324153384b4d7a6951253242683746327642564e4d54784b4f3632592532467136707a52473453774e365934587071717664726a3674526d7936746d5269656632344b4977614777452532425a325450423056414e746a31474a476d6b6b3541307531574668253246765656336a373746344d58354634354e534b755925324675616f644165414d54583634504b514c687279693837455142253242333772793756596f7025324631515076615a4a515276766e507767473261437933576e584c3355507578495071485a384752394a466c51454e58565055514f494865584c765255742532464b64774b43627a55253246377247717561627353415a466832466b50766a6f4162614b44474a786262574561755330685368337a3847644b6c387434703256323668356d54415843253246672532466e684d32346f6a4762253242724b703773753061464271393674647231326c6d3249654e713668376d7972426f686c33537778713430477a7a73617a6b726735796b3738666749553578734e764538516f5a4a7445616773314f76393034253246396d7a536278456b31304572573834593238584a614c33694478656b43584251775335324a4a253242746a70336c647736766d6973466d7678436b3265703370253246532532467a35617971643854444a3772687a5a5a4525324670485969316b366259496f4b744330596a6d723170253242656c6a3136555239543731327335676b704556785372725064344846356f7058764c7442676d315861253242646c396b4d444562314f477a437a4b6a72357025324667324f304c556d4b546e466e4b766575774575746c6a4e4970577876763569307a642532466e454457366e336359684668355232567337475356253246576b477068626f53614b79434e3079575538376f32427a594e30553555313461453454253246766e755052624346614261587863636d63496f395a3767367532764c253242716d695661497168526d6d5478454c6278386f58664267535a7a4245524d646a69584a3236314f6b584f643973716d6a47304362623647687741764a70437137716b5155494667324c6a4530616d653430746e3644716c375a70766d4b54704e6d4f356a4b64424d7535684c64354948665a44595a62446f31506c776d7052455539646642417746644e467630587078483364786f7157426b25324279446578547a525342306e433468587442374c674e41637144743839367a524f397865723649697063376b756f7a4d455678356439783141316249554673556e743834326154775134326d43324b57764d547941496970766d72784138765739623766723063434a48765145786c3176564f785972576968347659705546744942704a4f7954666159364f4b552532464d6a71373078414b35635142434a705479614f54473161725273797a6f565653763858687025324633396162526d25324659776d676c4b3078253246573637724a73433356446f7656477751733058374149775146554d565638723561346b5579616570764f486330655a45475847634550643247326b6369713874514a334653787448326c4c504f644b7076304c54444b736c3858253242746c3162547565346625324268767151476f6f4d4d76504f474a715a38664c724236352532426f72653577666d47444825324230342532424d545a4344494e526e4e474e79316e59253246335453566e724e637450494c4147626f45253246395249546c45444f6d626c253242385a44654256436d6d6f594d2532464f566a7a453750473561464d3875704c5625324670683355634679766e35306d6a4c583871504d464262484f7a356d4b733771253242637442464f6a6f5a35664142717a6d704763546b446e7a4b506931716b56366e5763485279717356557a45335a25324676757955376d636a65377a42473857253242664b3254483345536a316c2532464d434e505866626b6e3067644b756b4d77636c465463624e4d7265384c467861363243673056544b374d51567853334d57416a59364225324246434e536f32344442696f2532464e497672626e5163364a765242695042423041353734584d566a7344545a774b35484d3833667367677a55706178494c374954387a6e5a4177417775547436477525324671466974586825324241584b627a426430675975253242644d444138384d4d343057665667414661696a694a5665383558253242454f594d46575436553144584d49426b38435376524a416538764f6f5663514e4a474e3462536858416c253246587531526d5a465a427a756565346b6d37656f416c3238722532466d4e253242447267546c4f306a78346f784b4566424c5047695a6676384c7076675641634b79704b4c71763438445a514a31374242335a3930576a3930465633253246674c3152535925324679344832714c6f2532424231522532426c6242646b597643366a725578426a754f6b45614b3269784432722532464a7169494b505179487235716e415968515269364c6a7a6764586737735235397577393659545525324265424d34614d614158704a696a666246423456575169324a7743556a6f557278646f6f6942636550564a677439253242783663373067514734535325324263394178424f353662436225324266476c625638306256734a32504c613652253246783125324643582532466f4139513557615136437a6f7257674c25324668586164564e716d367567794b4c6b4e5a42253242566e34512532424a4e6162576d44783279554f456c57784e6e4d50706a6266655a7742575863452532464c4e7535614b49746a514e4c537939655551527375694664622532467a744351736d513876376f55516d6a3948616a58253246787469453676674d517645796b4d6e456238674b722532424b34387152326d4c7546787432306b332532427651636c386e45427565304e37346c53794f6f253246464b387573756a56424c6d534945323071546457644b4f687a47467866737a4c6348506b437765704b4f645342684c4333305a6464674a61656244465564455735724a2532466d4b397049427458785a4367416c737048565032505862355625324267647975476657735163584e596751334b6233584250703073253246356c59676a4978325a76584b4c54374968487356324b6444304832624a64364c4f3963596c4847686a4b4b33397646664b506966424171566b6b346a4b644676304663533943744e4c37456f4873666525324262722532466166514839324f50435071394b62726c46775078253246737137797666577165795742764f436a4125324675634e75466e4d253246687245614f6b564c454c4f696b7a7752642532424c483133526f746830743566597730426425324251326c624b746d25324647755a45396a584c3854394f46394f615139677525324251476b54496352544d7952615933666f7748566c7a63466561466e646a4d386d59374e546c71426359357769614a706f6b4a6e6d7a776451552532427736594f444d5834734b74732532427358785948253246555673767062556a4544566646717425324276694879487055556741253246447554632532425a6352784d774e473552452532464e626f6e754466697330616e587572315a5347347a424e487945416477526f425225324255586474326f45447a3453354d4e6767763775387338647673326c315062466b44476a6b6f624f63557a25324255614e3241532532426a5964326b46615a766c3559665a4d79525a324a5759415976787353397443343725324677654e31654b576a634a374562675450654f35343069476c55336956794e5a784e525165414125324668537349534551435273564774393165576a6b7a78544d386b54797a463656334d486e63546c76534b6f6e376561636b483753765555563045704433773042484a4276753466693143636d42614e467058644672647679776254336b666e71715a304156253246584a6d6f4541665a413150772532424a66513448794b5a7472445359374b6b4c467a253246366236416674253246466c794c73396451736d756149714f5879504563624e72656675394d472532466f673363766a497a67495469333349422532464c7a517a786a6f57466a63624959426777566d45546f534c446b727a775433675a32522532463764634f65715562556649253242685834757639795a7772447064614c784f75707a393453476a726637673458476d7a5074646e75517943433949334c374a4c656772774e672532424d754a4f395234347970577a7925324662624151324a5338654b773849743237766748464437586479365a736765554359714c524674784d4954685332715834654f52744e594f48304c30576a686b674141617325324667616648686848334f494150467358794b75796c3935317a72327725324269343662443925324279743468446657334444692532426d53766b41377750364e4b67647665426b42505a68546679674a317441344a426c543074676138714174523679414865447569334e47522532466e393059797449635a47354570795571396d57754461566461375a4252726831716153253246494231655762674c304a686834714a54707a4771566b794e4f4e465475546b4867545869767838504a5275427a337251253242253242336868597176566e626e6730437a44713353587a66786351324b796830526f3575454d5151614a466678354f666a30396a783677314e6941525a6e4a6b316654306d68253246667a4a4a346525324232334e4a38724150716e324e365876314d75567a4c5931784f734b4a466335486a656548303057666d6d36354d6663436c4762664e35727a6d4b6147724f47253246413779764e6e525541746c777953375763573530346d396a5a4d6b746b655a5a53615242714f4a456d58443358565338433654566a57434d48774c4f5149654e44475a535425324673684958574e374a4d41566e253242644d25324225324677376d3962625951476c62464848506b7a63745150676c4d555369546546794c4344753567716e4b4468566833384d6f624a726f71626a707241372532425368546d615437253242356c3666424e6b4a4f4438535135506442713949756c655458304339576e504b76673261735330624c6f3648336931594654624645784449546361583246795162494a30434e522532464b34457357513648687355743067726e4139704b6b6e337971654d59796f715174596e75394c454d6532794b6e484673253242253246496d544d6c675934696b663730314c76756c5571444b46784b5158415251693567354c6e436b56576f2532426c794241414b74376275644c5533493262413963394576326c6e7839467241797464373858744a4555664f316e6a62746768563643506c5257625434436c682532466352634f2532424f4b6e3376645634766c6c4a596c414442633774253242486558566756576a49314b3665426b3635634f7a524159317367365551516f43614c587576374b76316c48497338457625324678694e427635436e3478473267797731427830442532462532425a6774454f3734353662584a4a253242516c48356e374345327074666c324363333562526e54444d46334739624c7665495238584d6d79586a354c6770486d656e6261736c3531366d4c4851683125324241354d3550594c6a7646625272623769776c62336b4854484e434c41253246506a39564b71524b637163667435386f314d704f4953784f357757676f48774e50415365564a6c474a7063536f6f6d36797655356344426e56316249474a4851335453746a4d646e575033585536744d4353637a517347304f386a4c6c53794369336956393144466a524f623979724475796f49467a664b743177464b7134757251533861523546655449614e56616b4a485949253242632532425643486b4f515533786957385950744845385565325a673941304667396367704d345831537569453248426f5a32595634667251504b366343506b4865336d4b796c7a4f4349646273717938374e3464346a6945764f753830784b66544664774b5674577958484144784c673053253242365272663249787a5179306d42326972315238744858655525324245676125324656323849622532466d56786857555850576d3830253242304c6e7272675459763658456c663054777462313768397735704b4b703144656e2532426f62595373347535524e676656684c73546e7552344a6e714825324637486170494f4170347531437662626b786a486d453962773176674f576c77575065756477744d505a495271645731756c7366686e55544c76475a4a7154764b53776363367644334c4c5049714b5376597553787a41626b645956253242766225324646443041645849514c5a3034453578536834595243545758494e4876514d686a454225324656733254613935394b5852414870614e424e4130574967717941463557786e5a4a544a38637045696871306c4c42374b4a437063346b52624f377831774468353145537537515877375142305a495856786573793743794a714f546d46724544395449455653644a4e424964765662314564454975574b5971394651505a4f416765584156574874737061475525324630795056327132417569664a4c5556703178666d6c646131496e3646664c476253307a715a49476a6d47726a72374325324667543943634a676a7654346d5457253242714779737958694f4234376f6e794e7435376a42787065583330316f31647870643552493644634e566468696d315475784d41706f384e7662504a312532465038774d48347a253242366c62707268585259695271464f5849765a3637663577536235613371714a6861336d434c73746162546558565a5a58637049766b65734d342532463231583337774c655525324641714379574b7a4c435045387672395933334369416234654a6e6857343946677643614d6f79327a73336c6c766661686e586f704d30554f413776736139327976626f3336716b6c346e6a5552597633503042444139585834253242637033434b4f7a655a4d51545331334a35566f5737525265646e4642306b756d702532466a4c556f717972426f6d436a656a316475253246463767426542737044753767734753253242796f54424f49364b463666483850485738484172694d59575639594c644c76514d5530654a58484a537a4b4f423475545262493557626d4e55332532423144783765445752787a546355327a253242354478356c565138496b4f6f36386f6c586a5a364f756b253242543136635139253246584130707a63506c47336c68344c5377766a323245504c4b7567746f6a5636253242727870523271397a693176576f37336f7a6c59774f444748424836614635374e69384a62586d6d424378366b6f6d5a46642532464b70515777384c6e6a4963416e59344c614a3855657038764f674b644378516b44676f39694b65456625324238253246335872353047366d634552757662653441347630395a78664678666d6d567369784230536234253242783953253242307239546530725176355025324646395676784c3433796c2532427866394a786138493976253246357a656e2532467856253242636a714425324659436b36253242762532427a464233356579584d66314f4b2532466f71334f496e5825324642393759376f455271526636397a396d375851366458566a78677336502532423977447a35497a4261387463502532466c6f5a6265376263357625324658586d25324225324671554948663833363650253246357158724f5a7a684f666e335872704f4579516145253246253242636f6e55632532427464712532423366667255373973347257456679253246634375492532463166312532466f253246555725324249663146763633366d33662532466d714e646250455038714d4f6a665748714d253246427442253242444f7576337a7262325468723850346434674838643847345a39704546446b763578424950253246624950776644514c3144786f452532424e25324662564f627657775438623434513747253246376d66797a4c514c31337862686e326b52634f672532467a7949415838593462763953514a3731725051787938455625324677732533442533432532466469616772616d2533452533432532466d7866696c652533459471022b0000200049444154785eec9d07981445fac6bfdd9dcd39b084258b80082288a2e279e209ea194f319ce1383d338a87f10c441573e22f8aa7a772660ce7e9e9e96156444c8882020672d865239be3fc9faab5c6ded9d99da999eaaeea99b79f679f859d8abfef9d7abbaabbabe3bc5eaf9770800008800008800008384e200e26ec38735408022000022000029c004c184200011000011000014d0460c29ac0a35a100001100001108009430320000220000220a089004c581378540b022000022000023061680004400004400004341180096b028f6a4100044000044000260c0d8000088000088080260230614de0512d08800008800008846cc23f2e790eb440000440000440202a090c39f5742dfd0ad984df3ae50f34e090df6869242a0501100001100001bb086cfaf8233af2857fd9557cb7e54a99f061d7dfa8a591a81404400004400004ec22f0fefc9b61c276c145b920000220000220d01d019830f401022000022000029a08c084358147b520000220000220001386064000044000044040130198b026f0a8160440000440000460c2d0000880000880000868220013d6041ed582000880000880004c181a00011000011000014d0460c29ac0a35a100001100001108009430320000220000220a089004c581378540b022000022000023061680004400004400004341180096b028f6a4100044000044000260c0d8000088000088080260230614de0512d08800008800008c084a10110000110000110d0440026ac093caa050110000110000198303400022000022000029a08c0841d02ef6d6ea1d6d22a6a5af513357eb48a92c60da39403f6a2f8826c8a4b4e72a815a8060440000440c0240230619ba3e1ad6fa4ba379653fdbb5f51ebcf3ba9a5b8c2576342411679061751ca6f4651dab107517c7686cdad41f120000220000226118009ab8e86d74bad9535d4b2a598ea5ffe986adff894a8a535782d9e784a9d3886d24f9d489e013d293e2f8be2e2e383e7430a100001100001d7128009ab0a5d6b2b35acfa911adff98a1a57fd442d3f6c256f7308e6eb577f9c279e12f72822cfc881947af87e943c6e18c5257a54b512e5800008800008184400261c4130bc8d4d7cd6dbf8fe4aaa7efa6d6add5a1a5269f1b919d456554bd4e60d9aded33397d2cf3c82527eb71f25e466505c4a72d03c48000220000220e00e0230e130e2d4b2b584eadfff9a1a3ffd9e5abedf44ad95d544c1fd94d714171f47b9775c4815b31e276f5d6368b5c7c5517c662a79860fa0e4fd8751dae163c933b017515c5c68f9910a0440000440c04802306189b034fdb095763ff032357efa1d51184bcdacaad4a3f6a7bcf91750c54d8ba9ee5f1f4bd46e49ea89a7e4317b52d68c532869f880f0ca402e100001100001ed0460c21221a8fbef0aaab8e151891c1d93c667a4528f97e691a7470eb5965551c9c9b3a86d775dd8e5e5cefe13a59df09bb0f323230880000880805e02306109fe4d5fff40bbcebd432247c7a46947ee4fb9b75ee0fb63e5bcc554fbef8f435ecaf6afb8e0e12b2979ffe161b70719410004400004f41280094bf06fd95146c5c7fc4d2247c7a4b9b75d406993f7f7fdb1e1a36fa8fcaa07c3ba8b9a15d2f3b5f9e429ea11767b90b1238167dff82f9d73e34cfec77d860ea5a76e9b4f43070ea44fbefe9a0e3ff73c7af7b147e9e07df70d1b5b38e5945556d29f6f98494b972fef50efe337df447ffcfdd161b74536a3b51d91721075d73734d0d577dfc3ff7be79557d0cab56b23e6cccabcf7c9a7e8c253a6505a4a4a87f253535264bb8df420603b0198b004626f6b2b6d3fe862a29610efc2b294cd6eaceaf5bfbb3aec8ee56d6aa6923fdc482d3bca255af14b524f3cf559fe20c52524c8e7458e4e04d66fdc4867fded7abaef6fd7d0b08103b9f10de8d39b9b83aac13b12133e68dfd174fdf9e7f176cf7fe4517ae59d777d27094e8453b49dd535ebe28b7c6d89a46e7f1356c199b159fef52a7ae2969b283f272792e6212f08384200262c89b9f884eba965cb2eb95c714439b79c47e9478def948feda4557ef543d24bd2094505d4ebb55be5da81d45d12102613c860ace6599093c3cdfaace38ea1a59f7cca67a8d63cc2ccbf59bf9ece3bf924dab47d070903f53761abb14d3ae8a080c62166a056131675ccf8d3d97c36dcd50c5e18f6bc8716f199fd11071e486f7ffa69a7193e4bd755fd029830377662c2fa6435392b3b5697d5a8455b45dd820b3bb961477733612b4b96d63a0367ed117589b6ffef93e51d56321e9d3b9bfefee24bbc1e7132d55599e2ef5dc5155f1d10b08b004c58926ce9b47ba971f97752b93c837b53cf17e7f9f2789b9b292e31d1f7ff5d7f9c474debb64895c9ae05b36bc238d410b01a22334feb0c3890091f306a244ff3cabbefd1bdff7c921b5bbf5ebdb8a908935ab771235f5e15261da81c66a4271e3eb1cb65d36026bcdf88bde8e687ff4ef75e7b0d07619dc18be55db6742deaf8ecdbd5bcadec602713c1ea67e9ac6d386cff719d968cfd4f60c44901334d71d22278056a933049eb72b4588d38e398dff3130deb0c97717de6f53738ff2d3b77f27e9cf8bbc3f9ecdc9ace7f395aa4b59ebc88d8091e81e2ca2e49e00001bb08c08425c956def60cd52e794f2a57d685c751e685c7fbf2b0c79c32cf3fd6b7345dfde45bb4fbfe9742dabc43149276e204ca9df567a9762071f704acb32bebcc2b90798a41bfbbcffc0dd49a9619b5300036c833e362c6e2bf8c1ac884032d475b67c3e224825d1bb52e5bb334a2ce2fbffb3ea4fa19076bbb85395a67e6fe337c6b9ba74c3ac267f6cc4cad4bd0f32e9d46b31e58c883e27f4d98fdedafb7ddd1ed92bb355ee244a73b13b69e3031e681da1928ae91dc0780ef1c08042300130e46c8eff39aa7ff475577bf2095abc773b32869683f9e876df4517ce28dd4e3991b2969687ffeb7e60d3ba8f4ac5ba8ad3ec4cd3b8828f3921328ebbc63a5da81c4c109045a2216335aebcc4ecca6ba9add32c3e9ce84dffffc0bdf72aa6895f56630f1b7ae6ecc124bb3a27e66bc73a75d42b3173ee8333566c2d6eba356137e71e9db21d5cf0af3bfceeaff7f3b4cd8ff24c51a3971c2c18c97dd80c566ffe2a4a03b13f6e7d1ddc94238d7ef83ab0b2940a0330198b0a42aea3f5849e533da07ba508ed489fb52de5d97b4ef6ee5f5125fcefef47bbef355fe4357f0973478bd5eaa9cf90faa7b63452845f234b937ff85d27e7f60c8e991508e8075b6595a59e95b8215cbabdd99b0984dc9cc84bb6a5da099b0356d30d3097526dc55fdfed750ade9c41dda769830ab27d01de9fe3773d53534846cc2a1cc8403c5153361b9ef0e52cb118009cbf1a2a6f59b69d799b710b5b605cf999840bddeba9312723279dae6f55ba8e4f45faf0df778f27a4ada7b10ffcc5b5d473b265f45dec6e6e0e526c453c1c35750f2d861c1d322454804fc9778fdaf410a43e8ce84c70c1fdee19ab0b85148f535616b87acb35b71b22096a3add75f271f7c1037abe2b232a96bc2d6ebbbc28cc48981b87b5cd423ea6566c71ef5b2ae1cf4cccfe74bed6255c17a9d9af5c77f39da7fd9db7f162f66f8fe8c23bd260c130ee9eb82440a09c0842561b66cda49a5e7dcce5fdcd0ed11479476f478cabdb9fdb11276ecfefb6b54bde855dfff33fe3499b22f9fe2db03baf29627a9f6e50f83de299d9095c667d1897b61cb4ac9f075995cccb01e7de9659ea6abe784bb336166524edc1d6ded8475b99ab5b9303f8fe228ce776d595c370de7ee68c1c4ff6e68567fa0958285375c4f0fbff022b13ba0c52cb9bbbb8e833d271cec4e66568fe8f3c03e7d3a18396be37f173d482f2d7d9be30a7477b435c6fe779c63395ad5370be5042300130e46c8eff3e61d655476d1ddd41aec31254f02e5df7511a51cfaebe60ebbce98474d6b7fbd0b3a718f3ec466c3e2cd488d9fafa5b2cbff8fbc0d4dddb6cad32b8ff21ffc2b7906f6966c3d92db49c0df54fcefc6b5b3ee4065fb1b895dcfd0766758fee6e63403d40702a61380094b46a8ada29aca2ebb9f9abedbd46dce84be0554f8f44c8acf4ce3e91a57aea7d20beeeeb08c1d97104f79f75f4a29078fe269da6aeba9f4bc3ba939c8e34a8943fa50de82e9e4e9952fd97a24b79b80f5c62e5697ffe34e76d76f2ddf7f76cf3e53b5db95b51e98b09351455dd14600262c1951669465573d484d2bd6769b33e7a67329fd98837c696a9e5e4aad9b4b3ae549e8d78332ce9aecfb7bfddb5f52f935ed1b1e747524ed3398f2eebf8c12b233245b8fe4200002200002261180094b46c3dbdc4a15373e42f54bbfec3267e2e03ed4e3f959e16d29e9f552c91937753b1b4e3e686fcabf771ac525fdbae1876437901c0440000440c0000230e130825071eb5354f7c2078173c611655d7a12659e13fee6fab52fbc4795b73fdbe5e61d69bfef78c357185d40161000011000010308c084c30842f53f5ea7dd0b5f0998332e35897afcf37a4adca3a8fdf3d6566ad95519b49684fc6c8a4bf4f0742d5b4a68d79f6fa5b68ac07760679e7b34377a1c20c06eb6da5e52a2f44513fe54d9cd55626b4c999722f85f1fb7e37a341400026e2700130e238275ff594e15b31e0b983375f238fecee038b6390711d5fd671955def66cd05ab2a69d48197f3cc297aef2a6c554fbaf8f03e6cbb9fe2c4a9ff2dba0652241741360e6b8e0e9677827a79f79067feda21d473826cc1e9d62bb77b15dbc98713343bef5917fe0ed4676040865ba9a004c388cf035ae5843a517dfd729279b05173e379b3cfd0af967defa462a3e750eb56e2b0d5a4b42610e15be348fe2d35379dad6eda5547cda5cf2d63674ca9b7fff6594f29b7d82968904d14d806d60218e0ddbb6f95e2f284c332b2383c473cfd659a8d880433c3b9c919e4633ce3e8b6f34c25e98c09e7766263ae3f63be8c60b2fe0555867c281deda245e5e51555d432ffcef7f9deec216cf335f77fe5f227a2773744714bd8b450230e130a2debc613b959c3cbb53ceb449fb51eeed17f9fe2ebbc5a5ff569495739ea0da579775aaa7c7f3b32969cfbe61b41c59a285007bfce8a6457fa73f9f783c9f695a679dfecfe65a97acd9b3cb57dc7917dd73f5553c9fd877395413663b5e5967b4ac6c7688fc7d0a0b03be6b98b549d46bd78c3d5a628b7ec41601987018f16eaba9a31dbfbdbcc3ce56712989947bd3b994fabb71ed25b6b551c5bc7f525d0013edaacad4896328f7b60b7cd7861b96afa18a6b17515b8d65361c47d4fbfdfb7dcf1f87d17c64890202ccd49e78e5559a79d105949a92c277b062af1914bb76590d8f2d058b57ffb12d25adb36636ab65ff0fd584fdaf09fbe79f30660c7ff5a0f510cf2b07fa2c0a42812e8040440460c261e2dbf9bb2ba8b5a2da973ba17f4f2a7cfa06df72325f8a3e6926b51657845c437c5e26153e378b120a72da7dbcbe91ca2eb88b9ad66cfcb59e9c74eaf56ee7a5f0902b41c2a820605d12161d127b54fb5fc3b59a307b93103bd8bb77d9216bc2e21dbd62999b95c1eaf53771d12661c05dcd90a32218e80408444000261c26bcd2736fa3c6af7ff2e54e3d721ca54efa6516cc5ed6f0c336aa7ef835e9d233ce9e4449a3f7f0e56bf8f0db0eb3e9a45183a8c7e2eba5cb4586e82110e8fa6a77d770c399095b978f1939714d98bd3061d9ca95bebbb1bb32719647b4935d67f69f1d474f34d01310888c004c384c7e75ff5d4155773c4b6d55b5ed257812282ebefd8e687678dbda885a4278d3925ffd719e78a2f8f880e5c467a450f615a751da898784d96a648b060281ee34b62ef9ee3762af0e3752594d38d835613163b5beb5a82b13b6be46d07f268c25e868501afae00401987004949b37efa49a475fa7868f57535bb0b72a45504f7c561a251f3882b2ce3f963ce2f9e308ca43567713103743892565d11b669cecda2fbb4efcc033cfd2bdd75ee37b3c485c1366d78fc552f6a4830ea249071f483575f57c79dafad6a23bae9c415fac5ed3e9ee685617bb996be9f2e5c4f25f70ca147a6bd9329a77e9349af5c042dfddd55dbd8718cf0abb5b7b68bd7a0230e14899b6b652f3861db4fba157a9e1c355a1bd6738d43ae3e32879fc5e9475d9497cf30fb19947a8d9910e04ba2380d92af40102fa09c08415c5c0dbda4a0dcb5653cd13ffa5e6ef3793b7b139ec92e3923c9438ac1fa59f3989d81dd330dfb05122a31f01ff5dacc4cd5c00050220a087004c583177f696a5c615df51d5edcf52ebae2ae9d213723328ebcad3f8661ce23588d28520030880000880802b08c0846d0a93b7a1916a9e78936adf5841addb767578a6b85395714409bdf329ed887194f197dfc37c6d8a098a0501100001d308c0846d8c08bb43ba6d5b29552f79976a9f7997c8eb0d585bfac98752c619475042ffc2f05e7f68631f50340880000880807d0460c2f6b1ed5072f30f5ba96ac18bd4f4c57a7ebd985df74dda774fca9c7622258f1aec502b500d088000088080490460c20e4683ed80d5f4fd266a786305a54e1a4b892307fb76d872b019a80a0440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c2100133624106806088000088040ec118009c75eccd1631000011000014308c0840d09049a010220000220107b0460c2b11773f4180440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c2100133624106806088000088040ec118009c75eccd1631000011000014308c0840d09049a010220000220107b0460c2b11773f4180440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c21e01a131e74e86f0d41866680000880000880801a021b3efc808e7ce15f6a0a932c25ceebf57a43c9f3e392e74249863420000220000220e03a02434e3d5d4b9b4336612dad43a520108304d6ac5943071c7000ad58b182468e1c198304d06510881d0230e1d889357aea120213264ca04f3ef9840e3ef8605ab66c994b5a8d66820008844300261c0e35e401019b08ac5cb9920e3df450aaa9a9a18c8c0cfae0830f68ecd8b136d5866241000474138009eb8e00ea07010b01310b167fc26c18f20081e82600138eeef8a2772e22609d058b666336eca200a2a920100601987018d0900504ec202066c1e9e9e994909040adadad545b5b8b6bc376c046992060080198b021814033629b009b051f78e0819493934377df7d379d7df6d9f4e4934fd295575e49959595b47cf9725c1b8e6d89a0f7514a00261ca58145b7dc45a0acac8cfefdef7fd3b9e79ecb1b1e171747e211fec71f7f9c8e3ffe78cacfcf7757a7d05a100081a00460c24111210108384fc06ac2ced78e1a4100049c220013768a34ea0101090230610958480a022e2600137671f0d0f4e82500138eded8a2672060250013861e40c0400230610383822681800d0460c236404591201029019870a404911f04dc410026ec8e38a195314600261c630147776396004c3866438f8e9b4c00266c7274d0361050470026ac8e254a0201650460c2ca50a22010309a004cd8e8f0a071b14a00261cab9147bf638d004c38d6228efeba82004cd8156142234120620230e18811a20010504f0026ac9e294a04011309c0844d8c0ada14f30460c2312f010088110230e1180934bae92e02306177c50bad05817009c084c325877c2060230198b08d70513408184400266c5030d01410100460c2d00208c4060198706cc419bd74190198b0cb0286e68240980460c26182433610b093004cd84eba281b04cc210013362716680908f808c084210610880d0230e1d888337ae93202306197050ccd05813009c084c304876c2060270198b09d74513608984300266c4e2cd01210c07234340002314600261c63014777dd4100336177c409ad04814809c084232588fc2060030198b00d50512408184800266c6050d024108009430320101b0460c2b11167f4d2650460c22e0b189a0b026112800987090ed940c04e0230613be9a26c103087004cd89c58a02520e0230013861840203608c0846323cee8a5cb08c0845d1630341704c22400130e131cb281809d0460c276d245d920600e0198b039b1404b4000cbd1d00008c4180198708c051cdd750701cc84dd1127b41204222500138e9420f2838002024b972ea52953a6d082050b68ead4a9244c78f1e2c5347dfa747ae1851768f2e4c90a6a4211200002261180099b140db425a609a4a4a490c7e3a1d4d4542a2d2da5828202aaafafa7e6e6666a6c6c8c6936e83c08442b019870b44616fd721d81db6ebb8d66cf9e4d4d4d4dbeb6272525d19c3973e8baebae735d7fd060100081e00460c2c119210508384680cd821b1a1a7cf525272777f8bf630d41452000028e1080093b82199580406804acb361cc824363865420e06602306137470f6d8f4a0262368c59705486179d02810e0460c2100408184680cd8667cd9a4573e7cec5b560c36283e680806a023061d544511e08444880dd0d7dde79e7d1238f3c426c491a07088040f412d066c213274ea4f7df7f3f7ac9a267200002200002b61038ecb0c3e8bdf7deb3a56ca70bd562c26ce301f6b364c912a7fb8bfa4000044000045c4ee0d4534fa5534e3985ffb8fdd062c2d104d0ed0240fb41000440c06d04a26922a7c584b12faedb248ff682000880805904a2c5471c37e1683a83314b92680d08800008c40e8168595175dc84a3055cec481d3d0501100001f30844cb84ce71138e962504f324891681000880406c1188063f71d484a3e5cc25b6648ede82000880809904a26165d551138e0660664a11ad0201100081d823100d133b474d381a960e624fe6e83108800008984bc0edbee2980947c3198bb93244cb40000440203609b87d85d53113763ba8d894377a0d02200002661370fb04cf311376fb9281d93244eb40000440207609b8d95f1c3161b79fa9c4aeb4d17310000110309f809b575a1d31613703325f7e682108800008c43601374ff41c316153960a1a5a6aa9b6a99a1a5beb6877433935b5365052420a65a5e45172422aa52766514a627a6cab19bd0701100001171230c56764d1d96ec2269ca194d66da3659b5ea39fcabfa18afa62aa69aca0566fab8f55425c026524e7525e6a4f1a9cb70f1d3ce038ea915624cb12e9410004400004341170eb8aabed26ac0b8cd7eba5f2fa62fa60c38bb46cd3abd4dcd6c8a591e249a78ca46c4af6a4527c9c875adb5af88cb8a6a992d84c991d89f14974f080e3e9b04153283fad1711c5699215aa0501100001100885800913be50dae99fc67613d6b544f0ddae15f4d2ea05b4ab762bef73617a3f3a6cd0293420772fca48cae126cc66c0ad6dad3e13de50b1863edcf83215d76ce2790ad28be8d451336878c1fee1b0451e1000011000010709e8f29b48ba68ab09eb383369f3b6d1f2cdffa125dfde435ef252617a7f3a7cf06934bedf519410ef09ca8a99f2675bdfa4777f7efe17338ea32923a7d321034ea4f8b8f8a0f991c0dd04d6ad5b47a79d761aefc4f3cf3f4fc3860df375e8a69b6ea259b36675e8e085175e48f7de7b2fffdb8c1933f86ff6ffd4d4d44e20962d5b46871c7288efefa3478fee544757f458bbde78e30d5f1deea68cd683803d0474adbc46d21b5b4d580790cfb7fe8f9efde60e6a696ba6d1bd7e4ba7ef7315a52566123b430af5604bd9752dd5f4e2b7f7d397dbdf264f7c229dbcf7749a30e0f8508b403a971278fae9a7e9acb3cee2ad7feaa9a7e8cc33cfec60c2cc48599afcfc7c12a6cad29d74d249dd9a30cb73e79d7776305d66ea2fbdf45250232e2b2be3ed98306102cd9c39d3a564d16c10b09f808e895fa4bdb2d5849d5e1af8b6f8137af4f3ebf90c78bf3e47d02923ff4a6949996133aa6faea1e7beb98b56ee788f9771fefef36954cf096197878c6613a8afafe7465a5555c51b9a9d9ddd6156cb4cd36ac2223d4b3b7ffe7cbafefaeb03ce84c5ecfaeaabafee60eafe3444ba55ab56f94e0284b93ffcf0c3fc6f62e6fdd5575ff966d5471e79243f316087d5acc549c2bc79f3b8798bff7ffcf1c7b471e346dfc986989117141474327bff3e9b1d41b40e04884fb8d844ca2d876d26ecf41949abb785e6be733a5536eca27d7a1d4ae78c9d1dd2f273b040b11bb79efefa36fa62fb52ca4e29a059873f4389f1c9c1b2e1731712b09a256b7ea0996b38261c6816ec8f4718fad9679fcd67bcd659b2bf395adbe93f03bfebaebb7c270a6fbef926375a61dc2fbffc323df9e4933477ee5cbaefbefbe881071ef019f7c08103f9098735bfbfa9bb30a468720c12d0b1021b0966db4cd80910ec8ee6d5c5cb6963c51afef811bba12a37b5274d3ff07eca4fef1d3697daa6dd949e94e5cb5f515f420f2c9f41bbeab6d2a0dc9174e941f7f23ba871441701ab59b29eb16bc3d6d9abffac30d4e5687f13f6bf366c5df6b6ce86bb9aa1fa97c7fecfcc95fd5ebb762d4d9b368d2f712f59b2845fc366e53cf1c413b468d1222a2a2af22d695b97defd67d86cb6cc0e760d9bfd9b9d18e000013710707a02182913db4cd8ee25812fb7bd43cf7f7bb7efb12206223e2e81fe76e813d42bb37fd85cb654aea7155bfe4b53465ddea18c929a2d74cbfb7f222fb5d1c5e3efa2bd7ae08ee9b0211b98d1bab4dcd58d56816ecc124bbdfef9ad3766599781ad66669dd11e75d4517c2978e7ce9ddc40bff8e20bdf4cdc7f261ca81dc2b0c5c9c3d4a953e9adb7de22b654cd7eb319f3830f3ec84f2ad8ac97992b33de5b6eb9856eb8e1061e11d6efbaba3ade0e3623fff9e79f3b2cbf1b18363409040212b0db7f5462b7c584ed3c13a969aaa21757df4f5fef789fdabcad94959ccfafd30ec8d98b8ab28650bf9ca161f3d951bd911effb27d19fbb283eee33774598f7f7c318b56edfc8026f43f9e4edbe7cab0eb4146f308f8cf4ead2d1433c1eeae8f7667c25d5d13b6fe5d18a3a8cb3adbf537e1ee96b7453b366cd8c0bb70fbedb7f31930bba62c8c9acd90c5b27a5a5a5aa71bca583fbffbee3b9e7fc48811b819cc3cb9a245410838b112ab2a08b698b05d00d8661a0f7f7e1dfd54b68acf7ac7154da2d3475d459e84c48878b0c79a3657aea587565c4df52d35fc39e2e907dd4fbd32077628973dfaf4ec3777f2bf1565ef4953c7cca25e19fdb0994744f4cdc81ce84e656192279f7c3237a2704d98f5502cfd0a9315773cb3592a5b8e1e376e9c6ff9db7f562c734d98cdc0455de286ad40d786c5f5eed2d252dfac583c5a653d21c152b419fa442be408d83911946b49f0d4b698b05d4b01ec4ee54f33112a770000200049444154b7bc4ea99e4cfee8119b01c7c72704ef651729d81d74eb4bbfe265ae2e594e8d2d753c651cc5d38507dc46230ac777c859d75c4dafac79903edfb6945abdcd949e94cd9f419e38f854fe18130e77121086286e4e124bc96256c9ee2466c6c69673ad3766597bdbdd4c58a40b34db16cbd92c8d7599995d8f66cbd2d65938bbbe2b8c955dfb15cf1c8bbfb1c7a6d8e17ff2e07f97b4f50480cd8e7bf6ecc9ef28158f5e89cfc5c98328d79dd145ab6395805d3ea49aa77213b6eb0ce49b9d1fd1a35fdcc837cc3865e4157470ff63437af6972d5957375650795d31edacd948d58de5c496b44bebb6d386f2d554dbdcfe388aff71ccd0f3e8c8a16707fc8c5d377e61f5bdb4b96a1ddfd0f2d8e1e7d3e1834f0fa93daa0388f2404035013c97ac9a28cad341c0ae1559d57d516ec27674bcb1a59e1ef9e27a3e6bddbf68329d31fa6f9410c20cb8a9b591febbfe715ab5e3432aabdbc16faaeaee604bdceca7a5ad89d773f698f61b56021dac4dfffe7e117dbce9154a4c48a63f8f9d8d678855ab13e5394e40ccc6fd67d78e37041582408404ec9a1046d8ac4ed9959bb01d4b00ecd1a37b965d42e4257ec354dfec3d83726868a9a37faebc855617b73f6a11ca519056442c5f4d53050d2b1847d30ebcbbdb6c6c8bcb7f7c7923ad2efe847a670ee2d791d912350e100001100001fd04ecf023d5bd526ac2769d797cb6f52d7aeaebf9d4376b4fbaeca0fb29358477fe7eb4f1dff4d29afbf91dd4a11cec66ac03fa1e45effdbc84cf98f7cc1fc30d3fd8515cb3991ef87406d53456d2f9fbdf42230a0f0c96059f8300088000083840c08e9559d5cd566ac2767578c9ea7be9e38dafd098de13f9b26fb07da0d90c75cebba75155c3ae90782527a4d1d143cfa1377f78c2f7dcf1e85e87d15fc6cd0d9a9fd5f5cf9537f1ad2dc7f73b9ace1cfdb7a07990000440000440c07e02764d0c55b65ca909db35f57ff4f31be99be28ff8cd4f278eb83868ffcbea76d2dc77dbdf8413ecc84ccaa3f3c6dd4c6facff07ad2bfdd297fcd861e7d3e43ddb37f20f767cb2e9357aeedbbb282fb537cdf9dd73c192e373c309f86f8611ce633aec0ee53973e6f0ad2155dd5d6cbdab992114bb5cb1bbb955d7c7eea8661cc41dd386870ccd03812e09d8e54baa902b33613bcf381eff6a2eaddcfe2e1d3af064fe5ac16007db6672f63ba7749bcc139f4443f2f7a54943cea2afb7bf471f6dfa972f7d52420a5d32fe6e1a9c37325855fcf375bbbea0852baea4f8380fdd77cc3b21e54122330930e3d9b66d9befc50de2719f850b176addba511830dbc94abcd98919e4471f7dc4dbba79f366a5a60f1336539f68953c01bb5668e55b1238873213b6b3a3afadfd3b2dfdf1691a5eb03f5d3cfecea0cbd1ecf9df79ef9e4165f5db03f69a5d5b3e65d40cea9735941efeec5a5a57f6eb0c98651898bb374d1b7f37257b3abf13365081eb4abfa2859fce8009ab52a5a672c4b3bebff9cd6f3abdc29035e9aaabaee2bb4b8d1d3b963f33ccde7624f67d66663d7d7afb09223bf3b6be24813dd32b5e96f0dc73cff976ae62ef2ab6ce6ed9cc96bdc189cda0adef3166655a0dd7ff396666cc6c430febccdbfa4cb2ff3b8fc54b2258dd975e7aa9af3eebbed5ecf9e5ae9e89d6141e540b026111b07382185683fc322933613ba7fcdfeffa8c16adb8867aa4f7e5376665a7b46f4ad0ddb176d7e7fceee8e6b646ea953190fa660da1fe39c3b8c1b2ad2ebfd8b694df84555ebfb343313d3306d0b963e752efac41c1aaf07dfee1867fd18b6beea3c2f4fe74e3c42743ce8784e61110bb4d5937d110adf4dfbc83ed36c58c77c182053c09db6043cc98adcbc362630db6accd0c9c19b97891029b79b383edc8d5d576945d9d1c58e959eb63ed126db1d6274e220299b0d8954bccb4f10a43f3b48916854fc04e7f0abf55ed399598b0dd671a6c79f9de65d3687763195d74c0ed343c849727b4b5b552434b3da524a6f10d3ed85151bf8bdefbf979fa70e3cb01ef9ade237734fd79bfd92199bc00cfeebe667b4a7f5bfc311dd4ff58fae33e57471a13e4d74cc0ffdaabff4b1aac3365665683070fe6db4e0a4366b3587f13b65e5f6566cb5e8e70c92597749889facf4cfdcd5f9867203cfef5b1b72a59b7a164f53ffae8a374f3cd37f39733b0174958eb63655a67d2aaaf316b0e29aa8f710276aed4468a568909dbdd4166746ccf66f676a3de198368fac10b3abc6ad01f02bb6379d6db5368afc203e88cd1d750795d096daffe8976566fa4e6b62662ef08f67adbf89697ec250dd9c9f9d43b6b30f5c91c4471bf1876a860d94b1f1e58fe577e57f5f9fbcf0fe90421d4b2914e3f01eb2c54bcbbd76a865613eecac4d84cd86a8ac284d9f7c66adcc14cd87f99bcab9930db2b5a5c2bb6deb4c5f68beeca84d9ecd97aa20013d6af3db4401d01bb278a91b45489093b31d567cbc637bf7b16b5789bf98b1bce187d6db7fb35b3571de6a5f6a44121de5c150ec496d6665af4d9b5b4beec4bbe81c8a507dedbe9cd4be1948b3c7a08301364aff563aff7b3ded12c4c532ce70a33b41a349b09cb9a70a833614623d03561f677669c871f7e78876bc2fea62f6eb2f29f098bebd862391d33613dba43adce1070c2a7c2e949c426ece419c6e75b97d2f3dfdec567b2fb151d41c70fbf90b252f2c2e977c479d89698cfaeba93bedcbe9412e393e9a2f1b7f30d3e70b89b80f51a2deb89f5ae643113667f1777245baf09cb9ab07833132bafbb6bc2feedb0de1dcd66d8cca0d94c56d41fec9ab0b81e6dbd06ddbf7f7f7ead5a9c60e09ab0bb758cd6772660f78a6db8cc233661273bc65e39b8f4c7a7f89dd24dad0d9497da8b4ede7b3af5cb1ecab78b646f320ab69147b8a0583e66feec5587ec050eec9dc6bbeab6f27da34fdefb323ab8ff7191148dbc0611f07f4e58dc012d66beccc4d81b8dd8219e21f65fbeedee1aad985933e3b55e7fbee79e7be8b3cf3e0b7877b4d588d9eb0fd961dddfd9bffe4077478ba56976d316bbb3dbbf3eebddd1ec33f67fff550183c284a68080140127278c320d8bd8849d9ee2b36bb95f6e7f97bfc5a8beb986f7b520ad0fe5a5f5a2b4c42c4a88f3c8f45f22ad97d8ab0cab1acaa8a4760b7fc903bb9e7ccac81934baf7a17895a10449b7261526dcdd0d5291f40dcfe646420f7941203801a7fd2a788b22bc3b5ae799057b3de1ebeb1ea375a59f53554329b5b43587d25f256972527a5051d69ef487bda751617a5f2565a210f309a8366151dec30f3fcc3bcfdeedcbde21ecff8cb0f964d0421070070127576e432512d14c587787d8acb8a2611755d417d3b6dd3ff24790dada5a42edbb74bacce41c2aca1e42ec6d4bf969bdf96b0f71800008800008b88380ce8963578422326113a7f6ee90025a090220000220a0838069be15b6099b7846a123a0a8130440000440c03d0474afe0fa930adb844deb887b248096820008800008e82260da04326c13366d4aaf2ba0a8170440000440c05d044cf2afb04cd8b4330977851fad050110000110d049c0a495dcb04cd8a40ee80c24ea060110000110701f019326926199b0495379f7851f2d060110000110d04dc0141f93366193ce20740711f5830008800008b89380292bbad2266c4ac3dd1976b41a0440000440c00402a64c28a54dd89429bc0941441b400004400004dc4bc0043f93326153ce1cdc1b72b41c0440000440c0140226acec4a99b0090d3625786807088000088080bb099830b194326113a6eeee0e395a0f0220000220601201ddbe16b2099b70c66052e0d016100001100001f713d0bdc21bb209eb6ea8fb438d1e800008800008984640f7043364139e387122bdfffefba6f1437b40000440000440202202871d7618bdf7de7b1195116ee6904d38dc0a904f1f81e6e6669a3a752a2d5ebc98121313f53504354b1140dca47019931871332614ae6a084cd855e1926becfcf9f369eedcb9346bd62cbae1861be43223b53602889b36f411558cb845842f6633c384a338f4292929d4d8d848494949fc370e771040dcdc1127ff56226eee8c9bee56c3847547c0a6fad959f9bc79f3b8f9262727d3cc9933311bb689b5ca62113795349d2b0b71738e75b4d504138eb688fed21f71562eba87d9b03b028db8b9234e5dcd82f17d7367fc74b61a26ac93be4d755bcfca4515980ddb045b61b1889b42980e1685b839083b0aab820947615099e17a3c1ecac8c8a09292122a2c2ca49a9a1a62776f36353545618fa3a34b889b3be388b8b9336ea6b41a266c4a2414b5e3edb7dfa62953a6d0030f3c40679d7516892dd99e7aea29baecb2cb68c992253469d22445b5a1185504103755249d2d077173967734d606138ec6a85afaa47b5fd428c76b5bf71037dbd0da5a30e2662bdea82c1c261c9561fdb5531814dc1960c40d71732701b45a96004c589698cbd263307759c07e692ee286b8b993005a2d4b00262c4bcc65e93198bb2c60306177060c717375dc74361e26ac93be0375c3841d806c4315889b0d501d281271730072945501138eb280fa770783823b038cb8216eee248056cb128009cb1273597a0ce62e0b189635dd1930c4cdd571d3d97898b04efa0ed40d137600b20d55206e364075a048c4cd01c85156054c38ca028ae5e8e80828067377c611717367dc74b61a26ac93be037563507000b20d55206e364075a048c4cd01c85156054c38ca028a997074041483b93be388b8b9336e3a5b0d13d649df81ba31283800d9862a10371ba03a5024e2e600e428ab02261c6501c54c383a028ac1dc9d7144dcdc19379dad8609eba4ef40dd18141c806c4315889b0d501d281271730072945501138eb28062261c1d01c560eece38226eee8c9bce56c38475d277a06e0c0a0e40b6a10ac4cd06a80e1489b8390039caaa800947594031138e8e80623077671c113777c64d67ab61c23ae93b503706050720db5005e2660354078a44dc1c801c6555c084a32ca098094747403198bb338e889b3be3a6b3d530619df41da81b838203906da80271b301aa0345226e0e408eb22a60c2511650cc84a323a018ccdd1947c4cd9d71d3d96a98b04efa0ed48d41c101c8365481b8d900d581221137072047591530e1280b2866c2d111500ce6ee8c23e2e6ceb8e96c354c58277d07eac6a0e000641baa40dc6c80ea4091889b0390a3ac0a987094051433e1e80828067377c611717367dc74b61a26ac93be037563507000b20d55206e364075a048c4cd01c85156054cb88b804e9c3891de7fff7dd787fbb0c30ea3f7de7bcff5fd88b50e60307767c4a365dc504d1fe350d74461c25db0c120a8fa6b88f26408407f32b490d67402d0334c585aa3108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384838a70e9d2a53465ca145ab060014d9d3a958468162f5e4cd3a74fa7175e7881264f9e1cb41c2400817008407fe150431e530940cfa14726ceebf57a434f1edd29535252c8e3f1506a6a2a95969652414101d5d7d7537373333536364677e7d13bed04a03fed2140031412809e43830913b670baedb6db68f6ecd9d4d4d4e4fb6b525212cd993387aebbeebad088221508844900fa0b131cb21949007a0e2d2c30613f4e6c16dcd0d0e0fb6b72727287ff878615a940203c02d05f78dc90cb4c02d073f0b8c084fd1859cfde300b0e2e20a4504b00fa53cb13a5e925003d07e70f130ec0489cbd61161c5c4048a19e00f4a79e294ad447007aee9e3d4c38001f76f6366bd62c9a3b772eae05ebfbeec66ccdd05fcc863e2a3b0e3dc384a585cdee863eefbcf3e891471e21b6248d03049c2400fd39491b75d94d007a5664c237fde742bb6385f235139879ecc39a5bd075f5d09fb1a151d63093f5a7ac93bf14043dab266a5e79a1ea39e4e568269a93f79f6e5e4fd12225045efa7c01852a1a25154a1602fd4902735972d3f5a71a27f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e63d6845bbd2d54d7541556e4d293b2293ece13565e5333c98846471fa26dd082fe3aaac874fda9d63cf4fc2bd1581f4f63ce84d9e0f7f9b6d76875f187d4dcd618d6772b29218546f5fc2d8d2b3a96e22921ac324ccb64fa20182d8316f41758f9a6eb4ff5f7157afe9568ac8fa73167c2effefc04ad2bfb4cc9776aef1e13e8d081672a294b7721a60f82d13268417f306146007aeeac83581d4f63ca847754ff40afacbd57a9dffd61afaba857c660a565ea280c266c3f75e8af6bc6a6eb4fb53aa2c184a167357a8e1913f67abdf4c277f3a9ac6e9bd2ef5361fa003a69c4351447714acb75ba30d30741b70f5ad05ff78a365d7faabf8fd07360a2b1389ec68c097fb7eb63fa60e333217d97d213b3a9c5db4c8d2d7521a53f7cd0d934ace0a090d29a9ac8f441d0ed8316f40713b612809ebbd643ac8da73161c28dad75f4ec3773a8bea526a807f6cf194e7f3de8ffa8a9b59ee67f700eed6e2c0b9a272d319bce18358712139283a63535014cd8bec8407fc1d99aaebfe03d904be16613869e83c75a46cf3161c29f6c7e895615bf13905c5e6a2f62b7c86fa95ac73f3f6cd0143a79efcbf8bf1f5c710d7dbf6b055f6a1e5ab01f6ddbfd23d53455062c674cefc97460df138347c7d01432a2d1d105370f5ad05f70c598aebfe03d904b013d633c158a897a13ae6c28a6e757df4c6dded64edf92bd0b0fa273c6cea1a48464ba67d925b4b1f2bb0e26fcd067d7d277259fd221fd4fa0d3f6b982763796d3a215d7d296ddeb3b959510e7a1d347cda2ace402b96fa321a94d1f04dd3a68417fa109dc74fd85d68bd05341cf184f63c6845f5fbf903657ade9f4edd8236f1fbaf4c07bc8139f484d2d0d74c747e75371ede68026ccccfa82fde7537c5c3cd53655d19d1f5f446575db3b953928671f3a6acf8b42ff261a94d2f441d0ad8316f4179ac84dd75f68bd083d15f48cf134264c7873d56a7a7dfd839dbe194909a974e361ffa4dcd442aa6dda4d0f7c7a056dddfd43a7e5683113661f8cec7930fd65bf9bc813efa19fcb57d3bd9f4c0bf88d3b7ef8742aca1c1efab7d19094a60f826e1cb4a0bfd0c56dbafe42ef496829a1678ca7516fc26cf979c9ea9ba9a2a1b8d3b7e2883dcea413f6ba80d863230f7dc6aefbfeba7987f59ab0d584592113079d4a27eddd6ebe8f7c7e037d53fc71a7b2f352fbd0a97b5f4f7171f1a17d1b0d4965fa20e8b6410bfa9313b6e9fa93eb4df0d4d033c6d3a837e16f8adfa1659b5f0af86d983df1192a482fa235c59fd2a2cfafed90a63b1366cbd1330f7b9a0ad2fbd09ae2e5b4e8f3bf052cff37034ea39185bf0dfe4d342885e983a0db062de84f4edca6eb4fae37c15343cfc42fef613c258aca1bb31a9a6be899d5b3a9b1a5bed3b7213fad37cd39fc39fef7c7bf9c4b5fed7837641366097f3ff45c3a7ae8547e1df9eab77e1ff086af644f3a9d396a0eb1df6e394c1f04dd3468417ff2aa375d7ff23dea3e07f4dcce07e369949af0f22d2fd1d73b033f92b4578f03e892f1777201cc7df70c2af5db41abbb9930cb33b2f060baf0805b79fed9ef9c46e5f53b037edbf6eb73241d507482eaefae6de5993e08ba69d082fee4656abafee47b143d260c3dcb475f46cf5139137ee9bbdba9a476534072a37b1d4ae78dbb897f76fdff4ea4eaa68a0ee926f43f8e4edfe72afeb7fb3fb99c7e2cffbac3e743f246d3e5072fe07fbbe5fda9b4b36663c07afa64ee41270cbf523e7a9a72c888464713dd64c2d09fbc424cd79f7c8fa2c784a167f9e8cbe8392a4df85fdfdf493b6b360424b767fe189a7ed07dfcb3db3efc0bdf80c37a247bd2e8a411d3a8aeb99a5efdfeefe4a5b60e9f8fed7d389db3df6cfeb71b96fe813f3b1ce828ca1c4ac70fffab7cf434e590118d8e26bac984a13f798598ae3ff91e458f0943cff2d197d173549af017dbfe439f6f7f232039b62ff4ad935fe1772fbfb87a017db031f0cd5b5d613f75e40cfacdc013a9bab182ae5fdaf50e59e3fb1e4f637b1f251f3d4d396444a3a3896e3261e84f5e21a6eb4fbe47d163c2d0b37cf465f41c9526dcd4d6c0f78aae6bde1d90de8c8317d2e0bc91b4b37a33ddfae1546af3769ced76853c2d318be61cfe2ca52666d0f2cdafd333dfdc11306946520e9d3e6a3625c6bb672f6919d1c84b32f21c6e3261e84f3edea6eb4fbe47d163c2d0b37cf465f41c9526cc90adddf509bdb7f1a980f4c6f49e48e7ee37877ff6fabac7e8cd1f16874479ea989934aee808f27adbe8f68fceefb4942d0af9dd1e7fa6a179078454a629896444a3a3cd6e3261e84f5e21a6eb4fbe47d163c2d0b37cf465f41cb526ec252fb11b0a76d56e0e48f0b203efa3a10563f8861d2f7fb790dedff04297a4e3e312e8e41197d1a183fec0d37cbce9557afedbbb03a6ef953188feb017bbb1cb5def1796118dbc2423cfe1361386fee4626ebafee47a133c35f48cf154a8246a4d98757067cd4ff4afef039b6556723e5d31e141ca4febc559acddf505fdefc7a7e8c7b255be9bb1d8bed2230a0fa4a3f79c4a7db3f7e4e93654aca1ff5b3e839adb1a037ed34e1e710d15a60f0cfe2d342c85e983a0db062de84f4ee0a6eb4fae37c15343cf184f63c2845927dffef931faa1ec8b80df8adc94423a7fff5ba85ff650dfe70d2d75545eb793efe6c236f6b0be2398edb0f5c4ca79d4d0521bb0bce10507d2c4417f0afe0d343085e983a01b072de82f74a19baebfd07b125a4ae899f88e85184fa374b30eebd7a0a6a9829efb762e35b73505fc7624c427d2c441a7d0e1834fa3cce49c80694a6bb7d39b3ffc93566c7d9388bc01d330b3fee3a839c4eebe76e361fa20e8d6410bfa0beddb60bafe42eb45e8a9a0678ca7313313661dfd72fbebf4d9b6d7bbfd86b0f701b3678807e4ee45d9c9f9fce6abf28612da50fe2d5f8266d7f8ba3bc6f73d81c6f63e32f46fa161294d1f04dd3a68417fa109dd74fd85d68bd05341cf184f63ca845bda9ae8d9d5f3a8a68b8d3542ffea044e99955c40a78f9a45ccc8dd7a983e08ba79d082fe827f2b4cd75ff01ec8a5809ebbe6156be36954df98650df38fe55fd0d29f1e93fba68498faa82117d2a0dcd121a6363399e983a09b072d1671e8af7bdd9bae3fd5df5ae8b96ba2b1369ec68c09b390ff7bed3db4bdbae33695917eb9fa660da5e386b9677bcaaefa6bfa20e8f6410bfa83095b0940cf81f5108be3694c997069ed667ae1bbdbbbbcb94ad690e3289e4e1d793de5a5f691cd6a5c7a98b0fd2181feba666cbafe54ab231a4c187a56a3e798326186ec93cd2fd2aae28eef100ef70b36b6f7641adfb7ebfda3c32d57473ed307c16818b4a03f3583968eef87ea3aa1e7ce4463753c8d3913667739af2e7e9f5615bf43d561dea8c536fa18ddeb081a5978a8eb76c6c272b4eae154ae3ce82f302fd34f02e5a21c3c75b49830f41cb99e63ce840532b6a96457cf0e07fb0a79e293822571dde7a60f82d13268417f910f5aaefb72056830f4fc2b94581f4f63d684a3e18bacb20f3061953451962c01d3f527db9f60e9a3cd8483f537d63e97d1334c38d6d4d1457f6544a30319062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a3676d26fc9f97fe43d74efb1b27f7e4ab4fd2d803c6f07f3f74cf227ae08e0768d8dec3e8ee87efa28af24a3afbf8b33ba4310b7768ad69a86fa0db67dfc1135f3bf71a4a494d0998f1abcf566ae9af8c6842ebb1da54aa072de80ffa53ab50b9d2a067395efea9a3693c35c2842fbde652baf88a8b48805df2cf253e131e34645064d142ee9008c4b209437f2149c4d644a6eb4f75e7ed3461e85975b4e4cb93d1b376133efa84a328333b8bcf0e776cdb41575e78150d1e32887efe7143c099f0861f37f034ebd6aceb308b16334826403693164214336b96f8d43f9ddaed2cb4abb495e59574cdb46b69d97bcb3ad429da32e1b707d3b20f3ea1bd47ef4d6c27ae048fc7570f2b73e5e72be9a6bbe7d1a2fb1ef6cd84df7ee36ddf4a8008315b11608775e6ef5ff7ed0b6fa3634f3e565e154172c8884679e5211468d7a005fdfd0a1ffa0b41888a9240cf184f8594b49b3033cba5af2fe586bb66d51a7af5c5d768c26113e8df4bfeddc984993933333c7eca71dc8884c1ddb1f0766edaccbc84f9b20e5a3f67ff6779c7ec3f86cfbafd0feb32706e5e0e37fa732f39878ef8fd111d969199793ef6e0e3bc6dec60e946ef37da67ba6c9993f581b5c95ae739b227dd81000020004944415417ff39e072b430f282c2029e47f4830d88a2bfa2cd762e55c7aa09437fed27b5d1a8bf65cb96d121871c42f3e6cda3993367f2ef637d7d3dcd9831833efdf4537afef9e769d8b061fcef81d22af2db80c5d865c2d0b3fbf4acdd84ffef8905f4dce2e7b9b16ed9b4954a7696d088517bd1b34f3cd7c984999a6fbeee66fe77ff656a7f83123348abe932831406da557e5687f51ab5304966c8ccf8c5ff6fbcf546b29ab5989d5a3fb7ce6a599f025d1316b36f31c3b5f6c37f561cea759070068f583561e8affd1e8c68d45f2c9a30f4ec3e3d6b37e1479eff3b2d7dfd6dee1bdbb66ce366cc0e6196d61bb3b66fd916d4448581fa9b272bb33b13b65e8f1626665d9ef337363668b1e567316316262cca29ec55c8b3b0a56836c3653762f99bb030dc091327f034397939643561fffec284a787737e11308fb8310bfa3b9ba03f65b20ab920bb66c2d0b3fbf4acdd8499d131b3b1de296d351fab09fbcf0cad8a979d09b3a56f51a775095b9835fb8c0d4ed3ae9a4673af99cb97a6fdafc506327aabd917f4c8a731078ced70d319fb9c5dff6607336576139a75e68d9970e071ccae410bfa83fe42764e8509a1678ca7424e4698b030577146fef17b1f079c09fb5f23b5ce6c033dca24734dd85a56efa2debe59ebe5d74da7fb6f5dc07931f30c744dd8dfa0ad378f0983f59fc57ef7edf7fc1ab6ffcd625613c635e15f473d3b072de8efd747e6a03f854edb4d51d033c653a34c58984d51bfa24e46e76faec1ee8eb6ce2a5927ad773cfbcf78fdbf23d6b4e2396576ed38d8ddd1fe262c0c972daf8b65667f137efca127f8b538ebc1da37fe90f1ddde1deddf3f554346ac5e13b6de0007fd417faabe4fc1cab1d384319eb6d377cb78aa6d261c4ca4f8dc5902b166c2ced2456dc10898aebf60ed97fd5cb509cbd68ff4f61290d1334cd8de58b8a67419d1e8e814062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a367d798b0ff1dcad60d0664f0b347305e7bf1b56ef790eeaebc48f3fb97cdeef67ef0ae07e986f937f0cd3a741d32a2d1d146dd8316f4676fd44dd79feade43cfed44319e12b9c284c50028f68c66c1b3eed1eca4794134aa87a3d0cad33968417fa1c528925430e148e8c9e5859ee57885935a46cfae3061365bbcf5c65be9ba9baff3ed192d8474d18c8bf81ece6c363972cc28ba63f61d1d5e83c84c73d13d0f51e9ae32fea285238f9b4c6fbdf63f129b70b0ed25c5f3bad6e788c5a6052c00ecef6c4f6bb65907db6483cda43332d2f98622d619b9ffd69781f6a0666f7f127958d9e2ed4ce1ceecc31148a03c32a25155a74c393a4d18fa93895478694dd75f78bdea3a17f48cf154a8c315266c35b7409b55880d3c261d33896f11c966c95faef8ca679ad6973e8899acff4e58cc5c45badcbc5c6e8ecce0fd5fbc2076ba121bdeb30d3ed8c1ea65ffb69ab57f79d6b73f8974ecf58d588e0e3ec4e91cb4a0bfe0f18934054c385282a1e7879e4367156e4a193dbbc2840508ebec94fdcdfab206eb4c99cd926fb9fe16bae4aa4b88edb8b5e8de451d5e90c066b2c284f71b3f96ef09ed9fc77addd8ba04cd4cd85a9eb8a67bd5acabf8fb828f9b721c8d3d600c09a1b3f2d98b1eac466b9d59b17ec084834b5da709437fc1e313690a99412bd2ba4cc80f3db7df9783f1d425d784037d69ba33b2500c5598b0304d6b1ef672073193666f3ff23761ab410b13664bd6b7dc309fcf9e9909b383cd8cfb0de84b7dfa1575306e6b5d30e1d0864413062d6b4ba1bfd0e2166a2a9870a8a4ec49073dabe52aa36757cc849909aef878055ff215879869321365d784ad3361aba0d84c38d0acb63b13ee2a4fa033377ecdf9de4574d3ddf3301356abe30ea5e93461e8cfc6c0fe52b4cca0657f6becaf017a0e3c138ec5f1d415266cbd094bcc3259b0c43557f695b1bed7d7ff9ab0ac0987724d582c85e39ab0fd0316ab41e7a005fdd91f6398b0fd8c450dd0b3fdac65f4ec0a1366c8fc9fd3b4bee5482c09676465f2f7f3fabfa45cd684d99b93c4f56756cf1fff7c3abf7611e8ee68ebab0865ef8e668f56897eb13e8a372ed92f91ce35c8884647fb749a30f4677fc44dd79f6a02d033c653a129d79870775f02bb37bcb0ce76557f194d29cff44150f7a005fdd9ab54d3f5a7baf7d073fb1325d17ac8e819261c4005feef2cb6ce76211a3d046269d082fef468ccc95aa1e76b88ddf41aad47cc9970b406d2c97ec988c6c97689ba4c1eb474f088b63a4dd79f6aded0b36aa2669527a3e7a898099b85df9dad91118d8e1e62d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a7695098bbb8fd97ecf915ed4b7deccf5f38f1bc27eb39275e38dde45bde9f6d977f876cd324b16ddb74646343afa65c2a005fdd91779d3f5a7bae7d07360a2b1389ebaca84c5ce552c7c97ff6d7a44affe537547b55534ecd126b71ea60f82260c5ad09f7dea365d7faa7b0e3d0737e158194f5d65c2ec51a1f1878ce7bb67b1ed20d99ecfec1083a3ff9b8dd8dd776c66ca5ec2f0ec13cf117b839178f142773361568f78b392d894c3ff3965b64de53917ff9997cf9e4d66cf13cf5f700b3dbf78896f266cbdcbd5ffd9e5671f7b86b7fd8d57fedbe1ad4faabfeca19667fa2068c2a005fd85aa26f974a6eb4fbe47dde7809e2b7d6f9063a462793c758d093313bcffb6057c065c515e412f3ff3324dbb7a1abfcd5d6cace1ff66236192dbb66ce31b61b07c627b4b1678f1e204eb72f4db6fbc4d5b366de5cbddfe2f67102f7bb06e8bc976d7122f8bb02e470f1e32888b2cd09b93c49b9898c18bb734a958628f64a0307d10d43d68417f91a82b785ed3f517bc077229a0e78709e369bb665c63c2d6fd7bd9b5b985772ea493ce3889bf5f58ec372a769ceaca3c5987c54b15ac6f361226ecbf9f74575f2beb127457262cde717cc3fc1bf8b2b9ff7ed6d63731b16d3685f1cb7d95d5a5367d10d43d68417feab416a824d3f5a7baf7d0f3af44637d3c758d095b978845f8c4ccd7fa96233633eeeaf582c14cf8c2bf5e40b3ae9cdde14d48a22effd7288a6d33bb326196cf6ab4ddbdd909261c7c88d33d68417fc16314490a987024f4e4f342cff2cc6472c8e8d915266c9d458a8bf5fed774fddf196c7db39158f6e8ea1dbfc166c2fe1b9eab3873b3ee670d130e2e6f9d260cfd058f4fa4296406ad48eb32213ff47cad6fb213ebe3a92b4cd8fa5624b1d599d518d997eaece3cf26ff371b896bc2ec73f6f2851ddb7604bd26fcf8434ff0efa8b826ccae21b36bcf0bef7ad0271ad69ec71e7c9cee7ef82e0af79a304c586e28d43968417f72b10a27354c381c6ae1e5819ec3e326934b46cfc69bb075f62aee861630d8924ac9ce123af2b8c9f4d2d32ff13fb3bb8dc55ecfecffecee6576d393ffddce5ddd1d2df2b03b9ed9218c9d09f7da697fe37f9b73e76cfe5625f62e637163d5aa2f5749dd1d0d139691b4be5719427f72710a37b5cca0156e1d26e5d37552093d3ba302193d1b6fc2a120f3bf262cf208c131b314ef210ea5bc584c23231a1d7c740d5aa1f415fa0b8552f7694cd75fe43dec5802f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9ea3c284cdc2efced6c88846470f4d1eb474f088b63a4dd79f6aded0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a367291336ab9b688d6a02338f7d587591caca6383168ee82660b2fe5493879e551335afbc50f51cb2099bd745fb5ad4dcdc4c53a74ea5c58b17536262a27d15a16410084000fa832ca28900f4dc7d3461c201f8cc9f3f9fe6ce9d4bb366cda21b6eb8219abe0fe88b0b08407f2e08129a183201e819261cb25844c29494146a6c6ca4a4a424fe1b0708384900fa739236eab29b00f40c1396d2183b6b9b376f1e37dfe4e4649a39732666c3520491381202d05f24f490d73402d073f0886039da8f91386b137fc66c38b88890421d01e84f1d4b94a49f00f41c3c0630610b23eb599bf83366c3c14584146a08407f6a38a214330840cfa1c501266ce1c40cd7e3f15046460695949450616121d5d4d410bbbbafa9a92934a2480502611280fec204876c4612809e430b0b4cf8174e6fbffd364d9932851e78e0013aebacb3282e2e8ebc5e2f3df5d45374d96597d192254b68d2a449a151452a10902400fd49024372a30940cfa1870726dc052b61c2a1a3444a10504700fa53c71225e927003d771d0398304c58ff37142de84400831644114d04a06798b0b49e211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a067987050112e5dba94a64c99420b162ca0a953a79210cde2c58b69faf4e9f4c20b2fd0e4c9938396830420100e01e82f1c6ac8632a01e839f4c8c479bd5e6fe8c9a33b654a4a0a793c1e4a4d4da5d2d2522a2828a0fafa7a6a6e6ea6c6c6c6e8ee3c7aa79d00f4a73d0468804202d073683061c2164eb7dd761bcd9e3d9b9a9a9a7c7f4d4a4aa23973e6d075d75d171a51a402813009407f61824336230940cfa1850526ecc789cd821b1a1a7c7f4d4e4eeef0ffd0b0221508844700fa0b8f1b729949007a0e1e1798b01f23ebd91b66c1c10584146a09407f6a79a234bd04a0e7e0fc61c2011889b337cc82830b0829d41380fed4334589fa0840cfddb3870907e0c3cede66cd9a4573e7cec5b5607ddfdd98ad19fa8bd9d04765c7a16798b0b4b0d9ddd0e79d771e3df2c823c496a47180809304a03f2769a32ebb0940cf3160c2cd4d2d545fdd4075d50dd458dfc87f37d53753435d1335d635f2df49491eaad8b59b5a9a5aa9a5b9855a9ad9ef56ca2ec8a4b21d15e46d23624f6bf19f362f15f6cba7922d6514171fc79f19e63ff144057df2a8aa7437257812c893e8214f12fb9d40997919e46d6ba3e4b4644a4e4da2e4b4244a494da294f4244acd48a1d4cc144acb4ce17970441701e82fbae219ebbd819e9d55802b96a32b4b775375592d5557b09f3aaa2eafe1ff6e6d6da38a9d55c49e744e494ba2e4f464caed91454c441e6692491e4a4cf650629287925292283e3e8e9b6782279e121212289efdf6c4fb4c96b8d992efff565366611106cdea6d6d613fadfc775b6b2b6f4b734333af9bfdb436b7526b5b2b35b213817a7632d0440d758d14171f4f7d87f4a4a6c666cacc4da7ccbc74cacc69ff9d959fc1ff86c32c02d09f59f1406b2223003d47c64f756ea34cb87c67159f95966eaba48ae22aaadc554dbbcbaa29a7308bcf20d98c32252db97d66999ec267996cd6e9a6d9259b853343aeaf6da0fa9a46fe9b99337989f7bda1b6919b714e8f2c2aec9fcfff9ddf2787f27a66ab8e3dcaf32300fd417fd1f4a5809edda1676d26cc4c76e7c652aa2aada6cdeb7650f98e2a3e0bcc2ac8a0f4cc344acf4ea38c5f7ed89270ac1c6dad6d54bbbb8e6aaaeab821579555ff32f3afa3bcded93460af22caca4ba79e030b60cc118802fa0b0c0ffa8b40541ab342cfeed5b363265cb6bd92b6acdf413b36eca26d3f96506a7a329fe1b2191e33dcacbc0c8a8f8fd72863b3ab6e6b6ba3eaf25aaad95dc757092a4aaaf875f0a2213da9d7a002ea37ac3715f4c935bb131a5b07fd45061ffa8b8c9feadcd07364444dd2b3ad26fcf3b75b68eb0fc5f4d3aacd7cd9b8a02897f27ae6f0ebb689c9899151446e7eed99dd6c56b1b392766d2be7d79e07ee5d44034714d1a0917d639e10f467af04a03f7bf9fa970e3ddbcb5b979e959bf0e6b5dbe9fbcf7ea60ddf6ea55e030ba857ff1e94df27979b300e7b09301366665cb2a5948a3795d21ea3fbd3b0fd0751bfa1bdedadd8a0d2a13f7dc180fed4b3879ed5330db544a7f4acc4849b9b5be89b0fd6d1ea4f7ee04ba26cb6db7b500f2c2f871a6d1bd2b16b7bdb37945075450d156f2ea35113f6a491870ce5778a47db01fd9917d158d29f6afad0b36aa2919767a79e233261f63cedf2ffaca42deb77526e8ff69b86d89dcb38cc2250575d4f9bd76fa79aca3a2a1a5248e38f1e6d5603c36c0df417263887b345abfe5463849e5513b5a73cd57a0edb84d77db981be5cba9a7a0f2ca43df619604f6f51aa72023faeda489bd66ea30927ec4743c70e545ebe5305427f4e91565b4fb4e84f2d1522e859355167ca53a1e7b04cf8eda73fa186da26dae790e1cef414b52825c0ee0cfcf6e37594919746134f1dafb46c270a83fe9ca06c5f1d6ed79f6a32d0b36aa2ce9617a99ea54d78c9ddffa5c1a3fa5361df7c677b8ada9413d8f8dd16aaaeaca563ce3b4c79d9761508fdd945d6f972dda83fd594a067d544f59517ae9ea54cf8c3973ea7b48c34beaf328ee8205055514d3b37eca249671d6c7c87a03fe34324dd4037e94fba73413240cfaa89ea2f2f1c3d876cc2ab97ada72deb76d2de070ed5df53b4402981d59faea78123fad0880387282d576561d09f4a9a6695e506fda926063dab266a4e79b27a0ed9849fbfeb0d1a317e4fcacecf34a7b7688912026cebd0b55ffe44a7cc384a4979761402fdd941d58c32dda03fd5a4a067d544cd294f56cf219bf03fe7bd42874d39d09c9ea2254a09bcffe2a7f4a759272a2d536561d09f4a9ae69565bafe5413839e551335ab3c193d876cc20f5df52c1d72c238cc84cd8ab592d6b0579b2d7bf54bbaf8ae3f2a29cf8e42a03f3ba89a51a61bf4a79a14f4ac9aa839e5c9ea59ca84d9f687782cc99c60ab6ac9aa0fbfa7ad3fee34de84a13f551137ab1c37e84f353166c2d0b36aaa669427ab6729131e3caa1fe5166653af013dcce82d5a1131811d1b4af8eb247ffa76b3f1260cfd451c6ee30a708bfe548363260c3daba6aabfbc70f42c65c2c79c3b9196bdf625edb14f7f18b1fe7847dc829d9b76117b33cbc1c78ea5d71f7bcf781386fe220eb95105b8497faac13113869e5553d55b5eb87a963661d6cd6f3efa9e5a5bdb68df4347505c7c9cde9ea37669026c8797afdfff8ebf4e72d484613cbf5b4c18fa930eb77119dca83fd510850943cfaac93a5f5ea47a0ecb845937b7fd544c6cdfccde830a69e89841cef71c35864560dd573f53c9e632da63f400ea33a8d057869b4c18fa0b2bf4466472abfe54c3b39a30f4ac9aae73e5a9d073d826ccbae9f57ae987951ba9646b19e5f5caa181c38b282d2bd53902a8292402b5bbebf94b1bca7654f0f73b0fd97700c5c5755cc1709b09437f2185de8844d1a03fd520fd4d187a564dd8bef254eb39221316dd64d3f18d6bb6d2c6b5db28bf570ee5f7cea5de037b508227c13e1228b95b02ad2dadc46e1228dd514115c555346078110ddcbb6f97ef7876a309437fe67e09a24d7faa49073261e859356575e5d9a96725266cedeaae6de5b4edc79db463e32e2ae893cb97ab0b7ae7524a7ab23a2228292081fada062adb5149db7f2ee1b35ec6beef905e3c0ec10e379b30f4172cbace7c1ecdfa534db03b13869e55d30eaf3ca7f4acdc84addd2dde5cca67626c469698e4a1823e79dc10720bb3282925293c32c8e523d058df44ecc1f0d26d1554baad9c5a9a5ba9f7a01e9c7161bf022952d162c2d09f54d8234a1c4bfa8b085480cca19a30f4ac9a7cd7e5e9d2b3ad266ced6e75452d956e2fa7f2e22a3e5b4b4cf6f0678e0b7ae7507a761a65e56560f9ba1bbdb1e590dde535545b55cf395694eca696e616bef4cf4e6a0a8af22833273d6cc546a309437f61cba153c658d79f3a92ed258563c2d0b3ba2898a467c74cd81f5f6d551d559454b59bca8e0a6e30a9e9c994d3238b9b32fbc9f8e5774242bc3afa8697c41efd626c6aaaeaa8b692fdaee59b69d4d736f2131536cb656c98f1a667a529eb4db49b30f4179a54a0bfd038459a2a5213869e438b801bf4accd84032164c6c3ccb89acff87e31a2aa3acacccd204f5202a566a4506a7a4afbef8c647e9d393925893fefea96a3b9b1991a1b9aa8a1b691ea6bd84f43fb4f6d03353534f37efb4e4072d2282b278332f333f809899d47ac9930f407fdd9f97d0a56b66a13869eddab67a34cb82be1d65537505d75bdcfacda8dab91da5adba8bab296d8d242726a12ffc92ec8a4d6e656bedc9d9894f8cb6f0f25a526517c5c1c5ff28ef7c4f3df09ec77423c7f5c876d3ac27f8b9ff838f2b679f96358be1ffe7fa2d6d6566a6d69e3f58adf2c4d537d133537b55073630b353735f3df09890954b5ab9a1b2fbbe6c0ea65335a560f3b91683fa1683fb948cb643f7a1ef18209773d6c427fc12c25f2cf4dd75fe43dec588213268cf1d41de3a92b4c38d8178099313338f6c3ccafb1bedd0085113263f42426f0255e669c6d1603cdc849a3cad2ea4e869bd73387ca8b2b3b19734e8f4caaa9a86b377061e49e043e536d66e69fe4e97002909c92488929897cc6ce4e12e20d5d5a377d10d43968417fc10844feb9e9fa8bbc87e69870b0be603c0d4628f8e7327a8e0a130e8e0429821190114db0b2ecf8dc6413b6a3bfb156a6e9fa531d0fe8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dbbce84173c742fddfdc01d1d889f79ead934ebdab99492127cb7a92fbefa8cb66edf42271e7b7297516b68a8a779b7cfe69f875aae5912906f8d8c68e44b8f3c87298316f417792c039560bafe54f71a7a564dd4acf264f4ec4a13fe62e56774ff1d0b2937278f2a2acbe9f26ba651dfa27e410df3a70d3fd2a5575e44179e7b314cd84fb332a2d1217793062de84fbd024cd79fea1e43cfaa899a559e8c9e5d6fc20c3d9bdd9e7cf609f4d293ffa671630fa057fef3125d7eeda53c2a2386ed4d0fdcbd88f272f3b8597fb0ec7dfef72b2fbd86a65f3c83ac339bdf4e388c9b7b6a4a2a9f0957d754f3b4afbef18aaf9c3d060de17f0b948f9d1408a3ff6edd1a9e4eb4c9da4ef66f5117cb63c221231a1ded3575d082fed4a8c174fda9e9e5afa540cfede332c653a2a83061eb0c77d4dea3e9be07efa67937dcc2156f9d256fdbb1adc34c9899f7cbafbdc867d0e2b3a3271d43179c731137e195abbeea60e062b6bdfabb6fbbcdc7ea6565fefdf14524664de515e5beba8f3ae2f7c62d779b3e089a3c68417f915b94e9fa8bbc871d4b809e7f5dbd8cf5f134ea4c585cebb5ce86c535637f13165f0bebac96cd9085090b3365d79a59790f3ff65097676fd67c4f2f7992fcaf53fbe767ff7ff9d5177dcbeaaabfe4b2e5993e08ba65d082fe6495d79ede74fd85d7abae7341cf184f853aa2ce84fbf6e9c797a699095e7df9dfe8cefb6fe37db5ce76c5356161d4cc40cffee3543e6b1e37e680a026fced9a557cb9db3f1f5bde164be302b03063362bf6bfa14c2c958b2519d55f7499f24c1f04dd3268417f32aafb35ade9fa0baf57ee3761e839bcc8cbe8392a4cd87a4df89315cb7c4bc0e2da6e2013f65f12ae6fa80fc984ef9e7f3f3df5fc629fb15bf331131687b8618c5d83befff607f89ffd67d2e185d79e5c32a2b1a705dd976ab209437f912bc274fd45dec38e2540cfed33618ca751704dd8ff71a237df7ec367761515e5be5971a099305b8616d76c3ff8f83ddfec562c47b365657663d51e838774b8b66cbdd66bcd679d4d5b67c5ac8cdcdc3c5c138e60243375d082fe2208aa252b4c580d47d952ac6320bb49147a96251838bd8c9e5d3913eeee3961eb0c942df71614f4a038a20e773d8b6bb6679d3695aebcfe726277328bb4fd8afad135975f4777dc7f6b87bba3ad77335bef80b6e6b31abdb83b5adc85cd42655daac6ddd1726237c984a13fb9d885925a66d00aa53cd3d340cfed4fa2f83f51128be3a9eb4cd8f42f975bdb67fa2068caa0e5d6f89ade6ed3f5a79a1ff4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac4490987d00000a2d494441549aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e8d995262cee809e7ed10cbe57b438d8e61b9bb76ce67b428b5bedd99dd0ecf0dfc18adda9cc9e293e78fc04fe1893f52e66965ed4c1fe2deee2531166d1ae938e9bd2a1ed2aca8ea40c19d144524fb8794d1ab4a0bf70a3d8753ed3f5a7bac7d0b39a3df3a3613c8d5a136686cc0eb68da008d401fb8df7bd3d893d1fc70c989beca27b29273b87ef372d5ea8c04c3ad0df23fd324683682265104e7eb70d5ad09f5c9461c272bc54a60ee5a4127a96232ea3e7a835617f644c449f7db9826f5fc98e7b16de45a79df447621b7ab09738646464d2e48947fa66a7cca40b0a0a68f9679fd0f557cda4ff5b741f5967afc2c4478e18c55fc62066dc6c772cfffd83d9b36f6c230fb651b978061933613951bbcd84a13fb9f8ca0c5a72259b991a7ac6782a94193326cc4c931d6ca99a6db6f1fccbcfd215d3aee2c6c84c989969696929ff9c9d19b23da799512e7ef6713e43663b6389a56ef139db9bbaabbfb3b726cdb97526cdb9ee262aea5de47b6b124c38bc41d1ed8316f4d77ddc61c2e17d2f54e40a6526ec5f0ff4ac4ecfae3661f16e602b0eff6bbbec33b6b4bc60d1bdbe6bbbd6a515f13ac3334ffb132dfac7426eb83ffdfc23bf5e7ccc51c7f95e8bc84cd56adcec7366d8d6ebd0d6765867deec2d4ca21e987078c38689260cfd8517cb40b960c2ea58ca9664dd65d03f2fc653599aede965f4ec6a13eeeec62c818e99dfcc9bafeff40a42763d98ddd425cc91cd6a1ffac742be44fdfa9baf51ff7efdc9fa6e62f63208b184cd3e17f9593dd65721b27da259b9fee60c130e4fcc229789260cfd4516536b6e99414b5dadfa4a829e319ec6c47274a077f65a9792d94d58c21cd9b562f6f287d2b2325ab57a25fdf5922b39a3fb1ebcdb77c3162b8f7dfef3c61ff96b12c54d5c02262b7bd62d37f0bcec7587e21a3466c2910f766e1cb4a0bfd0e30e130e9d95ea94a12e4743cfa19397d173d4ce84fd97a0ad3363b1942c96aad9356166c2ecfab07817b1781983d584c58b1b8e9e740c5f8a16b360366b663763590d9e2d5f5f7ae54574d38df3f9f56676f3163bb01c1dba90ad29dd66c2d09f5c9c65062db992cd4c0d3de7f17b73d81819ebe369d49ab07589587c0dd9b3c2fbee33969212137d77305b67c2e2ddc0271d3f857fce446235e1408f17f95f4f11cbd1c2e099a9b3835d5bd959b203261ce698e8b6410bfa930b344c588e97cad4a1cc84a16739e2327a76a509cbe15097dadf94654ab69a3d5b9e36ed90118d8eb69b64c23afacfea84fe7491575f2ff40c3d0b55c18443fc7e8977015b67ba2166e5c960c232b43aa78df5410bfa8b4c3fa6e5869e3fe397fe309e12c1844dfb766a6a0f66c29ac0a35a4ec074fda90e53ac9bb06a9ea69527a3e7904df8e5fbff47e326ed635a5fd11e45043e5ffa0d9d7cf96445a5a92f06fa53cfd4a4124dd79f6a56d0b36aa2669527a3e7904df8f9bbdea011e3f7a4ecfc4cb37a8bd6444ca0b27437adfde2273af58aa3232ecbae02a03fbbc8ea2fd70dfa534d097a564dd49cf264f51cb209af5ef6036d5abb9d461d34cc9cdea2254a087cbb6c2d0d1ad997461c34444979761402fdd941d58c32dda03fd5a4a067d544cd294f56cf219b30ebe2c7fffa92925292a8d7801ee6f4182d8988c08e0d25d4dcd242879c3036a2729cc80cfd3941d9d93adca43fd564a067d544f597178e9ea54c9875f1857bdfa401c38b60c4fae31d710b766eda455bd66fa7932f3f32e2b29c2a00fa738ab4fdf5b8517faaa940cfaa89ea2b2f5c3d4b9b30ebe23bcf2ca7daddf534fa90bd282e3e4e5faf51735804dadada68d5476b292b378d269e7e605865e8cc04fde9a41f79dd6ed75fe4043a96003dab26ea6c7991ea392c13665dfc61e526fafcad6fa867ff1eb4e7be039ded356a0b9bc0fa951ba8745b398d9b3c8a86ecdb3fec72746784fe744720bcfaa3457fe1f5beeb5cd0b36aa2ce94a742cf619b30eba2d7eba5cfdffc9636acde4ad93db268e0f0224acb326f372867c2616e2d6cd562d3da6d545152454346f7a7719347525c9cfb5730a03f7335676d59b4ea4f357de85935517bca53ade7884c5874b1ada58dbefe702dad59f603e5f6caa6bc9e39d47b600f4af024d84301a50625d0dad24aec2681b29d9554b96b378d9cb0278d3e7438c527c407cdebb604d09f79118b25fda9a60f3dab261a797976ea5989095bbbb875fd4efafeb39fe8e76fb75261df3cea39a00715f4cea594f4e4c849a0846e09d4d73650d98e4a623708b025e74123fbd18803f7a0a2213d63861cf4a72fd4d09f7af6d0b37aa6a196e8949e959bb0b5831bd76ca3ad3feca09f566d214fa2870a8a72f92c39b7308b3fea842332028df54dc41e0c2fdf5949bbb655506b730b0dd97700f5ddb3270d18511459e151901bfab33788d09fbd7cfd4b879eede5ad4bcfb69ab015597971156d5db793b6ff5c42db7f2aa1c4640fe5f6cca6bcc26c4acf4ea3acbc0c2c5f77a331b61cb2bbbc866aabeaa9bcb8925fdf6d6e6ae1b3dcde837a50bfa1bd384f1c8109407f912903fa8b8c9feadcd07364444dd2b36326ec8fac725735156fda451525bb69ebfa62be8c9a9699c26ff04acf4ce5c69c919dc67f2744e175ccae24d4dada46b5557554535547b5957554bbbb8eaacaaaa9bea681f27ae570b3cd29cca25e030b28bb005b8886fb5584fe029383fec25594de7cd0b37bf5accd840321ab2cd94da53b2aa96c5b059517efe63714ed2eaba1acfc0cf22426506a7a0aa5a425536a460aa56624f3ebccc9294994989ca8f71b20517b73633335363451436d23d5d7b09f06aaaf6ba486da06629f5557d451767e06651766515ecf2ccaef934b057d7228a74796442d481a0e01e80ffa0b4737a6e6819edda167a34cb82b31b365d8dd65b55453514bd595b5545d5e4bbbcb6b892d295414efe6d74293d393b941b359624b630b376d761d9a2d7b27267928293589e2e3e2f89277bc279eff4e60bf13e2f9e33a6cd311fe5bfcc4c791b7cdcb1fc3f2fdf0ff13b5b6b6526b4b1baf5ffc66699aea9bf8127173630bb534b39f564a4c4ae0b3fd86fa266aac6da484440fe5f7cea6b8f878caca4ba74cf6939b4e1939e9fc6483fd0d875904a03fb3e281d64446007a8e8c9feadcae30e1609d6666c8669475d50dd458d74875d58dc42eb2b39f869af67f7b923c7c66ddd2d4cacd5198249b75b2a5706eb4cc647f31de1e7df369d7d6b25f0dfa1793ceef9dcb978785c97b92dacd3ea74726b534b5f01381e4f4244a4e4dfafff6ed200540180602a0a72afdff83c5de45161641999b5092ca34b05470dbe758b7f6638ef5a9fd7af6dbd6d3697e6fddfc7defccbcf1bd80797e773a7e11c2ef92d98d000102040874048470c751170204081020100b08e1984c010102040810e80808e18ea32e0408102040201610c23199020204081020d01110c21d475d0810204080402c20846332050408102040a02320843b8eba102040800081584008c7640a081020408040474008771c75214080000102b1c009f0d85e2e8a834b040000000049454e44ae426082); +INSERT IGNORE INTO ORDINE (`id_ordine`, `anno`, `data_ordine`, `urgente`, `ragione_sociale`, `nome_reparto`, `id_dipartimento`, `codice`, `nome_nazione`) VALUES (1, 2020, '2020-12-13', TRUE, 'dottore', 'Falegnameria', 1, 'COD', 'Italia'); +INSERT IGNORE INTO RIGA_ORDINE (`id_prodotto`,`id_ordine`, `anno`, `nome_reparto`, `id_dipartimento`, `codice`, `nome_nazione`, `quantita`) VALUES (1, 1, 2020, 'Falegnameria', 1, 'COD', 'Italia', 1);[/comment] + +[comment]INSERT INTO CLIENTE VALUES ('dottore','PPPPPPP','ciao@example.com','08111111','mice','DFO383AFA','pippo','www.ciao.it','08113434','bakugo'); +INSERT IGNORE INTO TIPO_ORDINE (`id_tipo_ordine`, `nome_tipo_ordine`) VALUES (1,'fornitore'); +INSERT IGNORE INTO TIPO_ORDINE (`id_tipo_ordine`, `nome_tipo_ordine`) VALUES (2,'ignora') ; +INSERT IGNORE INTO PRODOTTO (`id_prodotto`, `created_by`, `created_date`, `last_modified_by`, `last_modified_date`, `descrizione_prodotto`, `prezzo_unitario`, `scheda_tecnica`) VALUES (1, 'anonymousUser', '2021-09-15 15:17:04.766', 'anonymousUser', '2021-09-15 15:17:04.766','Pentola in acciaio inox',14.50, 0x89504e470d0a1a0a0000000d49484452000001e1000001f90806000000b6cf86f80000825a744558746d7866696c65002533436d7866696c65253230686f73742533442532326170702e6469616772616d732e6e65742532322532306d6f646966696564253344253232323032312d30362d3134543133253341323225334131352e3530365a2532322532306167656e74253344253232352e302532302857696e646f77732532304e5425323031302e3025334225323057696e3634253342253230783634292532304170706c655765624b69742532463533372e3336253230284b48544d4c2532432532306c696b652532304765636b6f292532304368726f6d6525324639312e302e343437322e3130312532305361666172692532463533372e333625323225323065746167253344253232767a6e49774663496e59374134333047412d545525323225323076657273696f6e25334425323231342e372e37253232253230747970652533442532326465766963652532322533452533436469616772616d2532306964253344253232734e3869355a3476387363586a5653744a6c62582532322532306e616d65253344253232506167652d31253232253345374c315838253242504b665362386158527046584b34524534456b5968343430496b63694c79703325324652253246356c6a535a62733358314c33765857636d724f496445496a66376c30412532466e54796a58486449636a36552532425a486e374a77544b6a6a253242682532464a3851424559773676344149253242657645514c4866673238357972376664466642707a71796e3850517239483179724c5033397a3454494d37564b4e667a7559446e3266703876666a4d587a504f7825324665316b787448383736786925324638373862634e4b34253246667452763871573874636f685a42253246475a667a366c332532424d544e4d304c2532464f645045664625324639657961654d7332482532467179465525324242504b7a634f7725324650725748567a6541754c39515a646639346e25324677646c253246653745353735662532466d527547494a304e715758555575316b35763276577a7a412532462532464c374b567663727238583746543925324231343841706d414d676a456a474e627066465344663266454b4b3970324b54253242663732427425324625324247506d4d635125324257754a7925324636555a4d4b31675857777a3938692532463762774978397958394d48647825324235634c2532466e67533037253246584e70365250353534722532425058512532462532425943506d623579507a73505a5a4470594733616633736c70795a3478546348612532464a6645654b3565757659396738425a5632334a444f3877253246393649466c655a70436c35376d59636d25324636737a4359566a4f505437765a33667325324631426f33786538754d2532464a4437386279793964534566756e795a7a253246755350323467666b764225324259643477332532464766343373667845724450743956666c58496b5839486f74253246532532464c37337837253242463262665833377a253242332532424239386a663866377671487a4c374169253242567432506d7677315451453562726c6f6d625a363925324666594d6f782532464e6671496b377731683025324631497a636f6e777a4c4d6e54334253303477635a703825324637683446397a3565665066636e505a4d786e2532464b584f674276784877644664514365733725324666687925324258426467424268414345644f73782532463563335a61677147375a6d5025324263336a4d695968597638663042786a253246335a7a75386838253242253246784833324c386c3825324678384d345443674a414c253246363238682532464664777a6225324625324275684247714425324250253246667566495149302532464c636938496468253242477342515025324265253246332532424d2532466450356a253246344425324676395738442532465554712532465365666958547a35763156554e66365762796225324233414825324278436334343379596b4158627433316d506636494b5a33684f5a6467253246556d454b535643432532424163432532426d386925324246253242677a696a7839377a384e253246372532424e54507025324679706c4a7635445a674a54396825324662357325324250787757572532425637253246386664322532426339253246253246764e66736633587325324634446b337954632532466c62707630746325324671687a25324638644a3338507862395a6c4e376b7a25324264253246774c7575796a49777a54253242556b72253242566f333843647a4830333347582532466e745454524a2532467a317a6b763471354d504633784d367a4f307a3566546a4d53336b62717a357568622532424d2532466a75792532464f576178774173395139253246366e785a7a743878563777757739397937366257664162672532466a386a2532424225324648345625324266354925324666542532463931645034253242253242697a78764441672532424149386265505070307225324647426172396f2532466e253246316f54574d682532467a71643733634d36702532466c2532465171446651655939775474662532466a4e4334762532425938585065336a5a7125324239735825324261657a6b66706664376a2532464448253246366a7a3331502532466170662532424e322532462532464379507834555a58346449754b504f25324251716a7a587348644b6b393844636635364f5777727525324225324634576755504a34686a392532467554514d4c31394258742532466651584236507179375952422532426b356c6459753639684d354c4a5148624b7449486862374963504964557847593553564a373634775432626267306d6b384769667078516a4462532532465453787a74564c5656336e556e466e756f3966754f376f52784f394c585a4e6a3046414325324244344335684565524c376a4b7432776c3545614247786f624a68767125324669755a4634506c4e796638734457317a77363734384c36503777467770796c547568374971444a354d444f6f56784d633758513471674d3064584e4c666a47544a6453533273462532464d6a43655a486479366a5939314e6776535448765534753433594f75686f50545976496e39705079554a4176344c453630656f4c5a5544526765756e35695235513672253242733757466549456f6858507078667a5a4d764a55525655597532616a336b25324267364270484b6261445a5434477452556f565a517643486e793738796b3276502532424c5276732532424c6e4d47685437786454356363734d6f36543468753243524339626370792532426e467135726b253242664c4f4b586f38524d33735a7662466c75785a69754e7a7a37654546506455793370487243575a253246694f63583547504b714638753672735951454e31786f30613746566f7077485433364644654c74536e546c5572537053784c646a4d6f637562435963443774735472514c4b5a4135366e4e4d7739644772664272324871442532424f454c53473764673865674572506c68726d7357796c6851613077664f556f5225324243346c4370594352354c617932253246316c6f7947495236665077564d4764486d66665a356d496978727265253246785137512532424b6e3351546737454c55487a54533432253246425861544c4a7777624e2532427036594a48253246787276384d594d585a7559724235637858796c4857253246714641464e3531456d32414557647a4353796b625379797357625865453358414a61654570333566384d5a6225324265774a35253242337a427462467668356e72694d516a37557562766e6755756d38565a726c33253246716d367572514e654f556c304f6a4963576a4450433566624a375735324a6e346a546c557a5070686c5772356c47253242253246574734326e4325324665704f496475496c423045527258543839706c336b496f7a2532466548644a6d4245344f4830253246516c595552613852387236666d643149326e71554e494847564a4575467735563755253246504461466c36794945426b71656374427775434a45754b6c4837566c51743965766c563925324644794e4d33312532425970667236785937776348253246703267417935667a356b6b626e6c6b253242306577646357472532427461327a6272627536384a4d4f4c7a6a6b746b6f79564f5556374e6a697549667243586d7265576f426e563247253242446e7737587a52577a7952746f5535565a6831512532466c614e77312532464853714e43436931596779304274454453586e7a49396f64316a6f365955434f734d744f7836394c6576756d64666172516e374f5546356173416d2532422532464645512532465745563450713141784645672532426339737652487a414166347244336777786533435a62435164547667495849696d7170366c33614133726274726451736961674a5055547a7843585a346f78564e6233764731684e57523047652532426a5a754e54776c556a643073464e59366369793763496555386d6d6775524a5563766b786f6561326b7234474649483163464433354354463052253242375625324256456e706b2532427677356e6874656456794965695a4773584855346e785777364b324b4d7a595948664a56792532464f746b4b425a4c6658716254427a4e555a4d636458435059413136704e61546a3043554f6372346d334e594d66634e4f7a697471435377444c4a505634586956495250336b5a41593738476b443974493250416a6e3374696a6d436f456c4763776d616339686858784c494255497367594769675235417639525771334a25324638686a64574c74664a4770356d7264634c394e7875533978307549796b656d4467653372432532426b35473573637a505945526c6d4c4f6e305247342532425055417531783133326b475a6c386465253246344d647a4d594675382532464852325448714f464167724746486773566831673465757a624f6b394253543245656253354179576e3377585a777463457359634e68397041434f354b37724668353574794a796879617549784c47472532466a63434336505a6a7a5a39677a643372495666576a345057454372253246615763306b346e5168656246413958516d5943253242326c756341383667515548394f59685573436b31334f614f706f566a756625324239756950724772506e6462382532464264754f395a56506c4e6925324225324279566a253242333932457656736337253246466d253246794a66253242656361426139534a78596656346b6f3741324850765634484f5354444e56356d61414132785a7831527156336f375072326358575054426539704d25324264414737733144327878537665435a56682532463373786731716845596e51362532466d5655586c327041554c745a746f57757644667471377a44764e4a573671766e4b7547386378754379323936656b334a37514d4153694a384767554f384a625858324f74647169306a644273706c6e716c37347679327a34586b5230797053665837485471477a2532466134754a474733487875544d7a6179586c6a6e5337657a365038586f393052456a35336d75253242444f467334444e716a6447354d4c45686a544e6b596d707a4c394d7054523377627938792532426334532532426f463951685765253242373031704c4a56426a4e6951393357467a67584259456b3141566c2532424774374e666d6f61467649724e54564678337959554b7838483647567657346c5832304b6b357265594d6452576a636757626567753872787358626253376348326836704372426463724538485961513872713425324275622532425a386377253246346a4967614349644541694d32614e7a45554653626b4c572532466d7577736f45467148727268495163516f62515733314770652532426256346d5476497442545962316f36353730674e3847314f417a65552532425348446b6d4346764b58687264324844497076544b5952686d725566446b484a667642485471654856316f59436c666f51524851627a5a796f774973414e38457876434d3765325739517a47394f6d4564495947763976486f625a556b7332755a36714d574e524b32526a376b773659764765742532426b74476671645a6f6b49444d4849756c326658355a4c69435953706c78624e4d723168555a356b566e677473536e5243343563507035324c4e52727a6a724c4637535a484a704f4250416a724764386938456d656d5746527572746b7443326a59763559754c5030315436686a576b6a6867447a693955544f6e39386a7970664448657555253246412532424442624245655436444a4930306c63704c46454f79306f486f6a49493638793539493467734b766567426a4a745a48717472624b564974654771613049776b58625958784f5379716f4567507a66376b6e5445253246496d6b4d504b5539776b48466e734a544f44767451305945727641326d547847316c55665164756d6f3456347148394c5536327a654564777459394470327832546373444663416969416a6c4f72584653436f503677484a4c3572547a3438436250634f4e5a71334c7a6a32725067437870526569596b44653669644b4f6f4b334e4f425a4461566342417a6c5874456e614e7851556a394b5377542532466534626f6b356957395576705a4b4a59646a5969566e587669364c523153674c597a754644566a776c6d396c55343148654d495a74374133596f444d566473656f4d6e767470746f4d68587a7870456971334768306a624b6e6648795742627a495656305768694e6f4e6f426e38726d79586f72624a4b544b44776970713457706a364c62253246457455336b76636a62494d38776e7531736c4234493771544f365958425a715239463575414b4733576a4b58576b33327863433851544b5a72306d6959512532466b46694a68686159484f72543662505834727350685a6845685a394c4e523132452532466d4f7a4a3757366a526f6b617379325133654773516f496864685a4b6645594934356d34465971646a6941553563746235754b6173494e6b2532425343513764586772543244786941326b46746352634835764163684944537577416a677a41646d5756754937645a3355782532424f526562253242693559555431317364356a637a3147305442664f316f3944614f65596937574c544e53654f37436c34684675526455587638475a53786b64456a686a4457656432556c7347616f7459502532463164434a696458636950574d504a474776706145574b7451355a316f584b54556e38624a3934427354563356675271545265506f5646505243587a534d4c61695a785775706e616130706a4e597a74393070784c4f797133526b544e47467152425a53704c4b65466d74435164496c716e673950454d253246686f6b3768746346354234727072346a36685857444b384867656a4b774e4f5058734949364634564a556c5968633464494b6c6534453663552532426148614a69466c33544562464756774475777761756f58327957736c6f66585045544b734d25324252636d4e78527a5a593070566748634f7936527a385125324250703250665632783238723669636a3356733377415551764234534a497056584e62446c5439735a756c4b4b474b30697a4f61386e72623146784f4233384b6661635779436439483238546c253242505370343356346a64473472546e684d474b71757836396e7a65655650354e4d727a593963686c5a477569436532584a6250416d4b587865473053737679534a6648706777634f535655787176794366446a6f307643546c6a6f6c5965543042357566597868362532424e4d796f4e4d6d33574143356758415537345a676b6353313425324648345263673348504a796b5968456d4c6e51253246334f7155585177754b6a724e7a6247253242456b4d454a313679767a334a487a4f5951366657626b3647726847516763747a4c6c465743586825324235396162786e436467574d4b467a46466b48437442756a4d306971596332377438387775496c4578356572746830724142746d44397a6e784b69346d66766e737244727367513735434737346563253246537033795654374134354d6a763067703652253246646f6e7556674857356a456825324243343632752532464e6d373337253246527577704f6e426838725959574a56365151616d356c71322532426274367869346b3750253246586b7a6d58356c494b506f67647358384a684a686279517171693870356b6650426b583649637654586f58347035435a46643759646972464b786b6630744b6544314857664143306679557444675235565771796f4d4b6c79615a5649517a374c666a435a6775386250427170417165757573306858505a472532466d75684f387448517868622532466c313837496a363657775a577862364652574d4543666e566a302532466c52315950397742565832374c727a547070394879306b307a483671673947646c754f51674f4f454e6f56554d4453583959704a62336b7a5756462532424d494c72593556665247765751724a253242595a365847657371384277515178694e556c78504e42516b7458454159253242627039494a4545435a64474b34764f7542444d7358716c5a493769515046574d4572325a686c6b486f68795450467971355a6c5150786b747945695156615a4c5352773277644b3361364e38526c52715825324236726668514353556c5142696648374b564770636164764b566c69442532425a6b4b69654467594355253246253242674c4d5a67704732314c6e36697173474a57697550545330587251634f673469504d46757265343755497a317a3033423534306f302532463478354b78575138646b554c42524c643178556c555a586f672532464f526b536e61724442556b38565070763825324655716b316f774658786d4e4b55794b674c6231523552716b306f49636c30754a5850547139524d52704d546b6370383374667730636e666d33473878785144425255473878314d6338524e584e726b6c4a355934766b756c6a49667145374832393846696b71306c725548736f533862714b73724551626c5a324174393335676b7677526f414a6b4a7a77592532424e464959253242686a754244696f6d4e6e34656c564c74756433656b39525262526f593936616c62565330456a56655a6c53253242766d716d3559315446527a25324668346576574a6b574b5868477358585443534f624c3630494f62746e6c4e49564d70716e336125324638636173594277253242612532466776587351624a57764e6f37475658793843635038304c79656d4d5078766265654d517a6c6c6f534d4746764a36794a34523369735479587a316a6377394825324250484d616a694364657136514a58354d4a424632563163755a444257436451623169317a4c4375687642717738314d694d545364426d386255655255423058444d776c4a6d70674f7a48707347484b79666763563239756936706e734c4c6f3750543556586e4d6f51577355536c7244444a5663573234443554566b4e65377025324266304c5a34496d7671556b5239616b7774657925324231316f51594558316e46394b704b58336e4279703735755731626152425970347a4b553973784b46583166394d53774f31546c636b38714d6f5954533835253246564959767252416543573957374b4f4263516e6946474e4c4a73764266735652507a3664326d4d6179374168356331794e58484e4e4f755447725375364c4b416173536943564c6b374779457457327047636773706a7a544e5a53742532427a6a5243594e455a746c4c674a7a346a6e70546859306a6e5a6234253242305942583256443054734530727359784d4e51384a4771436b4858576d6a35687032654d42645a495368504c56566b6252354b6c677035537a436b47524e4b4f5a4276584f304c47486675584e34504a43594e556544504f527665517a7642644e7173326a754b6e724125324264322532423879562532464a2532426c6a476a3551253242474b4e4c51667755576f356f5675767044767853486f792532467369527a376b6273473130253242516b7825324630615470736373253242356c7168305271253246566837484e4f50624939796f6e4556515257657850766348614b306866777664383457365131694e7835315a4d39597a7543436254656e5244586c744e474c473653417655617a5653392532425a38785268354c32584c253242655968684c655a5573515337304b48624e693276574571486359717a664c686859376f395a774d526f6b69754747714a33663752553441304c4a7a39676c4d52707937535977554b67346259497a5a4b79764d50526764324f616b4941614575386c526a496b436366616270346f35446b4539666d646b473839557a73754d37764e316b6a424851636157475178535a6d4e66475669797578706e7a644a38457337586c447a38496e6a74574a72673735495133346b7233656f506561796366726f484b714278526748537943627161334144253242555a4d716b3761476855574c253242393556624f4e6c48324f4d6a4b426a6a6c626a39684f46534b546c6a6b4d4b41495664694456642532425a7379787339364646655a674d785771356e6866484b4151517379527663744c3568475351513349716e794545724f35706e25324275676f51744676712532466872614f37315959474573596446645163484179617a4578634c6e3865376f63493548454e6f397351447732576d4f674a567774576258437772504d64553042624d303043336d52776a5447346a6555315659717a6f616f50566558366673584c7655382532464425324230436f71756f704d326f624a6e3037724d63394d484a6e3950516e73714143594c2532426243434d47535348435a757133793149357078474542305a38396c4466574568725549754e6f544b74704f4d346e6b537a444b506e253242435a426f565930745a764263556161446c4a5a784b71754c316a544e695866364c33665044745a756d616c774770505968716c58565363754556692532467343736d6b6559744b3436574f73385a446232724f4c487425324632346d434f766e68426a56454b6b4e594f6b656d65393732716e3674375a64364256654c507438686f7671747739544a494944527837507a68494f7070566e7a6f50323858347975537a31253242686a30754e4431457633424971354c4d396436334b75586766314d4d6d3262703542363646784c5141466c4b3354624f4663674e372532427376576f5a66564358443343616f586e47433642627a6d3543697633575944644a48464d74306867364f634a413977356e33466c7043387438534e737565714d664578344458434f4f4f70435577253246762532426c6c384350464d55345147596e5152586943676b2532466571365952323363253242773974366635776a43653567484354535959496e51253242347668446d25324270577a6a476e4d3158323425324631446c465675786a39596462443253474647797958317530415155714344694c253246624167413969665946624c73313666713667776a37626e514b32583075355545415a706a417a5a6237474e36366362327a4479496f4442616875253242374f76334c48547625324238526b6459356a315543306f583468566772354665727a7a7550777a417833676c394252484f7948386b31253242335537644275554150666f59645574796970516368344b5537477671364e494a6e636e735a394c4d7445484c67646c5a4d454f427a7733614f6a3166444b645a6a2532466b7842334b49535350253242494e5334674d30517469574241304f394b5842487458316174343647786b6d4a79696f69687650586b564c253242494962637934456e304755536f6e33534e4a384b676a623325324273396e68393548544377633449775566646a79694c6e5357456d637170526e344d3052716750373965367245415061586174333458547a666d6a335a647137735965487a7665776b34516d7a6e64386c50336d703866354e79556c5952426f644457776e5a436e453659597a68634b6442414d543869446b586d734e304779454c63686963644675475a7a3961662532423949253246376656545a6a424b565956317376304867694c3957434e306a44506d454f514c4d79484d536b5669534e427934327650655570532532464435656571566a5925324243546425324235694c4859703049545425324242734d3733516146714e36775538356234354c664d7176684e78634b78633863586c6c5159454b5652454f4b7763546d4b664b6f4834697463786561396a797076624972644e4947466f59474b774e5069307a5062435a4b6a3479597052777978554f59317a546b7a5570476b55424754475a7a50414c48684e696e682532424d6249684e5845386b25324643546e4875534d362532466f69463950424b444a394558424b4e6d6d724b71654b7662784747327636494978537a733368747a43396f543056786d446c486f744375586232712532466a4b506b7574534e335366536a6f55386957687a496f6d565677736759614c6c37394e4d63636938624f546953786f4674626e634c6c6b655743514967324d7070553553434b614b62565a783025324252614e48784c4d685576536b35594b7076666451526a536e774b5645593871544a7852795875427349394625324247376174774c66427044766c385370746f464e454151715872453850686c49754765692532424d614533577444546374776e72386a736d5344526d45677577386856576b514337656833684b3937685575366c57656c74376f434852706559795377337446796737253242376478704176715a51666f776c7a54574b327836706261666344764b366878686d675872415763423472433659417025324269742532466b4e74414a517a496c467357594b59467544456956524765564c646c4c6a4f45357967356e6156744c4c304e507078744d4c54754d3336313364397432684c68636a4f76484a587a4a387756547851423455643230704b4c415a536558312532426f6670685139316f736c4e47367a726e796553555264253242564b7a626c6b5756357672353567355130453562734b4f484465467239365537676f7231544e594d513741253242596a75475353663654253246465661626d324439336b50684137396570795337336f4957597870714a30715776704d704c6c6e58432532466a77656e47617a775569614a345657765569427473734e4b42573035574442426c344776587a6a37554a64556b766925324263384e514f7773516a496d5576435733706341564a7847566e534f423841433565676b634b38647376766a496874484c696d49676f415a505a445543485239307a6e51676433516d43466f4b3567556c627a32414966694a7676553177253246696639695230716b4a78517366727a484f65726825324659253242464d52795a67576d524e6758353946425071566a4e5250386470494276385737506671626e6c796b42253246535225324225324270516178566279785352656c6b756f626872714270753939633959526258686a2532426c784c382532426774693365304b43516f68554330507a694358646c253242394671686350684437253242567a3475676771756f4969743770336558597050494d535a4545757758335832554c685171367749657967694c7a44593125324253644132614e6d6242596a2532426173253246754766665438452532462532467748505a67715256327442327058305361424153317456534767675a5630583367794c356e6b253242343353526f714f34566434734669436f354770396b6a5068574d7848784b5a754a78353877664f6939414f3674676a38583176564f4f44786a664c4549335a3970496672565451444f565747484e505755445261624850522532466f253242624d47765377437547447a7576774b77577569307759445732546337253242766371356f312532464c46313149496a71344138446d6e6159587832434431593662573736565168392532464d534d754e42576d4551253246416154324b394a3478454369593136337a39535031786468664e316f4e6f476a37564c7050564772334e4d416f76344d364f364c613742624f3161585668795530692532423137376578354e352532424d6939726a746f486b67447036523752766d485832684b4c746f4d71342532424a4e703734326b6f77456f4655697337392532427834432532426a6e79696339456f2532464738673242706f54625254792532425a694537304648644a253246714872485175354c7750253246634f55397334544e3372335769775338474b45466d734b7a4c3745667a712532467747443850616450786845415241737a4a7853654b5271524f25324674435453453655754566573565596876596c3541796b6735304b6e45304f494f356f504c2532425348757372654254636e7535746539486c7a3859456e79483150634d253242654449426137443261473464253246336d48713633585425324225324265253242317925324653626b523268664a433525324255746379385a493473447241363525324266764b6270726739317a464e5a6a506e25324669356f7034392532427576476e7a61695757743463706b345a64625563317268714142253242733168753662357070684b3325324645776a685050334659384e5048656449467938756266656c414e4b42536b5674384749766950647a6176634f56425a77424c6a516c54306c6a6d6e68776230356a716f7747356544575461724b4b7a6e796730376a4d796525324637493238786a79614f6e674e2532427a4470396b66325325324670315a253242704933486d317825324255654665343972663145562532424a504d6b6239323831253242595261797625324638504d65695376253246444a4b637a427832613639624d70304a567157625a35313141457478537877492532426d35653342497569396a38756d557650784556346259575654437966704e302532466f46566f3777472532467834486f53354b77425549424e333078253242634574764e71646359796b6a414325324230415973584b675447435574796a253246624178683146516f6f33526e6d45656c3331594771356d67616b3030424f666b54476966746c5730374276545a6559745a41716d33754f573262534335646b597369495a455877383234376c435259553053724c4a704a46682532424f306a6e46343673456f7869316f437259716f57545a5435626a4d4958354d46306b574a49624b41347a544a4475517378626558253242596f64495669394f31766171326c64435051676674467850627238617263765146652532464130675359704352634f484b4447536434703948303875317236383862253246395825324634436350535a48726530514e5673756f737575546b59716465676670414d715045706f7844656e744d25324645476c7a36756f50486575315a3764655266654d4d387a7a676e644b574272347a4667366b6e464e42484f7874324653764b56684f456a5233456d73733043704c7a645a4238443853366f594874377977374643785a466f4c73786f674a544a5a70315777394e50352532466b32713064483547784d616e4d78384b436e56316b434172766b4a654762666f70253242524a306b68777a6a676d70576677695831416b4a4b25324234554c693825324653776a73377146616266325a6d795a6645495a43386e585076764e59395668544c6b7777716d505932574b544861454e7970684e6c526a68436b767535593369586a7349566d59504f4c61736f4d6353726b4a46465359446e78596d566c68735655736f594b35725530394a6465484c4e6470396c664350707854686771474c44332532423176304465774a5679546b2532425949757a6b55416a675a55347448686425324275776250415370367764594d6755595076253246253242623034716b5a6539304e4749703158694d45796c65314946664643347839356768616d4c6e6c4b4d2532466a7a4156434936326c4650472532425354524336655165326b4d6435334f517a4b53546f69484a6d39615a6e497138614c564c53704225324656596e636656426d66366f4c414f7931326e75434768655858486c78756d676635362532425744727a714e2532426b446e746c775130396b3025324638717066717435786269614554727278794e3547327a36364b5148426f4d6c31524e74495478324346632532424152716b6c5a7062644670557754253246344a716b4a5256617075633056374a366a53526751253246653464616c65325833426c636725324265425266594330315764774877637659716c70704d36324166316156624530556c4d67675961753070336878576b48685631737825324272566a714a36464a34644551304d6c7241337879373157757a68556d6c4c485270504d57445569465669253246526a7943253242747230617a6559696649356d45524e6b624e784e504f6a4c61683153784b77314d5525324658434e694d4f496a6741376b77683150524f57596f492532423148475833253242565751697938685452253246544f36594b393375494b347059465056335061426e253242422532464d6b564750547a4151477a544e424f43445a3349646a4469313474744b6a2532425338304325324273425066724a667258552532424b6b6b79787a6e50386e3446625875396b5838594e566b67706654686b364d5865684d773365536837714a6253496c614543794174336d756d25324263715a426a6f4864475543545125324250253246513271704c3459486b4b6471644b304c634571733579697a493669463744686b7569716f414b546632633658456950617570326d726f6b6a4a73317645396a7a43594738736f78366a68253242376b7a726e615459503379566e77253242764b64494b556c5467724172374d576b7135446d676e494a62476f6a34366d4d754b65716a7650424f324a7041384a6b6a36446c786f617341613255634648745756336f516b445562415253716970394c6a59356964464542644c676b4c773148336c4f66765175576f346530497a476c6f6754675065334d6c707a4e6245324b4e7461304c596e4a355a6d437437765164746a7878554374506f5142484a5430706f34734d584e4e74426b4d67565962304474473555335246697856335854704c53636363567a476b683779734c61713772415578676b73387a7149644a626477666a665751694b4b6c717855253242753854454c787979644376343450304653726c705a455a68416151636534676a51253246414d37426c4f7751386731754b62776765345870594b445a704b793734305733454662764b59253246253242726d364754346d443159487253737450644f774c5059796e764d5945414a474b473358444768493873386a52584b4d4651776132674c4c397a7956334f6858493478344d43647143635473253246636e516e614d6a2532426678386d47762532427042674939515136334d6b4871334c4737636c627637687a25324635632532465a74346f637a4555613869647833706d724a6d65747738776e66536d2532426f4a4241796236364a7571596b253246414564467a306846484e653349364c35336237383247596a7871474f5444346d68666a32464a3633357439457870564637774b446f416739564a4d3776553439565146374c6c424f6650696a62724a51584b54784a6b7925324242754c796246484856717036736869684e48672532423364525043303056577673354e446e734f3479745431466c4948343953795a2532467158683144425430487039726825324236554a6a7773556648666c4a682532463762476b33734e737532324e7a386872453761394b65303874734c66767a6c52513377533131674e545173734868626166394a782532465753706d42527238575a436c68475463427278414677464a756941253242586c78704778454a67774b6e4d73586f364d676637364b6a584d6d39436661554c4a66736c73574863733762776261506d3536744f69367a6d43725825324277504e487358614459716b797474714e694f6c7235663769463067445048566e693837346d377a477a3245253242526b395965354825324643707270363361324f253242734e4f32636571395a70566478656849667a41596c73386f6c64655a7a6b6f7475716c5164334f553954716354615269596e615a78306725324672796f544e49585a6354594f5a436f726c61744e5334774b7130344b63384543306449574425324239777177597a6d796f56496c786d66504e4a696931436a6d4c3473622532465274516d746b3234764355316f6d763179697432334773726846507453727a5072756a45533463764870796370413250647975784f716c46514a7a67646d734678584d6a784e702532464d4175645736704a455561645a367336712532462532466454755570474b574b495745734b634350674b6d766d79716a6e736657646e63384c794b7378446478446a476436704d544d2532424f4a50363043744c54764a6d4a507a6a635342744a576d36794c30677078745a62336d6d4f3759733467647a556b554a79253246794241415075716f4d3168477139346c7174414d62477547623652477644716b6330357a43505776434f3565476173314469764662686235564f684e416f7a3753682532464d6348696a6246617549494a4644504b3335664753743473356b714c3257632532424a61756c794c634436754e586862253242726c7149487056514b33536c3679347141554b326847574a736d716a30354a696a5a4555624241797735414355364579576131685064676b4a5a4455455451687334505a584a334878374579724c695a4b4f6d3169797048697056634b53303644504d386c567669325065454c536a646e50645579596b6b434b6a6d31454f7054705161315a5a5a50326c5159564735253242494e55634a737261396f6f796d73626d4d5452726a514c516d75494667344e683025324269365a713265314c3855464b4a614a357779583261624f6a69374154616b6b2532465162756b745537323536415439696c715579414834664a305963376461424d37517344787a253242346a68686f6778504b63575370593441326742396458625252544362715a7968626843785378314876486e3230253242584e334e546b4a555639486d6348356125324649303671463436645737734f79414977704a3641686f74595a6d452532464a3665506825324678524b4a4c74765933626f596b355a59575561704367774b71674d763165436663646b615264514558627445625359344e434f444c6a4b71766a4156385a476e4e7a4f4d79325a4d3971416f574b7833734544734c484a45746b6d394c5a6425324276546b69446142526d5166726b35624d6b51376e3647416d675731253242466d66395766526c6d7a686c4753547a4d444a3372537a3865447a6c4a776a564474585a376d37253242617873666354316535556e34494d6e6c68755367626251777138553059635263472532424e677a556a68364f71447a374f303557413544486353466e71494f34477242306d2532424f5154746b574d33556e515767707678395937566d563865724131782532423748365767736d5467384149364f457643314a484b4663784c48594433454963693070566a6f483370344264514e25324271654833736854647758536e394a6641754a474a306d4a764e73374e3372784355305156334f71253242466a67736d613563384773675477387538487a37707634734e6a59336f79796447554f4c4f716e4b67496d7438344c62433578727565634357435772613232374d596d767a396e736d5368574433253246584243734450647950533345554f4463395351706666657931546648674e4c483741415032466b43426c625957304f6d4c46674a48726c395873787a4b79746968397869324d33597754364e6a4343457a5476337141253242304a31334648696e4e73647854524d3668723639656f6c3765424b7669554236425a686e42794e56393779737173424c356e4956367068414f546e51746e4278774a356a4557313077586b6738314572316d33684c425533615250776773596147646b484979514a72723544364e422532424833374f73436c33384665675025324254707052774348424b303735437236635a6743794c484b7530723779517561356d3663385a3952464b475a4d58506f4130796d34657864585a6c706362776d7252455153676d6835366645495425324625324653416d727852726a764f6858614279463566327153566b6b6556717525324652766d7168397567344c754f526a6b436e59457672617749364373595a4e6d62646648446b394a59572532426241776244526c64253242736f6c6353486f4b4e744a694a424252737936646c6a476631514c4e7a47374a3575494f72716f70537a6c364c7531697537414248476a31535178384561453454366a48664c32366230424d5173483541696e4f79543644416763594865384d57376a577734625733315a515453567a4a3156484b4f4a654438563965374f41587751774c62797761377445576259764d253242626e6f3959533648776e6d486c4d547645647248793557516a5a556f737775533025324675454830344d374158744f536b6f3667334f3174302532426c736a467367426a6e2532426a4e72354a396b4b61424c7264646341363668646a3663644272654f4e67564f392532426d25324248353455447a776d6c79534f6151655a72384b454a454864556268395539485671646c25324254543171516873456a4c537a794e25324231783249585642634e495654543043784a4c656e39525a654f7476776e6a4d385533496b796c564445564548304452616c6b6e474a6125324677344271456656676671756d72766d373142694b4c44464d49416d44764157503131707231734b586f787070573733494c51686b347730766b6d6f4535425454776f6e6449417976694a756a354d4943783561476b344e6b5470683771566e55766e253246534f4e6a75387254504e34594e7446497671253246425a5a44484a4e43574576253242646b556e3573754973486a7343445067534a554d6d5239516c4278366a6f5375314e4e4755577041344e6e4278614f45376d4f3359253242746264667a7957457645333445554f6c305873314e4225324663776865366d47664f4a596a69335141644e394f733766366b5a795041757535735072354668644b4563365a696b6b62617a2532466b4b587430657262524e4a6e516a67496e4750776b4b766a782532464d47764172436c3256317350694e6f37766a2532424831433578536756775149683368452532425a4163394d596d66415174634a4225324249464736253246346e7857484a5a704b6f395331253242354c332532425943745069377a703361365570462532467638373049456f676c6e7a4e36652532463544515a4d615767524b61654a47666d7a367150614c4b525837797452417037782532424f4f7061554652515a62794467554833484e644f4d4433674b78546554684c66794d3333486d3254534d446c4c36417372765772516752784b653551665164366a306859755a584f316334445158794279776847356a335041447556472532464b474154785041634d7079484b78526a6c4e71456a776b484e50427643336925324650346164646130464c6542253242667a7142456f616c67436562492532427030696c6758253242325172513142493462613277366432695677595625324247444a78684939316a354425324270445130413674577a74596179325974586737706a52437525324637526d5a466e3177466d49744d4162646d59667a726f7354347676654a534c2532427477716d453659354f5134795862253242696e363641512532425344304347742532426a474e6b705a464244534577646c756d48733948477849525a65615a5a746a584a456d676556516d51733872645a4139584338324e4f52586551634c414d597a56554c6368364546594476383741506825324661357735566a50583974727957306c3450752532424473616c5233436851355a39556b4d334f48584b71464b6233376453634e4f77346e58777661784763643651786b65376c397247646678364e446844596832565a7978576d5164703665437279537938474950514a7a4f30594c6c4c31445557757a34454c634e57576677526b324c556a534e4f253242546f2532466f6470326b58686654474b516d38707956696870253242785337516b746336423032577a664b6b45493641467a7a7a37414a3679725673754170475839356968716b355142736e5237633754313663716a583469655150554f4d676a4f324c66424a5a794949664a61534c3938253242777a62454c6766757675504b66376b464a4a397455626165656d464b593133624f6d3361313073556f6c33566c35587a4c714932676b6d3536516379667a36725759355554696f5a6d326e7a436b537569317a334e432532426b59515832524965676d5a717a4625324258455253526861684b58614c354776645938436e4967385534543774377236724a4e4a57452532423149417251547846447248483641486d474a4a67526853424f2532462532423364634637434b456137686e5473337137454c6a79513253776f4f7a49523156756a6c72686f6b4b44314e78354e4325324279515a7368306771467665555a447844467a4e4e3441554e623333347a6c71453153336f2532427870745954355a6a6c6b50374469633338464c6577675645344c46707048714c634c42537672542532464d4b6d4d47386b7135333425324638304833614c416a55586856504632546c305034676639667445447375744c6f357053704b67417156454b6c7778344366774f43414b46743571364338365451755658354e686e4435705531387275306175306a253242316e755575376d675425324230504a506e4b656a5745705843632532467274734a504550674f68436872597630614b4434705875636c436a6e4a47776a6b675264764a253242717567774458596d6434486435556164484e4b706a33536c594a76616134716c72443279474e54314d73792532423639566e4c714a324f4c73464a72786d684d65666d534525324648384f7752524f327870375a324956703471563830513941727355794a743158525a734f476b353874356e5a754962554679734a4d4c782532427133614d4c7761416d4344753735714b696c44546f4a7825324636336747785453502532463779675357797777595579474a6f354170536e494a5a6566453049727668706e7454714f2532427965423376253242415166386e6f4866384832446538663879574454356677495725324662386633557a253246583446757072382532464a2532464825324656374e51354c253246627a306e3838664e4c58367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a3646367625324278617225324636597456253246324c5676316a314c316239693158253246597457253246575055765676324c566639693162395939533957253246597456253246324c562532462532465446716e25324278366c25324273253242686572253246735771253246784d517466682532464e3677363958253246346e253246416d25324635762532464539347725324648384679763250312532467a433350253246586c524b48253246747642334a45767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a44334c387a394333502532467774792532464d5063767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a443350333168376c2532425925324278666d2532466f57356632487558356a37462532426225324268626c253246596535666d5073583576364675583968376c2532425925324278666d2532466f57356632487558356a37462532426225324268626e2532463651747a253246384c63767a44334c387a394333502532467774792532464d5063767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a44334c387a394333502532463078666d2532466b253242437565506f667a65594f25324633253246786a2532464a44755025324673326a31253246364e6764667825324644465a6e7a46754c49436c65386a302532422532467836582532466f253246513637253242773676646458447341494e6c253246414a68653576767a47734162736d4d25324256253246656138766d7678383225324644503650676578486e76336d502532467750414e52646c575525324673765250554371592532424675594f6f4c25324276564a683244253246514b754b253246544b7651253246366468366b346e2532463025324644314f39675a3858467638445538253242624e4d2532466c7831755a4f33613546645877616b5244304a3065614b674b5769553178734e444b646a6e703564253246745a6849453870545031486c304778746156436954374876356e573464434c66705453583469253246703137515839366a486b503230703448614166304f784e36586935497641344450343047583630393879572532463736646466384539564e4d2532426765753957795a517835706548504a5772586468754e726a614a695534685169424a3935386943636f784f7657424558536d6a38496e363263526d72656a59544e4e663452484d4e78634c423048754237694f654f64557a523662414a5878504a4f65796d25324658764d306568463073724734414f395a354d52506c346b78345131625154584b473046335a642532424525324249357437346738786261596b6e253246656d6858426a72397837346f3572775365376d74514246706a67774b31326754636a564b7644563351315152396a4b7a323968527a3575305677423838364d55366575376a6d74576c57375177576d5939564e78253246723730696a6d57707077775139374b74387758772532424b797a3725324673623759304d4c31505853612532467a6f4d717256743435416266613034784a79486c4c5a696f3934536e4f4d366c7634346a4444794d675676563158646b486c534d466955436f79527353573933422532465338537044774e5850496437704637544869495a37426b59766f50615a30553775496c7a77414c55514c4f366c485a65354a597561554539547650306b7842726458686862385436514242394462456f546a6a6b33624225324247764230675542575334785a68614e66686a7238307150547557554e39692532425855704f7959703050584f43645543676873645771396d61554d4e51556e716b30425243784e696f7525324639383563575553253246675448716e41696e4a4865646c504e584270336c61384425324245444f344c366d6961584437464250736a4436336f3355534d766e56586271564232676b5837577278786d6d4d554d6470785772336d446f73545079382532464e5031323943356657356a4743524c52393925324641645a512532462532463675413634425350656b576f4346557950384758552532426d72656a3835306b4355423350436f4a4b334159706b554c6d364c627a7a5968793546346f3944446371483164253246576d65736463306e68383373384872545368526532386e5736326a58744556347765315564426951354e4c444a444130414a6742253242703078386563534334545352655962704b516b70504665436d795725324272576258794176736f76422532427a574549636e3450347941665547776c49794a6c55514d67304e716a52347a794a476542737a55657554354548774d7153503864694169735634544c69666c545957386b566c377a6d445838416553503448704a743653412532464b6e6461507951784755336942734f61456b47776f6756317766576c54632532426d54765241304d4d4432397a3336594154736a41514a34647631586b716f427059443731456b71774e76755043526541537931786462374f5772527670592532464e48757a4447784559636351592532467561494a5859704f44313538764c396d306a786c504d666230795378343967504649253242685045335a5772564e46734248614451465277706b52616675587150744e3153416747634b6c346654723375584e6e4679687356316569497147654b4e4b6b764a53587934576661695242707425324277665a7531646d54536c6c426f67433758495158426b614b7a627663695938417735385563576a6f775439327148417948656a35726a66636125324267724d51484e683631374b766f4a432532424f49517a5a3361397474714f2532424d5a6e764a2532466325324225324259706c4c634c445a62674f316b3178374c6b45253242776c325244666b4a765472717a6d335538587047444d45506b324358487735467659754142325859424f64685051426f7936416a57547650364a645632787366335a34704d754345746e7773554d336774646b526279664d314a65486a5a6156594f515949744e6c4c31337a253246436e7842364152726f7932377368505666523151614e663074586966554b626e47344a6c314f69646f323650526b73426b347472773946557a43357a396641564f714537337333316d7a46777049356e713935593355744e7859476177656c4d453666764842253246476c633651716f534a7348504936776e46635445353057464f7a4e754f7578724665253242552532425750516477626a656f6d377976636e32586c76394e7a3855306c41666a315749692532422532463868447363475158636449673279515866543137377a484675696138253246425a744f696f57496978354b7557424b625564356573376b447564657a2532465a68464d684a5a78676d716b477858576955253246637977684d652532465479594566253242636264636533477273383852684c5025324644667970316a4356547168347a25324636444b6f4e32614c4c42746e31424e6e586575524b4e436d2532464136556d594e764a7a6f3643537a6648494f354e466c75534f723351344b546d424832756a79424a787273363174517575794861716a734c7a68475a6b6e574958753258676b315a526b7554724136356a2532466c4b6b51646a697453366f34784825324633564539716469317336306433754c6c31474e34576f735164616d476f3053626559253246253246696e424c6a70516325324677417379504638694b72305164376330695978325659614a467a4c41546638674e7543574d5333636e2532464d503372557a61714167794b4a6e32484d7334746e7873676c656351253246704e72472532464861646a66575461657079646362363742644b463830562532424c49653337484e356674774c6e78576e72766342646425324632574f3738726b7158253246326a58696b6c6479765a314a685363316e2532426874313872333432586f47624f6c567a44506d6c3467685a4c655a6f347a746a444654717753374335777536524e4e694b7044796456564a704546375538644d656d39526e4632734f364c7170677a6347717377787768526e43786c4d5a664b67617748784957673959357a6c6e253242345352432532423242446c31793856647075333571553150435742335062683352513672572532466779664b77426531445a3939464b34694338393345355a644264683443465568716f356e654d664c386a7736315471327a6a6162504b4a474c55462532424525324256253242547a4776536d2532425541397a685a51695a6f304e6e616558664f6635325536694f4e25324632417868734e4a377664615238546c646f69345062484d4679787250554447656a253242565432516c464475376d38723663756b2532464a49324d71253242484355684448253242614c304844364d5231383671636e32436e2532425268703269503141334d253246504852744f3974654a6a314a52453477334f6e7a72694d784635666e786d55684d71713271376f3952344e58754c6555574737654b646c594a76416d45547a3053534e30253242694478306b556234413949414a6a586b744e576379513736486f65494b565878253246696342693767486e6a765578657a4a66494c55465762307644694a7559656475374a447868707239475a614a735a763255753472377834457539714d696f4d67455079786b3265377a6c624b4f556f6c56347125324676435769306f78636b557142563764764a6f7051706567634c307669387064567146364537477959554e5a747234414a4a67336969513037715374334174474454396c524e54356b5052616731784b717625324252547a5a38486f30346b76544348667a466c346a505862664d6c76705330726b5539324a6b3151577a6a486c4e54695a5338534a46384725324625324253783859373869637648504a4147695165675732566f596b4f6f534f5632397563424b654a303665794f4e5678735677346d6f5836646e68474a454e677a6572345a446b455a4f355445754845746b35534133672532424537624746796330436b57365479785335394361305245452532425971786e4b7165435879584b507a67527970796c725a6a4c7079652532466265516d6a65365275374c3442456b746d3731323473654473726a7234316725324665736a515757253242506172464d6a33495a77384c745364534c4c4a663259315137466f346778575070394a4e6645797354783151387a34396338756f54472532426a3346646b537337354d784131514d7a5435496e32387951597548345347474c6f3657795a72523451544f4d734747706433726e4b417159665534314e74395056366158556e36595165646e3030463665706542417337727841384633253246524b4d637158354b5161716a7676332532463276754f5a636d68354c7176305659426235594143743537564f336776546346344f7546577a326159417948306f54496f6268675233664536336f6f344a724d764f656b51253246414b32694663577639534b47766f34663673376d78584750306271665172787425324655657937504539346f654f74634f6247366157532532465835594b5465624d32426d706d39727872776a745533636a6d7a667a37627a43574975314c253242666f746e6a696d253246524d73553359397855325868444c676d4b376750384c744f7474534f4f386858337a4f4f5555375279316e50577256253246775959384b6e434f5472305a54756d736c436d6246516836757972316f7963774d6234614e324a62345473432532427145506c5525324246555636564e253242596b424678737652685471726d626f7a39306470374b4d6d253242536757773838736846626d3769333141647556672532424d63746b74686e5a345a6c6c326645334b346d617061746b7a39526e6c576c356d37564c61466c704d4c253242646f614d756151624f654b593337473954577a4e364e253246566a7850546c754c416443586c376268337579486725324232627a7867253246563368756a506c346d526961253242703657713242253242434c5639306e695a696f4834624b344e4f4455306a4255253242614863384d71757a6d36744474346d4856383056304f25324634537a357837457a476a4f6532773066774a396369643371557175426470383968626335666d7557507a6b744b774c4a71663574456d4a306151384564677a496142534c47394f306b4639553838455a677a543143363932567164564f5a5a64525263303745725235795a5769326330553774397770766e4a6979564d6458253242736473646e4a732532463854644d46336544696a533044536531596269756a316d646e553134717865747369644e666e51627a46524b58454631486456784d596a713770595561764942694c47773251253242304d726e424551684973645a53356e253246546a7a385069794c6f756f51253242465643777242325277717577634a6b4c54567750596d535269253242624a76636f504c37685539784a73506d5a37505832574b7677776f6c564c334b345a6162462532424d683356646f4143455255674e77737366646c4e74553679527647523830516a3655544865506525324238716e52366f3447306f5555764f5863374c7248554d4c6f3249424f4d636f4f756831533252334e724474415856756c597659344c38717665303759377553357a2532463653634b38416c693853696744455925324633624d6d6f34454b6845746b4138334563736d736a76575056796c383550445246566b4a644255513456713671394d77586447324668776850316f755846446f3231507975755a50344b4a6a4a4a5764464a4e735142696f6e5864427a59646c54594d6a596a5a744b506276536e75347670786651634f477a75385a5a4339253242477a754c4b553664593733693351303879543570764d65744d71565337576d6f4b7745363836796e784c37766a47475446323569773355316874253242746837517732713571794b747a4339375877792532466d6d48414b725865704636446a3663583749526c357468642532427259476d3752316d346d726b6e2532424d7157443332455339714a63622532423438785a696b41576d596d33597938746d68523855774d4c5a6a5125324236586639576f546a695457647a6a694d71516b63694c5464504755546c51334739524c32373432334e66455554336d5a314d4651415a4f50746f6c4d78343155366843646d6961442532464f794a4d6d316d5352434355684c75666e566c427968415670464f644b6a4e4e37677171653335545650764575477559733935786a47702532424a4f6c43566e4a37515644614761615349596b7361655558445a74506737734b7331614237626e50455a5679556d433631376e545a77453753546b66567159513969345930695a4a504f664b62415264466557765239624d35346a6b7a3145555248344c39695558335a53305678664d535a63452532465a6a736479645149784f63456b5852585632644a4a4f6c455a79696d73754231477a423647306834704752426855573257374a7052457947776a71626c7569253242615277474a3435314969455335796b4c3279334377794c5734653252253242392532426a55733469686d4a6a4578356b4a35717979463531467a50574f46526d494547436f6f394e7a7047527448384e4171342532466b7469253242612532465154636839496136414f516d58757a6d317453703355564a6c467a6e574265744e33704d57766d48514c4a456971474d4a66577465677642365876434a3525324262656f42586a6e35786c797a5a4379315050694d7a536a75323257636b5377774c3261336a5a666b7866754857525759755a64437333436c32624f52466375323238584652794e716f58774456755a4e65585a42735557323639646570735451354a666a386c684164377925324630323767454e4351574a6171626b3637645567337925324674714238555a6955783531796a4944456e6d31594939506367506d587a4835554f54394c536857655775634a71624f59253246787a4774385a2532425a337a4c763348373674476f31346f6d4a4e754b385036453479383032313841325837444e463973714c556a6662774e373168614146477667484957697141556b433879796f6d714f4725324655626756346233314d4d747857423530356a616c59783878714678776c72377936487265663756304652533076377452433725324673467a487930564f6f56534e4e36767a773941545175434d7348723156306256334176564b676d3663444662765261384f4d2532424651534f374f6277794867614844636f4a6b734a6c544f6751357148344f454a6f5249756830467147745731797773536e6442345070703075587379644879654358334264316925324647747631545a774f644e6a6d4357564c49466c78663576333250657a755333446a61427a5a544e67344467706674637734714f725949346637515470724f4653526376656f334470354f6525324634445051646c4f4d4b566a4f5a7439433842466e7370425951635857345a58714d45315867516b4c4773477465556c436d72485a7479367a426454466a6f6768456157586c504661487670644b7a4a47687974615a34464a4b493173746a7a75483950367539546165566c63727a536549595251762532425968464a49396b503863525a76534433526839745356474d63775331767076357a626d6841784f6a55253242516b6533253242634939377a616269714a416a542532464a61363675524d4653797342513546364152496c376f465050486b5054324f3175253242456c4849747349486e2532464a48756a7a7a597a36494759333368314163334b4e496e38506c6f4f62393773756d71764c714474356a2532464642784b4a7575714b6b46414d72633553734f456d77456e4150533471557141316c49726d71312532424d4f4e4f767764367a3254664d584f572532464872564251475351363477665530625465383035704a69495470684c5a5333526730413957574e636e4f6f444b534b3231535a6a54753966427863316b4f5a304b48623132704850762532425a66515443336e4f3747747a344c775a6b3625324242424f355966327164712532425a4a3969466a423630374a596d616e4331745039645337324825324243635a6a7578613339743342444e744c344561505a574e724842396c493034787272387447567a564f5a53477039426f686a796d4242476c7478684a424e6d6e76347a6d4839667a36462532464452656f782532465364525269526253745a3525324272596e47753634435a5249535177794d642532424e51665271417869634b5764794830483557556453636337594968737a48326b434456425a565935414967504d5847374d36754e44597063726c45463173784f514a787545545057655a627925324236784a4c78766d3233317876593464456b2532426e4c253246627249456870574e714c6a37757278506c6a654b67695845466a55726f71746a4e677936586275596f496b72744676477a314c575a43356c516d355966795352504c576c31655039726e58797a3241493347537a6a504277253242636f596e796647594c41414a467a506d773072696e66546b316551505a396c516a4367673859474b52444a63656e39562532466f69517a70655a25324670794c543278796d79494965464f314b5a6a694651534741466c6d792532426e36253246574678504a48586c53556a6754786642726944366176487a4a444175647368637832537a726e30766333344b4e2532466d6748536b6356614759426c72434939364f777871306938787a4f486d44677742735148765072763966333774356c5961624a79344f44796e444f4b536f7a6b6f4374574a6e38525978453734506a53767646385964544f6f7566783369545655685941682532425a25324642465a75646951617159556137464f79746769347743253246455235627544684f526d50487436687872634953367a76684852536a4b53794869675453397758333643344c514a32724277316e32645045634e25324243454a494143637141615a394754657425324661644e6c35333251513639745325324234436a25324644536b524f624c584e4f3867756c25324271427a4a7342544f38253246554c474956667a6c4a3972416e324f75474b4b34666f323265764333374f73516d345563583053486d733963534d6b6f253242612532466644583172674e4b684136494456422532423064584c4a52794d58696932577941306f67472532465138734b414f554969315972486b71434f5747716b567a5531764a33536f355a65434a45653376626332397167716d4e594b4841623841307a6f424342374453637463713341314d475a586c41676c794b6e6449657878734436685577553770506d737448534c5968424362467676487925324265396b58253242303137756f2532464473324d594668736b784c4838356d577a747844424a697833766d52695a64477150424536544a4225324237466c594253353264346a6f3259743446253246624543556f613858374572475a526e36455558476b5742562532464239746a58796144476c5432614d4a77463146664f253242797564594a6759694676514a2532463346374c674f2532423735486d314b64506b346a68344a6e6651525025324274596c43636c79786237345134644e63366f386d7a72706c43366b697759253242536d596c51516d683050525939376b31526a6b315339253242516232336b796e536e3277433838577a364c67506c4854307a6125324653525756304c56624c733649325545716f797a4d56476371366d7158694e25324663536869466442342532466859506453727173776452376552384d595356416a644d777033446f444b7438634e5770786a3371444c757675746d394c684c3755716d65736853515933743646637538586d253246436c6b5a686e675132427439306f697469707876424e466268312532426a534742564a414943535a68756e78253246756a717a51386432514364544f6b675a4c634832363075624a4341517852783155627237526742466945716c733642354d783545794e4d6939684c6f7a504179374b554e5036705a5a356c654f784b3136543431444c2532466d47646350376830516169765a6a4f424845794770566249543053385432355159793725324231546b4e374b69644e65414f57323871736b66786d597825324270446678714f6731454d64646e58775648414c484d25324625324645764b7258253246654c4251676a6938427431522532463166377a494767486e667539445773644a3074576568504271633825324625324251704539563171394e3754786751522532464841305857674f466b6b45357750386d456759304d465736467458764c4c6f732532464a7a663154666270765677253242626730515745624341316f4841253242364a75575639305649666b576d646c5a4b56336134567352703244476f414630497543704e4763644a76556d525053595a4d466850567153686c57492532463738536c6e4242785a4b6a6a727879705a4b7a37524d48744b4c75553041694b473934516364524872534a524436644d4c76504748775138735877253246586d7a4c54413066534b623041716854623948466675347364477a45567942766b794f587532742532465378334e76576c32755778375131664c4f6b306c4c79497a302532466e3738785574253242642532427a367a66315a686b53754e7a6b734e2532467679704a4164734c356b4c386f7a4b426339715857696131566e6139664d74534267417a4f50584b70736d316e543569485771644c25324631456c4554645a353941616138754447714b4c5a664537446f794a42356f6b553954514a25324232253242617131594f64744b4b4f504a4c7056365976344a61556e4b5a345038394c5154506158305734253242717765747874375131685753566e46437172686e253242384e314e4873566371577a3936496c326c694134567769486e6f76366539557931344c5673592532464c7142484273393138394f6d563161516233655958537867456b654e31617451763272386c3665657938564a6454504769365048506a34495757253246436e4d34537a495641366c6837353761534d776b5132532532467a586b7a6253446c4964586f78765438686e34253242415766723855644163334a796e6e47685941544439316e587546364e38586e796c53655425324665776f55535934714f30253246783554673530773148306e676b3856676e76384c524748567a253242794b5966324656596f6237665473486f467a55487a574b51564a31566f424a463638714b4c5a69253242574d7a6c3246666d756d545a756f50314b715643746250574f31396d33766e7430746674387148776d6a663172517a3754725147594456697061747a795a44645634253246706b4c485966506d5137435659575550664a74253246475a4b663445685052354e57523870644825324656253246696749387a38514b6e664a5a253242253242755277253246675a3135787031663373324d566b68253246474d793459584b7369553859704a556c6e534834627a36714e765435687a31694254497035306c6d506c4c58397570486658253246504349746e383330253246377337667349366e48745439507956586f305134424f313666527750525225324638395343436f373525324269624d6876635925324668587a30692532467371593258653753513744796177447925324241444c6d4c6c4d50704c6754624437504a5877436150526e34586f34376925324262364532322532467a7857496c4d446f5a6e396f4d77797562347643436e78764c68685a6434786b7078253246354d4b73653338635430253242336c38616a65306125324675613668714758533659744e6f3975635468586551305348583145453052596d5373596c44624f4533693663494256385a453356752532423571684137794d344c364246366a566c54342532423054377268737849306b43475567706670786e487976724f375377517771762532467350787a545a6341495a6a6c49746d41506b4e72424636787625324652496c6a73482532464a5a6d34646442384b3157724b6c7531784847572532427962443144676239537933455330417834775765443673546e435076507775335155596f5349355777782532424136615a47364c6548487769592532423373555542456f6431557052796f71634a4d4d50594f514f665a576b4979733645674d3425324248635625324651425a466d64504563696336566f68774c4a446a4439424d386541343279734846696d4138663959776a42316e5858466c462532463943706844417a33483038686642796775666874705965766e6161735a3038694642496a76476777774853314c436444444f4552647263726e7a44624b39615453633858354f4766656b504b6a7547764a5675545a645368696939783525324668395957475033344a624c3274586b79684d7948743725324669754f576c34414e436f7a44684a537264344a4c6e4177794f58433042425238646835415555744434577831376839434c64517639474263376c63523643457a4d59443571394b6646427376674169434c766a7255446c6f3744316e3975527a4350585771464374306b42354c33543277324153384b4d7a6951253242683746327642564e4d54784b4f3632592532467136707a52473453774e365934587071717664726a3674526d7936746d5269656632344b4977614777452532425a325450423056414e746a31474a476d6b6b3541307531574668253246765656336a373746344d58354634354e534b755925324675616f644165414d54583634504b514c687279693837455142253242333772793756596f7025324631515076615a4a515276766e507767473261437933576e584c3355507578495071485a384752394a466c51454e58565055514f494865584c765255742532464b64774b43627a55253246377247717561627353415a466832466b50766a6f4162614b44474a786262574561755330685368337a3847644b6c387434703256323668356d54415843253246672532466e684d32346f6a4762253242724b703773753061464271393674647231326c6d3249654e713668376d7972426f686c33537778713430477a7a73617a6b726735796b3738666749553578734e764538516f5a4a7445616773314f76393034253246396d7a536278456b31304572573834593238584a614c33694478656b43584251775335324a4a253242746a70336c647736766d6973466d7678436b3265703370253246532532467a35617971643854444a3772687a5a5a4525324670485969316b366259496f4b744330596a6d723170253242656c6a3136555239543731327335676b704556785372725064344846356f7058764c7442676d315861253242646c396b4d444562314f477a437a4b6a72357025324667324f304c556d4b546e466e4b766575774575746c6a4e4970577876763569307a642532466e454457366e336359684668355232567337475356253246576b477068626f53614b79434e3079575538376f32427a594e30553555313461453454253246766e755052624346614261587863636d63496f395a3767367532764c253242716d695661497168526d6d5478454c6278386f58664267535a7a4245524d646a69584a3236314f6b584f643973716d6a47304362623647687741764a70437137716b5155494667324c6a4530616d653430746e3644716c375a70766d4b54704e6d4f356a4b64424d7535684c64354948665a44595a62446f31506c776d7052455539646642417746644e467630587078483364786f7157426b25324279446578547a525342306e433468587442374c674e41637144743839367a524f397865723649697063376b756f7a4d455678356439783141316249554673556e743834326154775134326d43324b57764d547941496970766d72784138765739623766723063434a48765145786c3176564f785972576968347659705546744942704a4f7954666159364f4b552532464d6a71373078414b35635142434a705479614f54473161725273797a6f565653763858687025324633396162526d25324659776d676c4b3078253246573637724a73433356446f7656477751733058374149775146554d565638723561346b5579616570764f486330655a45475847634550643247326b6369713874514a334653787448326c4c504f644b7076304c54444b736c3858253242746c3162547565346625324268767151476f6f4d4d76504f474a715a38664c724236352532426f72653577666d47444825324230342532424d545a4344494e526e4e474e79316e59253246335453566e724e637450494c4147626f45253246395249546c45444f6d626c253242385a44654256436d6d6f594d2532464f566a7a453750473561464d3875704c5625324670683355634679766e35306d6a4c583871504d464262484f7a356d4b733771253242637442464f6a6f5a35664142717a6d704763546b446e7a4b506931716b56366e5763485279717356557a45335a25324676757955376d636a65377a42473857253242664b3254483345536a316c2532464d434e505866626b6e3067644b756b4d77636c465463624e4d7265384c467861363243673056544b374d51567853334d57416a59364225324246434e536f32344442696f2532464e497672626e5163364a765242695042423041353734584d566a7344545a774b35484d3833667367677a55706178494c374954387a6e5a4177417775547436477525324671466974586825324241584b627a426430675975253242644d444138384d4d343057665667414661696a694a5665383558253242454f594d46575436553144584d49426b38435376524a416538764f6f5663514e4a474e3462536858416c253246587531526d5a465a427a756565346b6d37656f416c3238722532466d4e253242447267546c4f306a78346f784b4566424c5047695a6676384c7076675641634b79704b4c71763438445a514a31374242335a3930576a3930465633253246674c3152535925324679344832714c6f2532424231522532426c6242646b597643366a725578426a754f6b45614b3269784432722532464a7169494b505179487235716e415968515269364c6a7a6764586737735235397577393659545525324265424d34614d614158704a696a666246423456575169324a7743556a6f557278646f6f6942636550564a677439253242783663373067514734535325324263394178424f353662436225324266476c625638306256734a32504c613652253246783125324643582532466f4139513557615136437a6f7257674c25324668586164564e716d367567794b4c6b4e5a42253242566e34512532424a4e6162576d44783279554f456c57784e6e4d50706a6266655a7742575863452532464c4e7535614b49746a514e4c537939655551527375694664622532467a744351736d513876376f55516d6a3948616a58253246787469453676674d517645796b4d6e456238674b722532424b34387152326d4c7546787432306b332532427651636c386e45427565304e37346c53794f6f253246464b387573756a56424c6d534945323071546457644b4f687a47467866737a4c6348506b437765704b4f645342684c4333305a6464674a61656244465564455735724a2532466d4b397049427458785a4367416c737048565032505862355625324267647975476657735163584e596751334b6233584250703073253246356c59676a4978325a76584b4c54374968487356324b6444304832624a64364c4f3963596c4847686a4b4b33397646664b506966424171566b6b346a4b644676304663533943744e4c37456f4873666525324262722532466166514839324f50435071394b62726c46775078253246737137797666577165795742764f436a4125324675634e75466e4d253246687245614f6b564c454c4f696b7a7752642532424c483133526f746830743566597730426425324251326c624b746d25324647755a45396a584c3854394f46394f615139677525324251476b54496352544d7952615933666f7748566c7a63466561466e646a4d386d59374e546c71426359357769614a706f6b4a6e6d7a776451552532427736594f444d5834734b74732532427358785948253246555673767062556a4544566646717425324276694879487055556741253246447554632532425a6352784d774e473552452532464e626f6e754466697330616e587572315a5347347a424e487945416477526f425225324255586474326f45447a3453354d4e6767763775387338647673326c315062466b44476a6b6f624f63557a25324255614e3241532532426a5964326b46615a766c3559665a4d79525a324a5759415976787353397443343725324677654e31654b576a634a374562675450654f35343069476c55336956794e5a784e525165414125324668537349534551435273564774393165576a6b7a78544d386b54797a463656334d486e63546c76534b6f6e376561636b483753765555563045704433773042484a4276753466693143636d42614e467058644672647679776254336b666e71715a304156253246584a6d6f4541665a413150772532424a66513448794b5a7472445359374b6b4c467a253246366236416674253246466c794c73396451736d756149714f5879504563624e72656675394d472532466f673363766a497a67495469333349422532464c7a517a786a6f57466a63624959426777566d45546f534c446b727a775433675a32522532463764634f65715562556649253242685834757639795a7772447064614c784f75707a393453476a726637673458476d7a5074646e75517943433949334c374a4c656772774e672532424d754a4f395234347970577a7925324662624151324a5338654b773849743237766748464437586479365a736765554359714c524674784d4954685332715834654f52744e594f48304c30576a686b674141617325324667616648686848334f494150467358794b75796c3935317a72327725324269343662443925324279743468446657334444692532426d53766b41377750364e4b67647665426b42505a68546679674a317441344a426c543074676138714174523679414865447569334e47522532466e393059797449635a47354570795571396d57754461566461375a4252726831716153253246494231655762674c304a686834714a54707a4771566b794e4f4e465475546b4867545869767838504a5275427a337251253242253242336868597176566e626e6730437a44713353587a66786351324b796830526f3575454d5151614a466678354f666a30396a783677314e6941525a6e4a6b316654306d68253246667a4a4a346525324232334e4a38724150716e324e365876314d75567a4c5931784f734b4a466335486a656548303057666d6d36354d6663436c4762664e35727a6d4b6147724f47253246413779764e6e525541746c777953375763573530346d396a5a4d6b746b655a5a53615242714f4a456d58443358565338433654566a57434d48774c4f5149654e44475a535425324673684958574e374a4d41566e253242644d25324225324677376d3962625951476c62464848506b7a63745150676c4d555369546546794c4344753567716e4b4468566833384d6f624a726f71626a707241372532425368546d615437253242356c3666424e6b4a4f4438535135506442713949756c655458304339576e504b76673261735330624c6f3648336931594654624645784449546361583246795162494a30434e522532464b34457357513648687355743067726e4139704b6b6e337971654d59796f715174596e75394c454d6532794b6e484673253242253246496d544d6c675934696b663730314c76756c5571444b46784b5158415251693567354c6e436b56576f2532426c794241414b74376275644c5533493262413963394576326c6e7839467241797464373858744a4555664f316e6a62746768563643506c5257625434436c682532466352634f2532424f4b6e3376645634766c6c4a596c414442633774253242486558566756576a49314b3665426b3635634f7a524159317367365551516f43614c587576374b76316c48497338457625324678694e427635436e3478473267797731427830442532462532425a6774454f3734353662584a4a253242516c48356e374345327074666c324363333562526e54444d46334739624c7665495238584d6d79586a354c6770486d656e6261736c3531366d4c4851683125324241354d3550594c6a7646625272623769776c62336b4854484e434c41253246506a39564b71524b637163667435386f314d704f4953784f357757676f48774e50415365564a6c474a7063536f6f6d36797655356344426e56316249474a4851335453746a4d646e575033585536744d4353637a517347304f386a4c6c53794369336956393144466a524f623979724475796f49467a664b743177464b7134757251533861523546655449614e56616b4a485949253242632532425643486b4f515533786957385950744845385565325a673941304667396367704d345831537569453248426f5a32595634667251504b366343506b4865336d4b796c7a4f4349646273717938374e3464346a6945764f753830784b66544664774b5674577958484144784c673053253242365272663249787a5179306d42326972315238744858655525324245676125324656323849622532466d56786857555850576d3830253242304c6e7272675459763658456c663054777462313768397735704b4b703144656e2532426f62595373347535524e676656684c73546e7552344a6e714825324637486170494f4170347531437662626b786a486d453962773176674f576c77575065756477744d505a495271645731756c7366686e55544c76475a4a7154764b53776363367644334c4c5049714b5376597553787a41626b645956253242766225324646443041645849514c5a3034453578536834595243545758494e4876514d686a454225324656733254613935394b5852414870614e424e4130574967717941463557786e5a4a544a38637045696871306c4c42374b4a437063346b52624f377831774468353145537537515877375142305a495856786573793743794a714f546d46724544395449455653644a4e424964765662314564454975574b5971394651505a4f416765584156574874737061475525324630795056327132417569664a4c5556703178666d6c646131496e3646664c476253307a715a49476a6d47726a72374325324667543943634a676a7654346d5457253242714779737958694f4234376f6e794e7435376a42787065583330316f31647870643552493644634e566468696d315475784d41706f384e7662504a312532465038774d48347a253242366c62707268585259695271464f5849765a3637663577536235613371714a6861336d434c73746162546558565a5a58637049766b65734d342532463231583337774c655525324641714379574b7a4c435045387672395933334369416234654a6e6857343946677643614d6f79327a73336c6c766661686e586f704d30554f413776736139327976626f3336716b6c346e6a5552597633503042444139585834253242637033434b4f7a655a4d51545331334a35566f5737525265646e4642306b756d702532466a4c556f717972426f6d436a656a316475253246463767426542737044753767734753253242796f54424f49364b463666483850485738484172694d59575639594c644c76514d5530654a58484a537a4b4f423475545262493557626d4e55332532423144783765445752787a546355327a253242354478356c565138496b4f6f36386f6c586a5a364f756b253242543136635139253246584130707a63506c47336c68344c5377766a323245504c4b7567746f6a5636253242727870523271397a693176576f37336f7a6c59774f444748424836614635374e69384a62586d6d424378366b6f6d5a46642532464b70515777384c6e6a4963416e59344c614a3855657038764f674b644378516b44676f39694b65456625324238253246335872353047366d634552757662653441347630395a78664678666d6d567369784230536234253242783953253242307239546530725176355025324646395676784c3433796c2532427866394a786138493976253246357a656e2532467856253242636a714425324659436b36253242762532427a464233356579584d66314f4b2532466f71334f496e5825324642393759376f455271526636397a396d375851366458566a78677336502532423977447a35497a4261387463502532466c6f5a6265376263357625324658586d25324225324671554948663833363650253246357158724f5a7a684f666e335872704f4579516145253246253242636f6e55632532427464712532423366667255373973347257456679253246634375492532463166312532466f253246555725324249663146763633366d33662532466d714e646250455038714d4f6a665748714d253246427442253242444f7576337a7262325468723850346434674838643847345a39704546446b763578424950253246624950776644514c3144786f452532424e25324662564f627657775438623434513747253246376d66797a4c514c31337862686e326b52634f672532467a7949415838593462763953514a3731725051787938455625324677732533442533432532466469616772616d2533452533432532466d7866696c652533459471022b0000200049444154785eec9d07981445fac6bfdd9dcd39b084258b80082288a2e279e209ea194f319ce1383d338a87f10c441573e22f8aa7a772660ce7e9e9e96156444c8882020672d865239be3fc9faab5c6ded9d99da999eaaeea99b79f679f859d8abfef9d7abbaabbabe3bc5eaf9770800008800008800008384e200e26ec38735408022000022000029c004c184200011000011000014d0460c29ac0a35a100001100001108009430320000220000220a089004c581378540b022000022000023061680004400004400004341180096b028f6a4100044000044000260c0d8000088000088080260230614de0512d08800008800008846cc23f2e790eb440000440000440202a090c39f5742dfd0ad984df3ae50f34e090df6869242a0501100001100001bb086cfaf8233af2857fd9557cb7e54a99f061d7dfa8a591a81404400004400004ec22f0fefc9b61c276c145b920000220000220d01d019830f401022000022000029a08c084358147b520000220000220001386064000044000044040130198b026f0a8160440000440000460c2d0000880000880000868220013d6041ed582000880000880004c181a00011000011000014d0460c29ac0a35a100001100001108009430320000220000220a089004c581378540b022000022000023061680004400004400004341180096b028f6a4100044000044000260c0d8000088000088080260230614de0512d08800008800008c084a10110000110000110d0440026ac093caa050110000110000198303400022000022000029a08c0841d02ef6d6ea1d6d22a6a5af513357eb48a92c60da39403f6a2f8826c8a4b4e72a815a8060440000440c0240230619ba3e1ad6fa4ba379653fdbb5f51ebcf3ba9a5b8c2576342411679061751ca6f4651dab107517c7686cdad41f120000220000226118009ab8e86d74bad9535d4b2a598ea5ffe986adff894a8a535782d9e784a9d3886d24f9d489e013d293e2f8be2e2e383e7430a100001100001d7128009ab0a5d6b2b35acfa911adff98a1a57fd442d3f6c256f7308e6eb577f9c279e12f72822cfc881947af87e943c6e18c5257a54b512e5800008800008184400261c4130bc8d4d7cd6dbf8fe4aaa7efa6d6add5a1a5269f1b919d456554bd4e60d9aded33397d2cf3c82527eb71f25e466505c4a72d03c48000220000220e00e0230e130e2d4b2b584eadfff9a1a3ffd9e5abedf44ad95d544c1fd94d714171f47b9775c4815b31e276f5d6368b5c7c5517c662a79860fa0e4fd8751dae163c933b017515c5c68f9910a0440000440c04802306189b034fdb095763ff032357efa1d51184bcdacaad4a3f6a7bcf91750c54d8ba9ee5f1f4bd46e49ea89a7e4317b52d68c532869f880f0ca402e100001100001ed0460c21221a8fbef0aaab8e151891c1d93c667a4528f97e691a7470eb5965551c9c9b3a86d775dd8e5e5cefe13a59df09bb0f323230880000880805e02306109fe4d5fff40bbcebd432247c7a46947ee4fb9b75ee0fb63e5bcc554fbef8f435ecaf6afb8e0e12b2979ffe161b70719410004400004f41280094bf06fd95146c5c7fc4d2247c7a4b9b75d406993f7f7fdb1e1a36fa8fcaa07c3ba8b9a15d2f3b5f9e429ea11767b90b1238167dff82f9d73e34cfec77d860ea5a76e9b4f43070ea44fbefe9a0e3ff73c7af7b147e9e07df70d1b5b38e5945556d29f6f98494b972fef50efe337df447ffcfdd161b74536a3b51d91721075d73734d0d577dfc3ff7be79557d0cab56b23e6cccabcf7c9a7e8c253a6505a4a4a87f253535264bb8df420603b0198b004626f6b2b6d3fe862a29610efc2b294cd6eaceaf5bfbb3aec8ee56d6aa6923fdc482d3bca255af14b524f3cf559fe20c52524c8e7458e4e04d66fdc4867fded7abaef6fd7d0b08103b9f10de8d39b9b83aac13b12133e68dfd174fdf9e7f176cf7fe4517ae59d777d27094e8453b49dd535ebe28b7c6d89a46e7f1356c199b159fef52a7ae2969b283f272792e6212f08384200262c89b9f884eba965cb2eb95c714439b79c47e9478def948feda4557ef543d24bd2094505d4ebb55be5da81d45d12102613c860ace6599093c3cdfaace38ea1a59f7cca67a8d63cc2ccbf59bf9ece3bf924dab47d070903f53761abb14d3ae8a080c62166a056131675ccf8d3d97c36dcd50c5e18f6bc8716f199fd11071e486f7ffa69a7193e4bd755fd029830377662c2fa6435392b3b5697d5a8455b45dd820b3bb961477733612b4b96d63a0367ed117589b6ffef93e51d56321e9d3b9bfefee24bbc1e7132d55599e2ef5dc5155f1d10b08b004c58926ce9b47ba971f97752b93c837b53cf17e7f9f2789b9b292e31d1f7ff5d7f9c474debb64895c9ae05b36bc238d410b01a22334feb0c3890091f306a244ff3cabbefd1bdff7c921b5bbf5ebdb8a908935ab771235f5e15261da81c66a4271e3eb1cb65d36026bcdf88bde8e687ff4ef75e7b0d07619dc18be55db6742deaf8ecdbd5bcadec602713c1ea67e9ac6d386cff719d968cfd4f60c44901334d71d22278056a933049eb72b4588d38e398dff3130deb0c97717de6f53738ff2d3b77f27e9cf8bbc3f9ecdc9ace7f395aa4b59ebc88d8091e81e2ca2e49e00001bb08c08425c956def60cd52e794f2a57d685c751e685c7fbf2b0c79c32cf3fd6b7345dfde45bb4fbfe9742dabc43149276e204ca9df567a9762071f704acb32bebcc2b90798a41bfbbcffc0dd49a9619b5300036c833e362c6e2bf8c1ac884032d475b67c3e224825d1bb52e5bb334a2ce2fbffb3ea4fa19076bbb85395a67e6fe337c6b9ba74c3ac267f6cc4cad4bd0f32e9d46b31e58c883e27f4d98fdedafb7ddd1ed92bb355ee244a73b13b69e3031e681da1928ae91dc0780ef1c08042300130e46c8eff39aa7ff475577bf2095abc773b32869683f9e876df4517ce28dd4e3991b2969687ffeb7e60d3ba8f4ac5ba8ad3ec4cd3b8828f3921328ebbc63a5da81c4c109045a2216335aebcc4ecca6ba9add32c3e9ce84dffffc0bdf72aa6895f56630f1b7ae6ecc124bb3a27e66bc73a75d42b3173ee8333566c2d6eba356137e71e9db21d5cf0af3bfceeaff7f3b4cd8ff24c51a3971c2c18c97dd80c566ffe2a4a03b13f6e7d1ddc94238d7ef83ab0b2940a0330198b0a42aea3f5849e533da07ba508ed489fb52de5d97b4ef6ee5f5125fcefef47bbef355fe4357f0973478bd5eaa9cf90faa7b63452845f234b937ff85d27e7f60c8e991508e8075b6595a59e95b8215cbabdd99b0984dc9cc84bb6a5da099b0356d30d3097526dc55fdfed750ade9c41dda769830ab27d01de9fe3773d53534846cc2a1cc8403c5153361b9ef0e52cb118009cbf1a2a6f59b69d799b710b5b605cf999840bddeba9312723279dae6f55ba8e4f45faf0df778f27a4ada7b10ffcc5b5d473b265f45dec6e6e0e526c453c1c35750f2d861c1d322454804fc9778fdaf410a43e8ce84c70c1fdee19ab0b85148f535616b87acb35b71b22096a3add75f271f7c1037abe2b232a96bc2d6ebbbc28cc48981b87b5cd423ea6566c71ef5b2ae1cf4cccfe74bed6255c17a9d9af5c77f39da7fd9db7f162f66f8fe8c23bd260c130ee9eb82440a09c0842561b66cda49a5e7dcce5fdcd0ed11479476f478cabdb9fdb11276ecfefb6b54bde855dfff33fe3499b22f9fe2db03baf29627a9f6e50f83de299d9095c667d1897b61cb4ac9f075995cccb01e7de9659ea6abe784bb336166524edc1d6ded8475b99ab5b9303f8fe228ce776d595c370de7ee68c1c4ff6e68567fa0958285375c4f0fbff022b13ba0c52cb9bbbb8e833d271cec4e66568fe8f3c03e7d3a18396be37f173d482f2d7d9be30a7477b435c6fe779c63395ad5370be5042300130e46c8eff3e61d655476d1ddd41aec31254f02e5df7511a51cfaebe60ebbce98474d6b7fbd0b3a718f3ec466c3e2cd488d9fafa5b2cbff8fbc0d4dddb6cad32b8ff21ffc2b7906f6966c3d92db49c0df54fcefc6b5b3ee4065fb1b895dcfd0766758fee6e63403d40702a61380094b46a8ada29aca2ebb9f9abedbd46dce84be0554f8f44c8acf4ce3e91a57aea7d20beeeeb08c1d97104f79f75f4a29078fe269da6aeba9f4bc3ba939c8e34a8943fa50de82e9e4e9952fd97a24b79b80f5c62e5697ffe34e76d76f2ddf7f76cf3e53b5db95b51e98b09351455dd14600262c1951669465573d484d2bd6769b33e7a67329fd98837c696a9e5e4aad9b4b3ae549e8d78332ce9aecfb7bfddb5f52f935ed1b1e747524ed3398f2eebf8c12b233245b8fe4200002200002261180094b46c3dbdc4a15373e42f54bbfec3267e2e03ed4e3f959e16d29e9f552c91937753b1b4e3e686fcabf771ac525fdbae1876437901c0440000440c0000230e130825071eb5354f7c2078173c611655d7a12659e13fee6fab52fbc4795b73fdbe5e61d69bfef78c357185d40161000011000010308c084c30842f53f5ea7dd0b5f0998332e35897afcf37a4adca3a8fdf3d6566ad95519b49684fc6c8a4bf4f0742d5b4a68d79f6fa5b68ac07760679e7b34377a1c20c06eb6da5e52a2f44513fe54d9cd55626b4c999722f85f1fb7e37a341400026e2700130e238275ff594e15b31e0b983375f238fecee038b6390711d5fd671955def66cd05ab2a69d48197f3cc297aef2a6c554fbaf8f03e6cbb9fe2c4a9ff2dba0652241741360e6b8e0e9677827a79f79067feda21d473826cc1e9d62bb77b15dbc98713343bef5917fe0ed4676040865ba9a004c388cf035ae5843a517dfd729279b05173e379b3cfd0af967defa462a3e750eb56e2b0d5a4b42610e15be348fe2d35379dad6eda5547cda5cf2d63674ca9b7fff6594f29b7d82968904d14d806d60218e0ddbb6f95e2f284c332b2383c473cfd659a8d880433c3b9c919e4633ce3e8b6f34c25e98c09e7766263ae3f63be8c60b2fe0555867c281deda245e5e51555d432ffcef7f9deec216cf335f77fe5f227a2773744714bd8b450230e130a2debc613b959c3cbb53ceb449fb51eeed17f9fe2ebbc5a5ff569495739ea0da579775aaa7c7f3b32969cfbe61b41c59a285007bfce8a6457fa73f9f783c9f695a679dfecfe65a97acd9b3cb57dc7917dd73f5553c9fd877395413663b5e5967b4ac6c7688fc7d0a0b03be6b98b549d46bd78c3d5a628b7ec41601987018f16eaba9a31dbfbdbcc3ce56712989947bd3b994fabb71ed25b6b551c5bc7f525d0013edaacad4896328f7b60b7cd7861b96afa18a6b17515b8d65361c47d4fbfdfb7dcf1f87d17c64890202ccd49e78e5559a79d105949a92c277b062af1914bb76590d8f2d058b57ffb12d25adb36636ab65ff0fd584fdaf09fbe79f30660c7ff5a0f510cf2b07fa2c0a42812e8040440460c261e2dbf9bb2ba8b5a2da973ba17f4f2a7cfa06df72325f8a3e6926b51657845c437c5e26153e378b120a72da7dbcbe91ca2eb88b9ad66cfcb59e9c74eaf56ee7a5f0902b41c2a820605d12161d127b54fb5fc3b59a307b93103bd8bb77d9216bc2e21dbd62999b95c1eaf53771d12661c05dcd90a32218e80408444000261c26bcd2736fa3c6af7ff2e54e3d721ca54efa6516cc5ed6f0c336aa7ef835e9d233ce9e4449a3f7f0e56bf8f0db0eb3e9a45183a8c7e2eba5cb4586e82110e8fa6a77d770c399095b978f1939714d98bd3061d9ca95bebbb1bb32719647b4935d67f69f1d474f34d01310888c004c384c7e75ff5d4155773c4b6d55b5ed257812282ebefd8e687678dbda885a4278d3925ffd719e78a2f8f880e5c467a450f615a751da898784d96a648b060281ee34b62ef9ee3762af0e3752594d38d835613163b5beb5a82b13b6be46d07f268c25e868501afae00401987004949b37efa49a475fa7868f57535bb0b72a45504f7c561a251f3882b2ce3f963ce2f9e308ca43567713103743892565d11b669cecda2fbb4efcc033cfd2bdd75ee37b3c485c1366d78fc552f6a4830ea249071f483575f57c79dafad6a23bae9c415fac5ed3e9ee685617bb996be9f2e5c4f25f70ca147a6bd9329a77e9349af5c042dfddd55dbd8718cf0abb5b7b68bd7a0230e14899b6b652f3861db4fba157a9e1c355a1bd6738d43ae3e32879fc5e9475d9497cf30fb19947a8d9910e04ba2380d92af40102fa09c08415c5c0dbda4a0dcb5653cd13ffa5e6ef3793b7b139ec92e3923c9438ac1fa59f3989d81dd330dfb05122a31f01ff5dacc4cd5c00050220a087004c583177f696a5c615df51d5edcf52ebae2ae9d213723328ebcad3f8661ce23588d28520030880000880802b08c0846d0a93b7a1916a9e78936adf5841addb767578a6b85395714409bdf329ed887194f197dfc37c6d8a098a0501100001d308c0846d8c08bb43ba6d5b29552f79976a9f7997c8eb0d585bfac98752c619475042ffc2f05e7f68631f50340880000880807d0460c2f6b1ed5072f30f5ba96ac18bd4f4c57a7ebd985df74dda774fca9c7622258f1aec502b500d088000088080490460c20e4683ed80d5f4fd266a786305a54e1a4b892307fb76d872b019a80a0440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c2100133624106806088000088040ec118009c75eccd1631000011000014308c0840d09049a010220000220107b0460c2b11773f4180440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c2100133624106806088000088040ec118009c75eccd1631000011000014308c0840d09049a010220000220107b0460c2b11773f4180440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c21e01a131e74e86f0d41866680000880000880801a021b3efc808e7ce15f6a0a932c25ceebf57a43c9f3e392e74249863420000220000220e03a02434e3d5d4b9b4336612dad43a520108304d6ac5943071c7000ad58b182468e1c198304d06510881d0230e1d889357aea120213264ca04f3ef9840e3ef8605ab66c994b5a8d66820008844300261c0e35e401019b08ac5cb9920e3df450aaa9a9a18c8c0cfae0830f68ecd8b136d5866241000474138009eb8e00ea07010b01310b167fc26c18f20081e82600138eeef8a2772e22609d058b666336eca200a2a920100601987018d0900504ec202066c1e9e9e994909040adadad545b5b8b6bc376c046992060080198b021814033629b009b051f78e0819493934377df7d379d7df6d9f4e4934fd295575e49959595b47cf9725c1b8e6d89a0f7514a00261ca58145b7dc45a0acac8cfefdef7fd3b9e79ecb1b1e171747e211fec71f7f9c8e3ffe78cacfcf7757a7d05a100081a00460c24111210108384fc06ac2ced78e1a4100049c220013768a34ea0101090230610958480a022e2600137671f0d0f4e82500138eded8a2672060250013861e40c0400230610383822681800d0460c236404591201029019870a404911f04dc410026ec8e38a195314600261c630147776396004c3866438f8e9b4c00266c7274d0361050470026ac8e254a0201650460c2ca50a22010309a004cd8e8f0a071b14a00261cab9147bf638d004c38d6228efeba82004cd8156142234120620230e18811a20010504f0026ac9e294a04011309c0844d8c0ada14f30460c2312f010088110230e1180934bae92e02306177c50bad05817009c084c325877c2060230198b08d70513408184400266c5030d01410100460c2d00208c4060198706cc419bd74190198b0cb0286e68240980460c26182433610b093004cd84eba281b04cc210013362716680908f808c084210610880d0230e1d888337ae93202306197050ccd05813009c084c304876c2060270198b09d74513608984300266c4e2cd01210c07234340002314600261c63014777dd4100336177c409ad04814809c084232588fc2060030198b00d50512408184800266c6050d024108009430320101b0460c2b11167f4d2650460c22e0b189a0b026112800987090ed940c04e0230613be9a26c103087004cd89c58a02520e0230013861840203608c0846323cee8a5cb08c0845d1630341704c22400130e131cb281809d0460c276d245d920600e0198b039b1404b4000cbd1d00008c4180198708c051cdd750701cc84dd1127b41204222500138e9420f2838002024b972ea52953a6d082050b68ead4a9244c78f1e2c5347dfa747ae1851768f2e4c90a6a4211200002261180099b140db425a609a4a4a490c7e3a1d4d4542a2d2da5828202aaafafa7e6e6666a6c6c8c6936e83c08442b019870b44616fd721d81db6ebb8d66cf9e4d4d4d4dbeb6272525d19c3973e8baebae735d7fd060100081e00460c2c119210508384680cd821b1a1a7cf525272777f8bf630d41452000028e1080093b82199580406804acb361cc824363865420e06602306137470f6d8f4a0262368c59705486179d02810e0460c2100408184680cd8667cd9a4573e7cec5b560c36283e680806a023061d544511e08444880dd0d7dde79e7d1238f3c426c491a07088040f412d066c213274ea4f7df7f3f7ac9a267200002200002b61038ecb0c3e8bdf7deb3a56ca70bd562c26ce301f6b364c912a7fb8bfa4000044000045c4ee0d4534fa5534e3985ffb8fdd062c2d104d0ed0240fb41000440c06d04a26922a7c584b12faedb248ff682000880805904a2c5471c37e1683a83314b92680d08800008c40e8168595175dc84a3055cec481d3d0501100001f30844cb84ce71138e962504f324891681000880406c1188063f71d484a3e5cc25b6648ede82000880809904a26165d551138e0660664a11ad0201100081d823100d133b474d381a960e624fe6e83108800008984bc0edbee2980947c3198bb93244cb40000440203609b87d85d53113763ba8d894377a0d02200002661370fb04cf311376fb9281d93244eb40000440207609b8d95f1c3161b79fa9c4aeb4d17310000110309f809b575a1d31613703325f7e682108800008c43601374ff41c316153960a1a5a6aa9b6a99a1a5beb6877433935b5365052420a65a5e45172422aa52766514a627a6cab19bd0701100001171230c56764d1d96ec2269ca194d66da3659b5ea39fcabfa18afa62aa69aca0566fab8f55425c026524e7525e6a4f1a9cb70f1d3ce038ea915624cb12e9410004400004341170eb8aabed26ac0b8cd7eba5f2fa62fa60c38bb46cd3abd4dcd6c8a591e249a78ca46c4af6a4527c9c875adb5af88cb8a6a992d84c991d89f14974f080e3e9b04153283fad1711c5699215aa0501100001100885800913be50dae99fc67613d6b544f0ddae15f4d2ea05b4ab762bef73617a3f3a6cd0293420772fca48cae126cc66c0ad6dad3e13de50b1863edcf83215d76ce2790ad28be8d451336878c1fee1b0451e1000011000010709e8f29b48ba68ab09eb383369f3b6d1f2cdffa125dfde435ef252617a7f3a7cf06934bedf519410ef09ca8a99f2675bdfa4777f7efe17338ea32923a7d321034ea4f8b8f8a0f991c0dd04d6ad5b47a79d761aefc4f3cf3f4fc3860df375e8a69b6ea259b36675e8e085175e48f7de7b2fffdb8c1933f86ff6ffd4d4d44e20962d5b46871c7288efefa3478fee544757f458bbde78e30d5f1deea68cd683803d0474adbc46d21b5b4d580790cfb7fe8f9efde60e6a696ba6d1bd7e4ba7ef7315a52566123b430af5604bd9752dd5f4e2b7f7d397dbdf264f7c229dbcf7749a30e0f8508b403a971278fae9a7e9acb3cee2ad7feaa9a7e8cc33cfec60c2cc48599afcfc7c12a6cad29d74d249dd9a30cb73e79d7776305d66ea2fbdf45250232e2b2be3ed98306102cd9c39d3a564d16c10b09f808e895fa4bdb2d5849d5e1af8b6f8137af4f3ebf90c78bf3e47d02923ff4a6949996133aa6faea1e7beb98b56ee788f9771fefef36954cf096197878c6613a8afafe7465a5555c51b9a9d9ddd6156cb4cd36ac2223d4b3b7ffe7cbafefaeb03ce84c5ecfaeaabafee60eafe3444ba55ab56f94e0284b93ffcf0c3fc6f62e6fdd5575ff966d5471e79243f316087d5acc549c2bc79f3b8798bff7ffcf1c7b471e346dfc986989117141474327bff3e9b1d41b40e04884fb8d844ca2d876d26ecf41949abb785e6be733a5536eca27d7a1d4ae78c9d1dd2f273b040b11bb79efefa36fa62fb52ca4e29a059873f4389f1c9c1b2e1731712b09a256b7ea0996b38261c6816ec8f4718fad9679fcd67bcd659b2bf395adbe93f03bfebaebb7c270a6fbef926375a61dc2fbffc323df9e4933477ee5cbaefbefbe881071ef019f7c08103f9098735bfbfa9bb30a468720c12d0b1021b0966db4cd80910ec8ee6d5c5cb6963c51afef811bba12a37b5274d3ff07eca4fef1d3697daa6dd949e94e5cb5f515f420f2c9f41bbeab6d2a0dc9174e941f7f23ba871441701ab59b29eb16bc3d6d9abffac30d4e5687f13f6bf366c5df6b6ce86bb9aa1fa97c7fecfcc95fd5ebb762d4d9b368d2f712f59b2845fc366e53cf1c413b468d1222a2a2af22d695b97defd67d86cb6cc0e760d9bfd9b9d18e000013710707a02182913db4cd8ee25812fb7bd43cf7f7bb7efb12206223e2e81fe76e813d42bb37fd85cb654aea7155bfe4b53465ddea18c929a2d74cbfb7f222fb5d1c5e3efa2bd7ae08ee9b0211b98d1bab4dcd58d56816ecc124bbdfef9ad3766599781ad66669dd11e75d4517c2978e7ce9ddc40bff8e20bdf4cdc7f261ca81dc2b0c5c9c3d4a953e9adb7de22b654cd7eb319f3830f3ec84f2ad8ac97992b33de5b6eb9856eb8e1061e11d6efbaba3ade0e3623fff9e79f3b2cbf1b18363409040212b0db7f5462b7c584ed3c13a969aaa21757df4f5fef789fdabcad94959ccfafd30ec8d98b8ab28650bf9ca161f3d951bd911effb27d19fbb283eee33774598f7f7c318b56edfc8026f43f9e4edbe7cab0eb4146f308f8cf4ead2d1433c1eeae8f7667c25d5d13b6fe5d18a3a8cb3adbf537e1ee96b7453b366cd8c0bb70fbedb7f31930bba62c8c9acd90c5b27a5a5a5aa71bca583fbffbee3b9e7fc48811b819cc3cb9a245410838b112ab2a08b698b05d00d8661a0f7f7e1dfd54b68acf7ac7154da2d3475d459e84c48878b0c79a3657aea587565c4df52d35fc39e2e907dd4fbd32077628973dfaf4ec3777f2bf1565ef4953c7cca25e19fdb0994744f4cdc81ce84e656192279f7c3237a2704d98f5502cfd0a9315773cb3592a5b8e1e376e9c6ff9db7f562c734d98cdc0455de286ad40d786c5f5eed2d252dfac583c5a653d21c152b419fa442be408d83911946b49f0d4b698b05d4b01ec4ee54f33112a770000200049444154b7bc4ea99e4cfee8119b01c7c72704ef651729d81d74eb4bbfe265ae2e594e8d2d753c651cc5d38507dc46230ac777c859d75c4dafac79903edfb6945abdcd949e94cd9f419e38f854fe18130e77121086286e4e124bc96256c9ee2466c6c69673ad3766597bdbdd4c58a40b34db16cbd92c8d7599995d8f66cbd2d65938bbbe2b8c955dfb15cf1c8bbfb1c7a6d8e17ff2e07f97b4f50480cd8e7bf6ecc9ef28158f5e89cfc5c98328d79dd145ab6395805d3ea49aa77213b6eb0ce49b9d1fd1a35fdcc837cc3865e4157470ff63437af6972d5957375650795d31edacd948d58de5c496b44bebb6d386f2d554dbdcfe388aff71ccd0f3e8c8a16707fc8c5d377e61f5bdb4b96a1ddfd0f2d8e1e7d3e1834f0fa93daa0388f2404035013c97ac9a28cad341c0ae1559d57d516ec27674bcb1a59e1ef9e27a3e6bddbf68329d31fa6f9410c20cb8a9b591febbfe715ab5e3432aabdbc16faaeaee604bdceca7a5ad89d773f698f61b56021dac4dfffe7e117dbce9154a4c48a63f8f9d8d678855ab13e5394e40ccc6fd67d78e37041582408404ec9a1046d8ac4ed9959bb01d4b00ecd1a37b965d42e4257ec354dfec3d83726868a9a37faebc855617b73f6a11ca519056442c5f4d53050d2b1847d30ebcbbdb6c6c8bcb7f7c7923ad2efe847a670ee2d791d912350e100001100001fd04ecf023d5bd526ac2769d797cb6f52d7aeaebf9d4376b4fbaeca0fb29358477fe7eb4f1dff4d29afbf91dd4a11cec66ac03fa1e45effdbc84cf98f7cc1fc30d3fd8515cb3991ef87406d53456d2f9fbdf42230a0f0c96059f8300088000083840c08e9559d5cd566ac2767578c9ea7be9e38dafd098de13f9b26fb07da0d90c75cebba75155c3ae90782527a4d1d143cfa1377f78c2f7dcf1e85e87d15fc6cd0d9a9fd5f5cf9537f1ad2dc7f73b9ace1cfdb7a07990000440000440c07e02764d0c55b65ca909db35f57ff4f31be99be28ff8cd4f278eb83868ffcbea76d2dc77dbdf8413ecc84ccaa3f3c6dd4c6facff07ad2bfdd297fcd861e7d3e43ddb37f20f767cb2e9357aeedbbb282fb537cdf9dd73c192e373c309f86f8611ce633aec0ee53973e6f0ad2155dd5d6cbdab992114bb5cb1bbb955d7c7eea8661cc41dd386870ccd03812e09d8e54baa902b33613bcf381eff6a2eaddcfe2e1d3af064fe5ac16007db6672f63ba7749bcc139f4443f2f7a54943cea2afb7bf471f6dfa972f7d52420a5d32fe6e1a9c37325855fcf375bbbea0852baea4f8380fdd77cc3b21e54122330930e3d9b66d9befc50de2719f850b176addba511830dbc94abcd98919e4471f7dc4dbba79f366a5a60f1336539f68953c01bb5668e55b1238873213b6b3a3afadfd3b2dfdf1691a5eb03f5d3cfecea0cbd1ecf9df79ef9e4165f5db03f69a5d5b3e65d40cea9735941efeec5a5a57f6eb0c98651898bb374d1b7f37257b3abf13365081eb4abfa2859fce8009ab52a5a672c4b3bebff9cd6f3abdc29035e9aaabaee2bb4b8d1d3b963f33ccde7624f67d66663d7d7afb09223bf3b6be24813dd32b5e96f0dc73cff976ae62ef2ab6ce6ed9cc96bdc189cda0adef3166655a0dd7ff396666cc6c430febccdbfa4cb2ff3b8fc54b2258dd975e7aa9af3eebbed5ecf9e5ae9e89d6141e540b026111b07382185683fc322933613ba7fcdfeffa8c16adb8867aa4f7e5376665a7b46f4ad0ddb176d7e7fceee8e6b646ea953190fa660da1fe39c3b8c1b2ad2ebfd8b694df84555ebfb343313d3306d0b963e752efac41c1aaf07dfee1867fd18b6beea3c2f4fe74e3c42743ce8784e61110bb4d5937d110adf4dfbc83ed36c58c77c182053c09db6043cc98adcbc362630db6accd0c9c19b97891029b79b383edc8d5d576945d9d1c58e959eb63ed126db1d6274e220299b0d8954bccb4f10a43f3b48916854fc04e7f0abf55ed399598b0dd671a6c79f9de65d3687763195d74c0ed343c849727b4b5b552434b3da524a6f10d3ed85151bf8bdefbf979fa70e3cb01ef9ade237734fd79bfd92199bc00cfeebe667b4a7f5bfc311dd4ff58fae33e57471a13e4d74cc0ffdaabff4b1aac3365665683070fe6db4e0a4366b3587f13b65e5f6566cb5e8e70c92597749889facf4cfdcd5f9867203cfef5b1b72a59b7a164f53ffae8a374f3cd37f39733b0174958eb63655a67d2aaaf316b0e29aa8f710276aed4468a568909dbdd4166746ccf66f676a3de198368fac10b3abc6ad01f02bb6379d6db5368afc203e88cd1d750795d096daffe8976566fa4e6b62662ef08f67adbf89697ec250dd9c9f9d43b6b30f5c91c4471bf1876a860d94b1f1e58fe577e57f5f9fbcf0fe90421d4b2914e3f01eb2c54bcbbd76a865613eecac4d84cd86a8ac284d9f7c66adcc14cd87f99bcab9930db2b5a5c2bb6deb4c5f68beeca84d9ecd97aa20013d6af3db4401d01bb278a91b45489093b31d567cbc637bf7b16b5789bf98b1bce187d6db7fb35b3571de6a5f6a44121de5c150ec496d6665af4d9b5b4beec4bbe81c8a507dedbe9cd4be1948b3c7a08301364aff563aff7b3ded12c4c532ce70a33b41a349b09cb9a70a833614623d03561f677669c871f7e78876bc2fea62f6eb2f29f098bebd862391d33613dba43adce1070c2a7c2e949c426ece419c6e75b97d2f3dfdec567b2fb151d41c70fbf90b252f2c2e977c479d89698cfaeba93bedcbe9412e393e9a2f1b7f30d3e70b89b80f51a2deb89f5ae643113667f1777245baf09cb9ab07833132bafbb6bc2feedb0de1dcd66d8cca0d94c56d41fec9ab0b81e6dbd06ddbf7f7f7ead5a9c60e09ab0bb758cd6772660f78a6db8cc233661273bc65e39b8f4c7a7f89dd24dad0d9497da8b4ede7b3af5cb1ecab78b646f320ab69147b8a0583e66feec5587ec050eec9dc6bbeab6f27da34fdefb323ab8ff7191148dbc0611f07f4e58dc012d66beccc4d81b8dd8219e21f65fbeedee1aad985933e3b55e7fbee79e7be8b3cf3e0b7877b4d588d9eb0fd961dddfd9bffe4077478ba56976d316bbb3dbbf3eebddd1ec33f67fff550183c284a68080140127278c320d8bd8849d9ee2b36bb95f6e7f97bfc5a8beb986f7b520ad0fe5a5f5a2b4c42c4a88f3c8f45f22ad97d8ab0cab1acaa8a4760b7fc903bb9e7ccac81934baf7a17895a10449b7261526dcdd0d5291f40dcfe646420f7941203801a7fd2a788b22bc3b5ae799057b3de1ebeb1ea375a59f53554329b5b43587d25f256972527a5051d69ef487bda751617a5f2565a210f309a8366151dec30f3fcc3bcfdeedcbde21ecff8cb0f964d0421070070127576e432512d14c587787d8acb8a2611755d417d3b6dd3ff24790dada5a42edbb74bacce41c2aca1e42ec6d4bf969bdf96b0f71800008800008b88380ce8963578422326113a7f6ee90025a090220000220a0838069be15b6099b7846a123a0a8130440000440c03d0474afe0fa930adb844deb887b248096820008800008e82260da04326c13366d4aaf2ba0a8170440000440c05d044cf2afb04cd8b4330977851fad050110000110d049c0a495dcb04cd8a40ee80c24ea060110000110701f019326926199b0495379f7851f2d060110000110d04dc0141f93366193ce20740711f5830008800008b89380292bbad2266c4ac3dd1976b41a0440000440c00402a64c28a54dd89429bc0941441b400004400004dc4bc0043f93326153ce1cdc1b72b41c0440000440c0140226acec4a99b0090d3625786807088000088080bb099830b194326113a6eeee0e395a0f0220000220601201ddbe16b2099b70c66052e0d016100001100001f713d0bdc21bb209eb6ea8fb438d1e800008800008984640f7043364139e387122bdfffefba6f1437b40000440000440202202871d7618bdf7de7b1195116ee6904d38dc0a904f1f81e6e6669a3a752a2d5ebc98121313f53504354b1140dca47019931871332614ae6a084cd855e1926becfcf9f369eedcb9346bd62cbae1861be43223b53602889b36f411558cb845842f6633c384a338f4292929d4d8d848494949fc370e771040dcdc1127ff56226eee8c9bee56c3847547c0a6fad959f9bc79f3b8f9262727d3cc9933311bb689b5ca62113795349d2b0b71738e75b4d504138eb688fed21f71562eba87d9b03b028db8b9234e5dcd82f17d7367fc74b61a26ac93be4d755bcfca4515980ddb045b61b1889b42980e1685b839083b0aab820947615099e17a3c1ecac8c8a09292122a2c2ca49a9a1a62776f36353545618fa3a34b889b3be388b8b9336ea6b41a266c4a2414b5e3edb7dfa62953a6d0030f3c40679d7516892dd99e7aea29baecb2cb68c992253469d22445b5a1185504103755249d2d077173967734d606138ec6a85afaa47b5fd428c76b5bf71037dbd0da5a30e2662bdea82c1c261c9561fdb5531814dc1960c40d71732701b45a96004c589698cbd263307759c07e692ee286b8b993005a2d4b00262c4bcc65e93198bb2c60306177060c717375dc74361e26ac93be0375c3841d806c4315889b0d501d281271730072945501138eb280fa770783823b038cb8216eee248056cb128009cb1273597a0ce62e0b189635dd1930c4cdd571d3d97898b04efa0ed40d137600b20d55206e364075a048c4cd01c85156054c38ca028ae5e8e80828067377c611717367dc74b61a26ac93be037563507000b20d55206e364075a048c4cd01c85156054c38ca028a997074041483b93be388b8b9336e3a5b0d13d649df81ba31283800d9862a10371ba03a5024e2e600e428ab02261c6501c54c383a028ac1dc9d7144dcdc19379dad8609eba4ef40dd18141c806c4315889b0d501d281271730072945501138eb28062261c1d01c560eece38226eee8c9bce56c38475d277a06e0c0a0e40b6a10ac4cd06a80e1489b8390039caaa800947594031138e8e80623077671c113777c64d67ab61c23ae93b503706050720db5005e2660354078a44dc1c801c6555c084a32ca098094747403198bb338e889b3be3a6b3d530619df41da81b838203906da80271b301aa0345226e0e408eb22a60c2511650cc84a323a018ccdd1947c4cd9d71d3d96a98b04efa0ed48d41c101c8365481b8d900d581221137072047591530e1280b2866c2d111500ce6ee8c23e2e6ceb8e96c354c58277d07eac6a0e000641baa40dc6c80ea4091889b0390a3ac0a987094051433e1e80828067377c611717367dc74b61a26ac93be037563507000b20d55206e364075a048c4cd01c85156054cb88b804e9c3891de7fff7dd787fbb0c30ea3f7de7bcff5fd88b50e60307767c4a365dc504d1fe350d74461c25db0c120a8fa6b88f26408407f32b490d67402d0334c585aa3108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384838a70e9d2a53465ca145ab060014d9d3a958468162f5e4cd3a74fa7175e7881264f9e1cb41c2400817008407fe150431e530940cfa14726ceebf57a434f1edd29535252c8e3f1506a6a2a95969652414101d5d7d7537373333536364677e7d13bed04a03fed2140031412809e43830913b670baedb6db68f6ecd9d4d4d4e4fb6b525212cd993387aebbeebad088221508844900fa0b131cb21949007a0e2d2c30613f4e6c16dcd0d0e0fb6b72727287ff878615a940203c02d05f78dc90cb4c02d073f0b8c084fd1859cfde300b0e2e20a4504b00fa53cb13a5e925003d07e70f130ec0489cbd61161c5c4048a19e00f4a79e294ad447007aee9e3d4c38001f76f6366bd62c9a3b772eae05ebfbeec66ccdd05fcc863e2a3b0e3dc384a585cdee863eefbcf3e891471e21b6248d03049c2400fd39491b75d94d007a5664c237fde742bb6385f235139879ecc39a5bd075f5d09fb1a151d63093f5a7ac93bf14043dab266a5e79a1ea39e4e568269a93f79f6e5e4fd12225045efa7c01852a1a25154a1602fd4902735972d3f5a71a27f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e63d6845bbd2d54d7541556e4d293b2293ece13565e5333c98846471fa26dd082fe3aaac874fda9d63cf4fc2bd1581f4f63ce84d9e0f7f9b6d76875f187d4dcd618d6772b29218546f5fc2d8d2b3a96e22921ac324ccb64fa20182d8316f41758f9a6eb4ff5f7157afe9568ac8fa73167c2effefc04ad2bfb4cc9776aef1e13e8d081672a294b7721a60f82d13268417f306146007aeeac83581d4f63ca847754ff40afacbd57a9dffd61afaba857c660a565ea280c266c3f75e8af6bc6a6eb4fb53aa2c184a167357a8e1913f67abdf4c277f3a9ac6e9bd2ef5361fa003a69c4351447714acb75ba30d30741b70f5ad05ff78a365d7faabf8fd07360a2b1389ec68c097fb7eb63fa60e333217d97d213b3a9c5db4c8d2d7521a53f7cd0d934ace0a090d29a9ac8f441d0ed8316f40713b612809ebbd643ac8da73161c28dad75f4ec3773a8bea526a807f6cf194e7f3de8ffa8a9b59ee67f700eed6e2c0b9a272d319bce18358712139283a63535014cd8bec8407fc1d99aaebfe03d904be16613869e83c75a46cf3161c29f6c7e895615bf13905c5e6a2f62b7c86fa95ac73f3f6cd0143a79efcbf8bf1f5c710d7dbf6b055f6a1e5ab01f6ddbfd23d53455062c674cefc97460df138347c7d01432a2d1d105370f5ad05f70c598aebfe03d904b013d633c158a897a13ae6c28a6e757df4c6dded64edf92bd0b0fa273c6cea1a48464ba67d925b4b1f2bb0e26fcd067d7d277259fd221fd4fa0d3f6b982763796d3a215d7d296ddeb3b959510e7a1d347cda2ace402b96fa321a94d1f04dd3a68417fa109dc74fd85d68bd05341cf184f63c6845f5fbf903657ade9f4edd8236f1fbaf4c07bc8139f484d2d0d74c747e75371ede68026ccccfa82fde7537c5c3cd53655d19d1f5f446575db3b953928671f3a6acf8b42ff261a94d2f441d0ad8316f4179ac84dd75f68bd083d15f48cf134264c7873d56a7a7dfd839dbe194909a974e361ffa4dcd442aa6dda4d0f7c7a056dddfd43a7e5683113661f8cec7930fd65bf9bc813efa19fcb57d3bd9f4c0bf88d3b7ef8742aca1c1efab7d19094a60f826e1cb4a0bfd0c56dbafe42ef496829a1678ca7516fc26cf979c9ea9ba9a2a1b8d3b7e2883dcea413f6ba80d863230f7dc6aefbfeba7987f59ab0d584592113079d4a27eddd6ebe8f7c7e037d53fc71a7b2f352fbd0a97b5f4f7171f1a17d1b0d4965fa20e8b6410bfa9313b6e9fa93eb4df0d4d033c6d3a837e16f8adfa1659b5f0af86d983df1192a482fa235c59fd2a2cfafed90a63b1366cbd1330f7b9a0ad2fbd09ae2e5b4e8f3bf052cff37034ea39185bf0dfe4d342885e983a0db062de84f4edca6eb4fae37c15343cfc42fef613c258aca1bb31a9a6be899d5b3a9b1a5bed3b7213fad37cd39fc39fef7c7bf9c4b5fed7837641366097f3ff45c3a7ae8547e1df9eab77e1ff086af644f3a9d396a0eb1df6e394c1f04dd3468417ff2aa375d7ff23dea3e07f4dcce07e369949af0f22d2fd1d73b033f92b4578f03e892f1777201cc7df70c2af5db41abbb9930cb33b2f060baf0805b79fed9ef9c46e5f53b037edbf6eb73241d507482eaefae6de5993e08ba69d082fee4656abafee47b143d260c3dcb475f46cf5139137ee9bbdba9a476534072a37b1d4ae78dbb897f76fdff4ea4eaa68a0ee926f43f8e4edfe72afeb7fb3fb99c7e2cffbac3e743f246d3e5072fe07fbbe5fda9b4b36663c07afa64ee41270cbf523e7a9a72c888464713dd64c2d09fbc424cd79f7c8fa2c784a167f9e8cbe8392a4df85fdfdf493b6b360424b767fe189a7ed07dfcb3db3efc0bdf80c37a247bd2e8a411d3a8aeb99a5efdfeefe4a5b60e9f8fed7d389db3df6cfeb71b96fe813f3b1ce828ca1c4ac70fffab7cf434e590118d8e26bac984a13f798598ae3ff91e458f0943cff2d197d173549af017dbfe439f6f7f232039b62ff4ad935fe1772fbfb87a017db031f0cd5b5d613f75e40cfacdc013a9bab182ae5fdaf50e59e3fb1e4f637b1f251f3d4d396444a3a3896e3261e84f5e21a6eb4fbe47d163c2d0b37cf465f41c9526dcd4d6c0f78aae6bde1d90de8c8317d2e0bc91b4b37a33ddfae1546af3769ced76853c2d318be61cfe2ca52666d0f2cdafd333dfdc11306946520e9d3e6a3625c6bb672f6919d1c84b32f21c6e3261e84f3edea6eb4fbe47d163c2d0b37cf465f41c9526cc90adddf509bdb7f1a980f4c6f49e48e7ee37877ff6fabac7e8cd1f16874479ea989934aee808f27adbe8f68fceefb4942d0af9dd1e7fa6a179078454a629896444a3a3cd6e3261e84f5e21a6eb4fbe47d163c2d0b37cf465f41cb526ec252fb11b0a76d56e0e48f0b203efa3a10563f8861d2f7fb790dedff04297a4e3e312e8e41197d1a183fec0d37cbce9557afedbbb03a6ef953188feb017bbb1cb5def1796118dbc2423cfe1361386fee4626ebafee47a133c35f48cf154a8246a4d98757067cd4ff4afef039b6556723e5d31e141ca4febc559acddf505fdefc7a7e8c7b255be9bb1d8bed2230a0fa4a3f79c4a7db3f7e4e93654aca1ff5b3e839adb1a037ed34e1e710d15a60f0cfe2d342c85e983a0db062de84f4ee0a6eb4fae37c15343cf184f63c2845927dffef931faa1ec8b80df8adc94423a7fff5ba85ff650dfe70d2d75545eb793efe6c236f6b0be2398edb0f5c4ca79d4d0521bb0bce10507d2c4417f0afe0d343085e983a01b072de82f74a19baebfd07b125a4ae899f88e85184fa374b30eebd7a0a6a9829efb762e35b73505fc7624c427d2c441a7d0e1834fa3cce49c80694a6bb7d39b3ffc93566c7d9388bc01d330b3fee3a839c4eebe76e361fa20e8d6410bfa0beddb60bafe42eb45e8a9a0678ca7313313661dfd72fbebf4d9b6d7bbfd86b0f701b3678807e4ee45d9c9f9fce6abf28612da50fe2d5f8266d7f8ba3bc6f73d81c6f63e32f46fa161294d1f04dd3a68417fa109dd74fd85d68bd05341cf184f63ca845bda9ae8d9d5f3a8a68b8d3542ffea044e99955c40a78f9a45ccc8dd7a983e08ba79d082fe827f2b4cd75ff01ec8a5809ebbe6156be36954df98650df38fe55fd0d29f1e93fba68498faa82117d2a0dcd121a6363399e983a09b072d1671e8af7bdd9bae3fd5df5ae8b96ba2b1369ec68c09b390ff7bed3db4bdbae33695917eb9fa660da5e386b9677bcaaefa6bfa20e8f6410bfa83095b0940cf81f5108be3694c997069ed667ae1bbdbbbbcb94ad690e3289e4e1d793de5a5f691cd6a5c7a98b0fd2181feba666cbafe54ab231a4c187a56a3e798326186ec93cd2fd2aae28eef100ef70b36b6f7641adfb7ebfda3c32d57473ed307c16818b4a03f3583968eef87ea3aa1e7ce4463753c8d3913667739af2e7e9f5615bf43d561dea8c536fa18ddeb081a5978a8eb76c6c272b4eae154ae3ce82f302fd34f02e5a21c3c75b49830f41cb99e63ce840532b6a96457cf0e07fb0a79e293822571dde7a60f82d13268417f910f5aaefb72056830f4fc2b94581f4f63d684a3e18bacb20f3061953451962c01d3f527db9f60e9a3cd8483f537d63e97d1334c38d6d4d1457f6544a30319062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a3676d26fc9f97fe43d74efb1b27f7e4ab4fd2d803c6f07f3f74cf227ae08e0768d8dec3e8ee87efa28af24a3afbf8b33ba4310b7768ad69a86fa0db67dfc1135f3bf71a4a494d0998f1abcf566ae9af8c6842ebb1da54aa072de80ffa53ab50b9d2a067395efea9a3693c35c2842fbde652baf88a8b48805df2cf253e131e34645064d142ee9008c4b209437f2149c4d644a6eb4f75e7ed3461e85975b4e4cb93d1b376133efa84a328333b8bcf0e776cdb41575e78150d1e32887efe7143c099f0861f37f034ebd6aceb308b16334826403693164214336b96f8d43f9ddaed2cb4abb495e59574cdb46b69d97bcb3ad429da32e1b707d3b20f3ea1bd47ef4d6c27ae048fc7570f2b73e5e72be9a6bbe7d1a2fb1ef6cd84df7ee36ddf4a8008315b11608775e6ef5ff7ed0b6fa3634f3e565e154172c8884679e5211468d7a005fdfd0a1ffa0b41888a9240cf184f8594b49b3033cba5af2fe586bb66d51a7af5c5d768c26113e8df4bfeddc984993933333c7eca71dc8884c1ddb1f0766edaccbc84f9b20e5a3f67ff6779c7ec3f86cfbafd0feb32706e5e0e37fa732f39878ef8fd111d969199793ef6e0e3bc6dec60e946ef37da67ba6c9993f581b5c95ae739b227dd81000020004944415417ff39e072b430f282c2029e47f4830d88a2bfa2cd762e55c7aa09437fed27b5d1a8bf65cb96d121871c42f3e6cda3993367f2ef637d7d3dcd9831833efdf4537afef9e769d8b061fcef81d22af2db80c5d865c2d0b3fbf4acdd84ffef8905f4dce2e7b9b16ed9b4954a7696d088517bd1b34f3cd7c984999a6fbeee66fe77ff656a7f83123348abe932831406da557e5687f51ab5304966c8ccf8c5ff6fbcf546b29ab5989d5a3fb7ce6a599f025d1316b36f31c3b5f6c37f561cea759070068f583561e8affd1e8c68d45f2c9a30f4ec3e3d6b37e1479eff3b2d7dfd6dee1bdbb66ce366cc0e6196d61bb3b66fd916d4448581fa9b272bb33b13b65e8f1626665d9ef337363668b1e567316316262cca29ec55c8b3b0a56836c3653762f99bb030dc091327f034397939643561fffec284a787737e11308fb8310bfa3b9ba03f65b20ab920bb66c2d0b3fbf4acdd8499d131b3b1de296d351fab09fbcf0cad8a979d09b3a56f51a775095b9835fb8c0d4ed3ae9a4673af99cb97a6fdafc506327aabd917f4c8a731078ced70d319fb9c5dff6607336576139a75e68d9970e071ccae410bfa83fe42764e8509a1678ca7424e4698b030577146fef17b1f079c09fb5f23b5ce6c033dca24734dd85a56efa2debe59ebe5d74da7fb6f5dc07931f30c744dd8dfa0ad378f0983f59fc57ef7edf7fc1ab6ffcd625613c635e15f473d3b072de8efd747e6a03f854edb4d51d033c653a34c58984d51bfa24e46e76faec1ee8eb6ce2a5927ad773cfbcf78fdbf23d6b4e2396576ed38d8ddd1fe262c0c972daf8b65667f137efca127f8b538ebc1da37fe90f1ddde1deddf3f554346ac5e13b6de0007fd417faabe4fc1cab1d384319eb6d377cb78aa6d261c4ca4f8dc5902b166c2ced2456dc10898aebf60ed97fd5cb509cbd68ff4f61290d1334cd8de58b8a67419d1e8e814062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a367d798b0ff1dcad60d0664f0b347305e7bf1b56ef790eeaebc48f3fb97cdeef67ef0ae07e986f937f0cd3a741d32a2d1d146dd8316f4676fd44dd79feade43cfed44319e12b9c284c50028f68c66c1b3eed1eca4794134aa87a3d0cad33968417fa1c528925430e148e8c9e5859ee57885935a46cfae3061365bbcf5c65be9ba9baff3ed192d8474d18c8bf81ece6c363972cc28ba63f61d1d5e83c84c73d13d0f51e9ae32fea285238f9b4c6fbdf63f129b70b0ed25c5f3bad6e788c5a6052c00ecef6c4f6bb65907db6483cda43332d2f98622d619b9ffd69781f6a0666f7f127958d9e2ed4ce1ceecc31148a03c32a25155a74c393a4d18fa93895478694dd75f78bdea3a17f48cf154a8c315266c35b7409b55880d3c261d33896f11c966c95faef8ca679ad6973e8899acff4e58cc5c45badcbc5c6e8ecce0fd5fbc2076ba121bdeb30d3ed8c1ea65ffb69ab57f79d6b73f8974ecf58d588e0e3ec4e91cb4a0bfe0f18934054c385282a1e7879e4367156e4a193dbbc2840508ebec94fdcdfab206eb4c99cd926fb9fe16bae4aa4b88edb8b5e8de451d5e90c066b2c284f71b3f96ef09ed9fc77addd8ba04cd4cd85a9eb8a67bd5acabf8fb828f9b721c8d3d600c09a1b3f2d98b1eac466b9d59b17ec084834b5da709437fc1e313690a99412bd2ba4cc80f3db7df9783f1d425d784037d69ba33b2500c5598b0304d6b1ef672073193666f3ff23761ab410b13664bd6b7dc309fcf9e9909b383cd8cfb0de84b7dfa1575306e6b5d30e1d0864413062d6b4ba1bfd0e2166a2a9870a8a4ec49073dabe52aa36757cc849909aef878055ff215879869321365d784ad3361aba0d84c38d0acb63b13ee2a4fa033377ecdf9de4574d3ddf3301356abe30ea5e93461e8cfc6c0fe52b4cca0657f6becaf017a0e3c138ec5f1d415266cbd094bcc3259b0c43557f695b1bed7d7ff9ab0ac0987724d582c85e39ab0fd0316ab41e7a005fdd91f6398b0fd8c450dd0b3fdac65f4ec0a1366c8fc9fd3b4bee5482c09676465f2f7f3fabfa45cd684d99b93c4f56756cf1fff7c3abf7611e8ee68ebab0865ef8e668f56897eb13e8a372ed92f91ce35c8884647fb749a30f4677fc44dd79f6a02d033c653a129d79870775f02bb37bcb0ce76557f194d29cff44150f7a005fdd9ab54d3f5a7baf7d073fb1325d17ac8e819261c4005feef2cb6ce76211a3d046269d082fef468ccc95aa1e76b88ddf41aad47cc9970b406d2c97ec988c6c97689ba4c1eb474f088b63a4dd79f6aded0b36aa2669527a3e7a898099b85df9dad91118d8e1e62d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a7695098bbb8fd97ecf915ed4b7deccf5f38f1bc27eb39275e38dde45bde9f6d977f876cd324b16ddb74646343afa65c2a005fdd91779d3f5a7bae7d07360a2b1389ebaca84c5ce552c7c97ff6d7a44affe537547b55534ecd126b71ea60f82260c5ad09f7dea365d7faa7b0e3d0737e158194f5d65c2ec51a1f1878ce7bb67b1ed20d99ecfec1083a3ff9b8dd8dd776c66ca5ec2f0ec13cf117b839178f142773361568f78b392d894c3ff3965b64de53917ff9997cf9e4d66cf13cf5f700b3dbf78896f266cbdcbd5ffd9e5671f7b86b7fd8d57fedbe1ad4faabfeca19667fa2068c2a005fd85aa26f974a6eb4fbe47dde7809e2b7d6f9063a462793c758d093313bcffb6057c065c515e412f3ff3324dbb7a1abfcd5d6cace1ff66236192dbb66ce31b61b07c627b4b1678f1e204eb72f4db6fbc4d5b366de5cbddfe2f67102f7bb06e8bc976d7122f8bb02e470f1e32888b2cd09b93c49b9898c18bb734a958628f64a0307d10d43d68417f91a82b785ed3f517bc077229a0e78709e369bb665c63c2d6fd7bd9b5b985772ea493ce3889bf5f58ec372a769ceaca3c5987c54b15ac6f361226ecbf9f74575f2beb127457262cde717cc3fc1bf8b2b9ff7ed6d63731b16d3685f1cb7d95d5a5367d10d43d68417feab416a824d3f5a7baf7d0f3af44637d3c758d095b978845f8c4ccd7fa96233633eeeaf582c14cf8c2bf5e40b3ae9cdde14d48a22effd7288a6d33bb326196cf6ab4ddbdd909261c7c88d33d68417fc16314490a987024f4e4f342cff2cc6472c8e8d915266c9d458a8bf5fed774fddf196c7db39158f6e8ea1dbfc166c2fe1b9eab3873b3ee670d130e2e6f9d260cfd058f4fa4296406ad48eb32213ff47cad6fb213ebe3a92b4cd8fa5624b1d599d518d997eaece3cf26ff371b896bc2ec73f6f2851ddb7604bd26fcf8434ff0efa8b826ccae21b36bcf0bef7ad0271ad69ec71e7c9cee7ef82e0af79a304c586e28d43968417f72b10a27354c381c6ae1e5819ec3e326934b46cfc69bb075f62aee861630d8924ac9ce123af2b8c9f4d2d32ff13fb3bb8dc55ecfecffecee6576d393ffddce5ddd1d2df2b03b9ed9218c9d09f7da697fe37f9b73e76cfe5625f62e637163d5aa2f5749dd1d0d139691b4be5719427f72710a37b5cca0156e1d26e5d37552093d3ba302193d1b6fc2a120f3bf262cf208c131b314ef210ea5bc584c23231a1d7c740d5aa1f415fa0b8552f7694cd75fe43dec5802f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9ea3c284cdc2efced6c88846470f4d1eb474f088b63a4dd79f6aded0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a367291336ab9b688d6a02338f7d587591caca6383168ee82660b2fe5493879e551335afbc50f51cb2099bd745fb5ad4dcdc4c53a74ea5c58b17536262a27d15a16410084000fa832ca28900f4dc7d3461c201f8cc9f3f9fe6ce9d4bb366cda21b6eb8219abe0fe88b0b08407f2e08129a183201e819261cb25844c29494146a6c6ca4a4a424fe1b0708384900fa739236eab29b00f40c1396d2183b6b9b376f1e37dfe4e4649a39732666c3520491381202d05f24f490d73402d073f0886039da8f91386b137fc66c38b88890421d01e84f1d4b94a49f00f41c3c0630610b23eb599bf83366c3c14584146a08407f6a38a214330840cfa1c501266ce1c40cd7e3f15046460695949450616121d5d4d410bbbbafa9a92934a2480502611280fec204876c4612809e430b0b4cf8174e6fbffd364d9932851e78e0013aebacb3282e2e8ebc5e2f3df5d45374d96597d192254b68d2a449a151452a10902400fd49024372a30940cfa1870726dc052b61c2a1a3444a10504700fa53c71225e927003d771d0398304c58ff37142de84400831644114d04a06798b0b49e211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a067987050112e5dba94a64c99420b162ca0a953a79210cde2c58b69faf4e9f4c20b2fd0e4c9938396830420100e01e82f1c6ac8632a01e839f4c8c479bd5e6fe8c9a33b654a4a0a793c1e4a4d4da5d2d2522a2828a0fafa7a6a6e6ea6c6c6c6e8ee3c7aa79d00f4a73d0468804202d073683061c2164eb7dd761bcd9e3d9b9a9a9a7c7f4d4a4aa23973e6d075d75d171a51a402813009407f61824336230940cfa1850526ecc789cd821b1a1a7c7f4d4e4eeef0ffd0b0221508844700fa0b8f1b729949007a0e1e1798b01f23ebd91b66c1c10584146a09407f6a79a234bd04a0e7e0fc61c2011889b337cc82830b0829d41380fed4334589fa0840cfddb3870907e0c3cede66cd9a4573e7cec5b5607ddfdd98ad19fa8bd9d04765c7a16798b0b4b0d9ddd0e79d771e3df2c823c496a47180809304a03f2769a32ebb0940cf3160c2cd4d2d545fdd4075d50dd458dfc87f37d53753435d1335d635f2df49491eaad8b59b5a9a5aa9a5b9855a9ad9ef56ca2ec8a4b21d15e46d23624f6bf19f362f15f6cba7922d6514171fc79f19e63ff144057df2a8aa7437257812c893e8214f12fb9d40997919e46d6ba3e4b4644a4e4da2e4b4244a494da294f4244acd48a1d4cc144acb4ce17970441701e82fbae219ebbd819e9d55802b96a32b4b775375592d5557b09f3aaa2eafe1ff6e6d6da38a9d55c49e744e494ba2e4f464caed91454c441e6692491e4a4cf650629287925292283e3e8e9b6782279e121212289efdf6c4fb4c96b8d992efff565366611106cdea6d6d613fadfc775b6b2b6f4b734333af9bfdb436b7526b5b2b35b213817a7632d0440d758d14171f4f7d87f4a4a6c666cacc4da7ccbc74cacc69ff9d959fc1ff86c32c02d09f59f1406b2223003d47c64f756ea34cb87c67159f95966eaba48ae22aaadc554dbbcbaa29a7308bcf20d98c32252db97d66999ec267996cd6e9a6d9259b853343aeaf6da0fa9a46fe9b99337989f7bda1b6919b714e8f2c2aec9fcfff9ddf2787f27a66ab8e3dcaf32300fd417fd1f4a5809edda1676d26cc4c76e7c652aa2aada6cdeb7650f98e2a3e0bcc2ac8a0f4cc344acf4ea38c5f7ed89270ac1c6dad6d54bbbb8e6aaaeab821579555ff32f3afa3bcded93460af22caca4ba79e030b60cc118802fa0b0c0ffa8b40541ab342cfeed5b363265cb6bd92b6acdf413b36eca26d3f96506a7a329fe1b2191e33dcacbc0c8a8f8fd72863b3ab6e6b6ba3eaf25aaad95dc757092a4aaaf875f0a2213da9d7a002ea37ac3715f4c935bb131a5b07fd45061ffa8b8c9feadcd07364444dd2b3ad26fcf3b75b68eb0fc5f4d3aacd7cd9b8a02897f27ae6f0ebb689c9899151446e7eed99dd6c56b1b392766d2be7d79e07ee5d44034714d1a0917d639e10f467af04a03f7bf9fa970e3ddbcb5b979e959bf0e6b5dbe9fbcf7ea60ddf6ea55e030ba857ff1e94df27979b300e7b09301366665cb2a5948a3795d21ea3fbd3b0fd0751bfa1bdedadd8a0d2a13f7dc180fed4b3879ed5330db544a7f4acc4849b9b5be89b0fd6d1ea4f7ee04ba26cb6db7b500f2c2f871a6d1bd2b16b7bdb37945075450d156f2ea35113f6a491870ce5778a47db01fd9917d158d29f6afad0b36aa2919767a79e233261f63cedf2ffaca42deb77526e8ff69b86d89dcb38cc2250575d4f9bd76fa79aca3a2a1a5248e38f1e6d5603c36c0df417263887b345abfe5463849e5513b5a73cd57a0edb84d77db981be5cba9a7a0f2ca43df619604f6f51aa72023faeda489bd66ea30927ec4743c70e545ebe5305427f4e91565b4fb4e84f2d1522e859355167ca53a1e7b04cf8eda73fa186da26dae790e1cef414b52825c0ee0cfcf6e37594919746134f1dafb46c270a83fe9ca06c5f1d6ed79f6a32d0b36aa2ce9617a99ea54d78c9ddffa5c1a3fa5361df7c677b8ada9413d8f8dd16aaaeaca563ce3b4c79d9761508fdd945d6f972dda83fd594a067d544f59517ae9ea54cf8c3973ea7b48c34beaf328ee8205055514d3b37eca249671d6c7c87a03fe34324dd4037e94fba73413240cfaa89ea2f2f1c3d876cc2ab97ada72deb76d2de070ed5df53b4402981d59faea78123fad0880387282d576561d09f4a9a6695e506fda926063dab266a4e79b27a0ed9849fbfeb0d1a317e4fcacecf34a7b7688912026cebd0b55ffe44a7cc384a4979761402fdd941d58c32dda03fd5a4a067d544cd294f56cf219bf03fe7bd42874d39d09c9ea2254a09bcffe2a7f4a759272a2d536561d09f4a9ae69565bafe5413839e551335ab3c193d876cc20f5df52c1d72c238cc84cd8ab592d6b0579b2d7bf54bbaf8ae3f2a29cf8e42a03f3ba89a51a61bf4a79a14f4ac9aa839e5c9ea59ca84d9f687782cc99c60ab6ac9aa0fbfa7ad3fee34de84a13f551137ab1c37e84f353166c2d0b36aaa669427ab6729131e3caa1fe5166653af013dcce82d5a1131811d1b4af8eb247ffa76b3f1260cfd451c6ee30a708bfe548363260c3daba6aabfbc70f42c65c2c79c3b9196bdf625edb14f7f18b1fe7847dc829d9b76117b33cbc1c78ea5d71f7bcf781386fe220eb95105b8497faac13113869e5553d55b5eb87a963661d6cd6f3efa9e5a5bdb68df4347505c7c9cde9ea37669026c8797afdfff8ebf4e72d484613cbf5b4c18fa930eb77119dca83fd510850943cfaac93a5f5ea47a0ecb845937b7fd544c6cdfccde830a69e89841cef71c35864560dd573f53c9e632da63f400ea33a8d057869b4c18fa0b2bf4466472abfe54c3b39a30f4ac9aae73e5a9d073d826ccbae9f57ae987951ba9646b19e5f5caa181c38b282d2bd53902a8292402b5bbebf94b1bca7654f0f73b0fd97700c5c5755cc1709b09437f2185de8844d1a03fd520fd4d187a564dd8bef254eb39221316dd64d3f18d6bb6d2c6b5db28bf570ee5f7cea5de037b508227c13e1228b95b02ad2dadc46e1228dd514115c555346078110ddcbb6f97ef7876a309437fe67e09a24d7faa49073261e859356575e5d9a96725266cedeaae6de5b4edc79db463e32e2ae893cb97ab0b7ae7524a7ab23a2228292081fada062adb5149db7f2ee1b35ec6beef905e3c0ec10e379b30f4172cbace7c1ecdfa534db03b13869e55d30eaf3ca7f4acdc84addd2dde5cca67626c469698e4a1823e79dc10720bb3282925293c32c8e523d058df44ecc1f0d26d1554baad9c5a9a5ba9f7a01e9c7161bf022952d162c2d09f54d8234a1c4bfa8b085480cca19a30f4ac9a7cd7e5e9d2b3ad266ced6e75452d956e2fa7f2e22a3e5b4b4cf6f0678e0b7ae7507a761a65e56560f9ba1bbdb1e590dde535545b55cf395694eca696e616bef4cf4e6a0a8af22833273d6cc546a309437f61cba153c658d79f3a92ed258563c2d0b3ba2898a467c74cd81f5f6d551d559454b59bca8e0a6e30a9e9c994d3238b9b32fbc9f8e5774242bc3afa8697c41efd626c6aaaeaa8b692fdaee59b69d4d736f2131536cb656c98f1a667a529eb4db49b30f4179a54a0bfd038459a2a5213869e438b801bf4accd84032164c6c3ccb89acff87e31a2aa3acacccd204f5202a566a4506a7a4afbef8c647e9d393925893fefea96a3b9b1991a1b9aa8a1b691ea6bd84f43fb4f6d03353534f37efb4e4072d2282b278332f333f809899d47ac9930f407fdd9f97d0a56b66a13869eddab67a34cb82be1d65537505d75bdcfacda8dab91da5adba8bab296d8d242726a12ffc92ec8a4d6e656bedc9d9894f8cb6f0f25a526517c5c1c5ff28ef7c4f3df09ec77423c7f5c876d3ac27f8b9ff838f2b679f96358be1ffe7fa2d6d6566a6d69e3f58adf2c4d537d133537b55073630b353735f3df09890954b5ab9a1b2fbbe6c0ea65335a560f3b91683fa1683fb948cb643f7a1ef18209773d6c427fc12c25f2cf4dd75fe43dec588213268cf1d41de3a92b4c38d8178099313338f6c3ccafb1bedd0085113263f42426f0255e669c6d1603cdc849a3cad2ea4e869bd73387ca8b2b3b19734e8f4caaa9a86b377061e49e043e536d66e69fe4e97002909c92488929897cc6ce4e12e20d5d5a377d10d43968417fc10844feb9e9fa8bbc87e69870b0be603c0d4628f8e7327a8e0a130e8e0429821190114db0b2ecf8dc6413b6a3bfb156a6e9fa531d0fe8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dbbce84173c742fddfdc01d1d889f79ead934ebdab99492127cb7a92fbefa8cb66edf42271e7b7297516b68a8a779b7cfe69f875aae5912906f8d8c68e44b8f3c87298316f417792c039560bafe54f71a7a564dd4acf264f4ec4a13fe62e56774ff1d0b2937278f2a2acbe9f26ba651dfa27e410df3a70d3fd2a5575e44179e7b314cd84fb332a2d1217793062de84fbd024cd79fea1e43cfaa899a559e8c9e5d6fc20c3d9bdd9e7cf609f4d293ffa671630fa057fef3125d7eeda53c2a2386ed4d0fdcbd88f272f3b8597fb0ec7dfef72b2fbd86a65f3c83ac339bdf4e388c9b7b6a4a2a9f0957d754f3b4afbef18aaf9c3d060de17f0b948f9d1408a3ff6edd1a9e4eb4c9da4ef66f5117cb63c221231a1ded3575d082fed4a8c174fda9e9e5afa540cfede332c653a2a83061eb0c77d4dea3e9be07efa67937dcc2156f9d256fdbb1adc34c9899f7cbafbdc867d0e2b3a3271d43179c731137e195abbeea60e062b6bdfabb6fbbcdc7ea6565fefdf14524664de515e5beba8f3ae2f7c62d779b3e089a3c68417f915b94e9fa8bbc871d4b809e7f5dbd8cf5f134ea4c585cebb5ce86c535637f13165f0bebac96cd9085090b3365d79a59790f3ff65097676fd67c4f2f7992fcaf53fbe767ff7ff9d5177dcbeaaabfe4b2e5993e08ba65d082fe6495d79ede74fd85d7abae7341cf184f853aa2ce84fbf6e9c797a699095e7df9dfe8cefb6fe37db5ce76c5356161d4cc40cffee3543e6b1e37e680a026fced9a557cb9db3f1f5bde164be302b03063362bf6bfa14c2c958b2519d55f7499f24c1f04dd3268417f32aafb35ade9fa0baf57ee3761e839bcc8cbe8392a4cd87a4df89315cb7c4bc0e2da6e2013f65f12ae6fa80fc984ef9e7f3f3df5fc629fb15bf331131687b8618c5d83befff607f89ffd67d2e185d79e5c32a2b1a705dd976ab209437f912bc274fd45dec38e2540cfed33618ca751704dd8ff71a237df7ec367761515e5be5971a099305b8616d76c3ff8f83ddfec562c47b365657663d51e838774b8b66cbdd66bcd679d4d5b67c5ac8cdcdc3c5c138e60243375d082fe2208aa252b4c580d47d952ac6320bb49147a96251838bd8c9e5d3913eeee3961eb0c942df71614f4a038a20e773d8b6bb6679d3695aebcfe726277328bb4fd8afad135975f4777dc7f6b87bba3ad77335bef80b6e6b31abdb83b5adc85cd42655daac6ddd1726237c984a13fb9d885925a66d00aa53cd3d340cfed4fa2f83f51128be3a9eb4cd8f42f975bdb67fa2068caa0e5d6f89ade6ed3f5a79a1ff4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac4490987d00000a2d494441549aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e8d995262cee809e7ed10cbe57b438d8e61b9bb76ce67b428b5bedd99dd0ecf0dfc18adda9cc9e293e78fc04fe1893f52e66965ed4c1fe2deee2531166d1ae938e9bd2a1ed2aca8ea40c19d144524fb8794d1ab4a0bf70a3d8753ed3f5a7bac7d0b39a3df3a3613c8d5a136686cc0eb68da008d401fb8df7bd3d893d1fc70c989beca27b29273b87ef372d5ea8c04c3ad0df23fd324683682265104e7eb70d5ad09f5c9461c272bc54a60ee5a4127a96232ea3e7a835617f644c449f7db9826f5fc98e7b16de45a79df447621b7ab09738646464d2e48947fa66a7cca40b0a0a68f9679fd0f557cda4ff5b741f5967afc2c4478e18c55fc62066dc6c772cfffd83d9b36f6c230fb651b978061933613951bbcd84a13fb9f8ca0c5a72259b991a7ac6782a94193326cc4c931d6ca99a6db6f1fccbcfd215d3aee2c6c84c989969696929ff9c9d19b23da799512e7ef6713e43663b6389a56ef139db9bbaabbfb3b726cdb97526cdb9ee262aea5de47b6b124c38bc41d1ed8316f4d77ddc61c2e17d2f54e40a6526ec5f0ff4ac4ecfae3661f16e602b0eff6bbbec33b6b4bc60d1bdbe6bbbd6a515f13ac3334ffb132dfac7426eb83ffdfc23bf5e7ccc51c7f95e8bc84cd56adcec7366d8d6ebd0d6765867deec2d4ca21e987078c38689260cfd8517cb40b960c2ea58ca9664dd65d03f2fc653599aede965f4ec6a13eeeec62c818e99dfcc9bafeff40a42763d98ddd425cc91cd6a1ffac742be44fdfa9baf51ff7efdc9fa6e62f63208b184cd3e17f9593dd65721b27da259b9fee60c130e4fcc229789260cfd4516536b6e99414b5dadfa4a829e319ec6c47274a077f65a9792d94d58c21cd9b562f6f287d2b2325ab57a25fdf5922b39a3fb1ebcdb77c3162b8f7dfef3c61ff96b12c54d5c02262b7bd62d37f0bcec7587e21a3466c2910f766e1cb4a0bfd0e30e130e9d95ea94a12e4743cfa19397d173d4ce84fd97a0ad3363b1942c96aad9356166c2ecfab07817b1781983d584c58b1b8e9e740c5f8a16b360366b663763590d9e2d5f5f7ae54574d38df3f9f56676f3163bb01c1dba90ad29dd66c2d09f5c9c65062db992cd4c0d3de7f17b73d81819ebe369d49ab07589587c0dd9b3c2fbee33969212137d77305b67c2e2ddc0271d3f857fce446235e1408f17f95f4f11cbd1c2e099a9b3835d5bd959b203261ce698e8b6410bfa930b344c588e97cad4a1cc84a16739e2327a76a509cbe15097dadf94654ab69a3d5b9e36ed90118d8eb69b64c23afacfea84fe7491575f2ff40c3d0b55c18443fc7e8977015b67ba2166e5c960c232b43aa78df5410bfa8b4c3fa6e5869e3fe397fe309e12c1844dfb766a6a0f66c29ac0a35a4ec074fda90e53ac9bb06a9ea69527a3e7904df8e5fbff47e326ed635a5fd11e45043e5ffa0d9d7cf96445a5a92f06fa53cfd4a4124dd79f6a56d0b36aa2669527a3e7904df8f9bbdea011e3f7a4ecfc4cb37a8bd6444ca0b27437adfde2273af58aa3232ecbae02a03fbbc8ea2fd70dfa534d097a564dd49cf264f51cb209af5ef6036d5abb9d461d34cc9cdea2254a087cbb6c2d0d1ad997461c34444979761402fdd941d58c32dda03fd5a4a067d544cd294f56cf219b30ebe2c7fffa92925292a8d7801ee6f4182d8988c08e0d25d4dcd242879c3036a2729cc80cfd3941d9d93adca43fd564a067d544f597178e9ea54c9875f1857bdfa401c38b60c4fae31d710b766eda455bd66fa7932f3f32e2b29c2a00fa738ab4fdf5b8517faaa940cfaa89ea2b2f5c3d4b9b30ebe23bcf2ca7daddf534fa90bd282e3e4e5faf51735804dadada68d5476b292b378d269e7e605865e8cc04fde9a41f79dd6ed75fe4043a96003dab26ea6c7991ea392c13665dfc61e526fafcad6fa867ff1eb4e7be039ded356a0b9bc0fa951ba8745b398d9b3c8a86ecdb3fec72746784fe744720bcfaa3457fe1f5beeb5cd0b36aa2ce94a742cf619b30eba2d7eba5cfdffc9636acde4ad93db268e0f0224acb326f372867c2616e2d6cd562d3da6d545152454346f7a7719347525c9cfb5730a03f7335676d59b4ea4f357de85935517bca53ade7884c5874b1ada58dbefe702dad59f603e5f6caa6bc9e39d47b600f4af024d84301a50625d0dad24aec2681b29d9554b96b378d9cb0278d3e7438c527c407cdebb604d09f79118b25fda9a60f3dab261a797976ea5989095bbbb875fd4efafeb39fe8e76fb75261df3cea39a00715f4cea594f4e4c849a0846e09d4d73650d98e4a623708b025e74123fbd18803f7a0a2213d63861cf4a72fd4d09f7af6d0b37aa6a196e8949e959bb0b5831bd76ca3ad3feca09f566d214fa2870a8a72f92c39b7308b3fea842332028df54dc41e0c2fdf5949bbb655506b730b0dd97700f5ddb3270d18511459e151901bfab33788d09fbd7cfd4b879eede5ad4bcfb69ab015597971156d5db793b6ff5c42db7f2aa1c4640fe5f6cca6bcc26c4acf4ea3acbc0c2c5f77a331b61cb2bbbc866aabeaa9bcb8925fdf6d6e6ae1b3dcde837a50bfa1bd384f1c8109407f912903fa8b8c9feadcd07364444dd2b36326ec8fac725735156fda451525bb69ebfa62be8c9a9699c26ff04acf4ce5c69c919dc67f2744e175ccae24d4dada46b5557554535547b5957554bbbb8eaacaaaa9bea681f27ae570b3cd29cca25e030b28bb005b8886fb5584fe029383fec25594de7cd0b37bf5accd840321ab2cd94da53b2aa96c5b059517efe63714ed2eaba1acfc0cf22426506a7a0aa5a425536a460aa56624f3ebccc9294994989ca8f71b20517b73633335363451436d23d5d7b09f06aaaf6ba486da06629f5557d451767e06651766515ecf2ccaef934b057d7228a74796442d481a0e01e80ffa0b4737a6e6819edda167a34cb82b31b365d8dd65b55453514bd595b5545d5e4bbbcb6b892d295414efe6d74293d393b941b359624b630b376d761d9a2d7b27267928293589e2e3e2f89277bc279eff4e60bf13e2f9e33a6cd311fe5bfcc4c791b7cdcb1fc3f2fdf0ff13b5b6b6526b4b1baf5ffc66699aea9bf8127173630bb534b39f564a4c4ae0b3fd86fa266aac6da484440fe5f7cea6b8f878caca4ba74cf6939b4e1939e9fc6483fd0d875904a03fb3e281d64446007a8e8c9feadcae30e1609d6666c8669475d50dd458d74875d58dc42eb2b39f869af67f7b923c7c66ddd2d4cacd5198249b75b2a5706eb4cc647f31de1e7df369d7d6b25f0dfa1793ceef9dcb978785c97b92dacd3ea74726b534b5f01381e4f4244a4e4dfafff6ed200540180602a0a72afdff83c5de45161641999b5092ca34b05470dbe758b7f6638ef5a9fd7af6dbd6d3697e6fddfc7defccbcf1bd80797e773a7e11c2ef92d98d000102040874048470c751170204081020100b08e1984c010102040810e80808e18ea32e0408102040201610c23199020204081020d01110c21d475d0810204080402c20846332050408102040a02320843b8eba102040800081584008c7640a081020408040474008771c75214080000102b1c009f0d85e2e8a834b040000000049454e44ae426082); +INSERT IGNORE INTO ORDINE (`id_ordine`, `anno`, `data_ordine`, `urgente`, `ragione_sociale`) VALUES (1, 2020, '2020-12-13', TRUE, 'dottore'); +INSERT IGNORE INTO RIGA_ORDINE (`id_prodotto`,`id_ordine`) VALUES (1, 1);[/comment] + +INSERT INTO CLIENTE VALUES ('dottore','PPPPPPP','ciao@example.com','08111111','mice','DFO383AFA','pippo','www.ciao.it','08113434','bakugo'); +INSERT IGNORE INTO TIPO_ORDINE (`id_tipo_ordine`, `nome_tipo_ordine`) VALUES (1,'fornitore'); +INSERT IGNORE INTO TIPO_ORDINE (`id_tipo_ordine`, `nome_tipo_ordine`) VALUES (2,'ignora') ; +INSERT IGNORE INTO PRODOTTO (`id_prodotto`, `created_by`, `created_date`, `last_modified_by`, `last_modified_date`, `descrizione_prodotto`, `prezzo_unitario`, `scheda_tecnica`) VALUES (1, 'anonymousUser', '2021-09-15 15:17:04.766', 'anonymousUser', '2021-09-15 15:17:04.766','Pentola in acciaio inox',14.50, 0x89504e470d0a1a0a0000000d49484452000001e1000001f90806000000b6cf86f80000825a744558746d7866696c65002533436d7866696c65253230686f73742533442532326170702e6469616772616d732e6e65742532322532306d6f646966696564253344253232323032312d30362d3134543133253341323225334131352e3530365a2532322532306167656e74253344253232352e302532302857696e646f77732532304e5425323031302e3025334225323057696e3634253342253230783634292532304170706c655765624b69742532463533372e3336253230284b48544d4c2532432532306c696b652532304765636b6f292532304368726f6d6525324639312e302e343437322e3130312532305361666172692532463533372e333625323225323065746167253344253232767a6e49774663496e59374134333047412d545525323225323076657273696f6e25334425323231342e372e37253232253230747970652533442532326465766963652532322533452533436469616772616d2532306964253344253232734e3869355a3476387363586a5653744a6c62582532322532306e616d65253344253232506167652d31253232253345374c315838253242504b665362386158527046584b34524534456b5968343430496b63694c79703325324652253246356c6a535a62733358314c33765857636d724f496445496a66376c30412532466e54796a58486449636a36552532425a486e374a77544b6a6a253242682532464a3851424559773676344149253242657645514c4866673238357972376664466642707a71796e3850517239483179724c5033397a3454494d37564b4e667a7559446e3266703876666a4d587a504f7825324665316b787448383736786925324638373862634e4b34253246667452763871573874636f685a42253246475a667a366c332532424d544e4d304c2532464f645045664625324639657961654d7332482532467179465525324242504b7a634f7725324650725748567a6541754c39515a646639346e25324677646c253246653745353735662532466d527547494a304e715758555575316b35763276577a7a412532462532464c374b567663727238583746543925324231343841706d414d676a456a474e627066465344663266454b4b3970324b54253242663732427425324625324247506d4d635125324257754a7925324636555a4d4b31675857777a3938692532463762774978397958394d48647825324235634c2532466e67533037253246584e70365250353534722532425058512532462532425943506d623579507a73505a5a4470594733616633736c70795a3478546348612532464a6645654b3565757659396738425a5632334a444f3877253246393649466c655a70436c35376d59636d25324636737a4359566a4f505437765a33667325324631426f33786538754d2532464a4437386279793964534566756e795a7a253246755350323467666b764225324259643477332532464766343373667845724450743956666c58496b5839486f74253246532532464c37337837253242463262665833377a253242332532424239386a663866377671487a4c374169253242567432506d7677315451453562726c6f6d625a363925324666594d6f782532464e6671496b377731683025324631497a636f6e777a4c4d6e54334253303477635a703825324637683446397a3565665066636e505a4d786e2532464b584f674276784877644664514365733725324666687925324258426467424268414345644f73782532463563335a61677147375a6d5025324263336a4d695968597638663042786a253246335a7a75386838253242253246784833324c386c3825324678384d345443674a414c253246363238682532464664777a6225324625324275684247714425324250253246667566495149302532464c636938496468253242477342515025324265253246332532424d2532466450356a253246344425324676395738442532465554712532465365666958547a35763156554e66365762796225324233414825324278436334343379596b4158627433316d506636494b5a33684f5a6467253246556d454b535643432532424163432532426d386925324246253242677a696a7839377a384e253246372532424e54507025324679706c4a7635445a674a54396825324662357325324250787757572532425637253246386664322532426339253246253246764e66736633587325324634446b337954632532466c62707630746325324671687a25324638644a3338507862395a6c4e376b7a25324264253246774c7575796a49777a54253242556b72253242566f333843647a4830333347582532466e745454524a2532467a317a6b763471354d504633784d367a4f307a3566546a4d53336b62717a357568622532424d2532466a75792532464f576178774173395139253246366e785a7a743878563777757739397937366257664162672532466a386a2532424225324648345625324266354925324666542532463931645034253242253242697a78764441672532424149386265505070307225324647426172396f2532466e253246316f54574d682532467a71643733634d36702532466c2532465171446651655939775474662532466a4e4334762532425938585065336a5a7125324239735825324261657a6b66706664376a2532464448253246366a7a3331502532466170662532424e322532462532464379507834555a58346449754b504f25324251716a7a587348644b6b393844636635364f5777727525324225324634576755504a34686a392532467554514d4c31394258742532466651584236507179375952422532426b356c6459753639684d354c4a5148624b7449486862374963504964557847593553564a373634775432626267306d6b384769667078516a4462532532465453787a74564c5656336e556e466e756f3966754f376f52784f394c585a4e6a3046414325324244344335684565524c376a4b7432776c3545614247786f624a68767125324669755a4634506c4e796638734457317a77363734384c36503777467770796c547568374971444a354d444f6f56784d633758513471674d3064584e4c666a47544a6453533273462532464d6a43655a486479366a5939314e6776535448765534753433594f75686f50545976496e39705079554a4176344c453630656f4c5a5544526765756e35695235513672253242733757466549456f6858507078667a5a4d764a55525655597532616a336b25324267364270484b6261445a5434477452556f565a517643486e793738796b3276502532424c5276732532424c6e4d47685437786454356363734d6f36543468753243524339626370792532426e467135726b253242664c4f4b586f38524d33735a7662466c75785a69754e7a7a37654546506455793370487243575a253246694f63583547504b714638753672735951454e31786f30613746566f7077485433364644654c74536e546c5572537053784c646a4d6f637562435963443774735472514c4b5a4135366e4e4d7739644772664272324871442532424f454c53473764673865674572506c68726d7357796c6851613077664f556f5225324243346c4370594352354c617932253246316c6f7947495236665077564d4764486d66665a356d496978727265253246785137512532424b6e3351546737454c55487a54533432253246425861544c4a7777624e2532427036594a48253246787276384d594d585a7559724235637858796c4857253246714641464e3531456d32414557647a4353796b625379797357625865453358414a61654570333566384d5a6225324265774a35253242337a427462467668356e72694d516a37557562766e6755756d38565a726c33253246716d367572514e654f556c304f6a4963576a4450433566624a375735324a6e346a546c557a5070686c5772356c47253242253246574734326e4325324665704f496475496c423045527258543839706c336b496f7a2532466548644a6d4245344f4830253246516c595552613852387236666d643149326e71554e494847564a4575467735563755253246504461466c36794945426b71656374427775434a45754b6c4837566c51743965766c563925324644794e4d33312532425970667236785937776348253246703267417935667a356b6b626e6c6b253242306577646357472532427461327a6272627536384a4d4f4c7a6a6b746b6f79564f5556374e6a697549667243586d7265576f426e563247253242446e7737587a52577a7952746f5535565a6831512532466c614e77312532464853714e43436931596779304274454453586e7a49396f64316a6f365955434f734d744f7836394c6576756d64666172516e374f5546356173416d2532422532464645512532465745563450713141784645672532426339737652487a414166347244336777786533435a62435164547667495849696d7170366c33614133726274726451736961674a5055547a7843585a346f78564e6233764731684e57523047652532426a5a754e54776c556a643073464e59366369793763496555386d6d6775524a5563766b786f6561326b7234474649483163464433354354463052253242375625324256456e706b2532427677356e6874656456794965695a4773584855346e785777364b324b4d7a595948664a56792532464f746b4b425a4c6658716254427a4e555a4d636458435059413136704e61546a3043554f6372346d334e594d66634e4f7a697471435377444c4a505634586956495250336b5a41593738476b443974493250416a6e3374696a6d436f456c4763776d616339686858784c494255497367594769675235417639525771334a25324638686a64574c74664a4770356d7264634c394e7875533978307549796b656d4467653372432532426b35473573637a505945526c6d4c4f6e305247342532425055417531783133326b475a6c386465253246344d647a4d594675382532464852325448714f464167724746486773566831673465757a624f6b394253543245656253354179576e3377585a777463457359634e68397041434f354b37724668353574794a796879617549784c47472532466a63434336505a6a7a5a39677a643372495666576a345057454372253246615763306b346e5168656246413958516d5943253242326c756341383667515548394f59685573436b31334f614f706f566a756625324239756950724772506e6462382532464264754f395a56506c4e6925324225324279566a253242333932457656736337253246466d253246794a66253242656361426139534a78596656346b6f3741324850765634484f5354444e56356d61414132785a7831527156336f375072326358575054426539704d25324264414737733144327878537665435a56682532463373786731716845596e51362532466d5655586c327041554c745a746f57757644667471377a44764e4a573671766e4b7547386378754379323936656b334a37514d4153694a384767554f384a625858324f74647169306a644273706c6e716c37347679327a34586b5230797053665837485471477a2532466134754a474733487875544d7a6179586c6a6e5337657a365038586f393052456a35336d75253242444f467334444e716a6447354d4c45686a544e6b596d707a4c394d7054523377627938792532426334532532426f463951685765253242373031704c4a56426a4e6951393357467a67584259456b3141566c2532424774374e666d6f61467649724e54564678337959554b7838483647567657346c5832304b6b357265594d6452576a636757626567753872787358626253376348326836704372426463724538485961513872713425324275622532425a386377253246346a4967614349644541694d32614e7a45554653626b4c572532466d7577736f45467148727268495163516f62515733314770652532426256346d5476497442545962316f36353730674e3847314f417a65552532425348446b6d4346764b58687264324844497076544b5952686d725566446b484a667642485471654856316f59436c666f51524851627a5a796f774973414e38457876434d3765325739517a47394f6d4564495947763976486f625a556b7332755a36714d574e524b32526a376b773659764765742532426b74476671645a6f6b49444d4849756c326658355a4c69435953706c78624e4d723168555a356b566e677473536e5243343563507035324c4e52727a6a724c4637535a484a704f4250416a724764386938456d656d5746527572746b7443326a59763559754c5030315436686a576b6a6867447a693955544f6e39386a7970664448657555253246412532424442624245655436444a4930306c63704c46454f79306f486f6a49493638793539493467734b766567426a4a745a48717472624b564974654771613049776b58625958784f5379716f4567507a66376b6e5445253246496d6b4d504b5539776b48466e734a544f44767451305945727641326d547847316c55665164756d6f3456347148394c5536327a654564777459394470327832546373444663416969416a6c4f72584653436f503677484a4c3572547a3438436250634f4e5a71334c7a6a32725067437870526569596b44653669644b4f6f4b334e4f425a4461566342417a6c5874456e614e7851556a394b5377542532466534626f6b356957395576705a4b4a59646a5969566e587669364c523153674c597a754644566a776c6d396c55343148654d495a74374133596f444d566473656f4d6e767470746f4d68587a7870456971334768306a624b6e6648795742627a495656305768694e6f4e6f426e38726d79586f72624a4b544b44776970713457706a364c62253246457455336b76636a62494d38776e7531736c4234493771544f365958425a715239463575414b4733576a4b58576b33327863433851544b5a72306d6959512532466b46694a68686159484f72543662505834727350685a6845685a394c4e523132452532466d4f7a4a3757366a526f6b617379325133654773516f496864685a4b6645594934356d34465971646a6941553563746235754b6173494e6b2532425343513764586772543244786941326b46746352634835764163684944537577416a677a41646d5756754937645a3355782532424f526562253242693559555431317364356a637a3147305442664f316f3944614f65596937574c544e53654f37436c34684675526455587638475a53786b64456a686a4457656432556c7347616f7459502532463164434a696458636950574d504a474776706145574b7451355a316f584b54556e38624a3934427354563356675271545265506f5646505243587a534d4c61695a785775706e616130706a4e597a74393070784c4f797133526b544e47467152425a53704c4b65466d74435164496c716e673950454d253246686f6b3768746346354234727072346a36685857444b384867656a4b774e4f5058734949364634564a556c5968633464494b6c6534453663552532426148614a69466c33544562464756774475777761756f58327957736c6f66585045544b734d25324252636d4e78527a5a593070566748634f7936527a385125324250703250665632783238723669636a3356733377415551764234534a497056584e62446c5439735a756c4b4b474b30697a4f61386e72623146784f4233384b6661635779436439483238546c253242505370343356346a64473472546e684d474b71757836396e7a65655650354e4d727a593963686c5a477569436532584a6250416d4b587865473053737679534a6648706777634f535655787176794366446a6f307643546c6a6f6c5965543042357566597868362532424e4d796f4e4d6d33574143356758415537345a676b6353313425324648345263673348504a796b5968456d4c6e51253246334f7155585177754b6a724e7a6247253242456b4d454a313679767a334a487a4f5951366657626b3647726847516763747a4c6c465743586825324235396162786e436467574d4b467a46466b48437442756a4d306971596332377438387775496c4578356572746830724142746d44397a6e784b69346d66766e737244727367513735434737346563253246537033795654374134354d6a763067703652253246646f6e7556674857356a456825324243343632752532464e6d373337253246527577704f6e426838725959574a56365151616d356c71322532426274367869346b3750253246586b7a6d58356c494b506f67647358384a684a686279517171693870356b6650426b583649637654586f58347035435a46643759646972464b786b6630744b6544314857664143306679557444675235565771796f4d4b6c79615a5649517a374c666a435a6775386250427170417165757573306858505a472532466d75684f387448517868622532466c313837496a363657775a577862364652574d4543666e566a302532466c52315950397742565832374c727a547070394879306b307a483671673947646c754f51674f4f454e6f56554d4453583959704a62336b7a5756462532424d494c72593556665247765751724a253242595a365847657371384277515178694e556c78504e42516b7458454159253242627039494a4545435a64474b34764f7542444d7358716c5a493769515046574d4572325a686c6b486f68795450467971355a6c5150786b747945695156615a4c5352773277644b3361364e38526c52715825324236726668514353556c5142696648374b564770636164764b566c69442532425a6b4b69654467594355253246253242674c4d5a67704732314c6e36697173474a57697550545330587251634f673469504d46757265343755497a317a3033423534306f302532463478354b78575138646b554c42524c643178556c555a586f672532464f526b536e61724442556b38565070763825324655716b316f774658786d4e4b55794b674c6231523552716b306f49636c30754a5850547139524d52704d546b6370383374667730636e666d33473878785144425255473878314d6338524e584e726b6c4a355934766b756c6a49667145374832393846696b71306c725548736f533862714b73724551626c5a324174393335676b7677526f414a6b4a7a77592532424e464959253242686a754244696f6d4e6e34656c564c74756433656b39525262526f593936616c62565330456a56655a6c53253242766d716d3559315446527a25324668346576574a6b574b5868477358585443534f624c3630494f62746e6c4e49564d70716e336125324638636173594277253242612532466776587351624a57764e6f37475658793843635038304c79656d4d5078766265654d517a6c6c6f534d4746764a36794a34523369735479587a316a6377394825324250484d616a694364657136514a58354d4a424632563163755a444257436451623169317a4c4375687642717738314d694d545364426d386255655255423058444d776c4a6d70674f7a48707347484b79666763563239756936706e734c4c6f3750543556586e4d6f51577355536c7244444a5663573234443554566b4e65377025324266304c5a34496d7671556b5239616b7774657925324231316f51594558316e46394b704b58336e4279703735755731626152425970347a4b553973784b46583166394d53774f31546c636b38714d6f5954533835253246564959767252416543573957374b4f4263516e6946474e4c4a73764266735652507a3664326d4d6179374168356331794e58484e4e4f755447725375364c4b416173536943564c6b374779457457327047636773706a7a544e5a53742532427a6a5243594e455a746c4c674a7a346a6e70546859306a6e5a6234253242305942583256443054734530727359784d4e51384a4771436b4858576d6a35687032654d42645a495368504c56566b6252354b6c677035537a436b47524e4b4f5a4276584f304c47486675584e34504a43594e556544504f527665517a7642644e7173326a754b6e724125324264322532423879562532464a2532426c6a476a3551253242474b4e4c51667755576f356f5675767044767853486f792532467369527a376b6273473130253242516b7825324630615470736373253242356c7168305271253246566837484e4f50624939796f6e4556515257657850766348614b306866777664383457365131694e7835315a4d39597a7543436254656e5244586c744e474c473653417655617a5653392532425a38785268354c32584c253242655968684c655a5573515337304b48624e693276574571486359717a664c686859376f395a774d526f6b69754747714a33663752553441304c4a7a39676c4d52707937535977554b67346259497a5a4b79764d50526764324f616b4941614575386c526a496b436366616270346f35446b4539666d646b473839557a73754d37764e316b6a424851636157475178535a6d4e66475669797578706e7a644a38457337586c447a38496e6a74574a72673735495133346b7233656f506561796366726f484b714278526748537943627161334144253242555a4d716b3761476855574c253242393556624f4e6c48324f4d6a4b426a6a6c626a39684f46534b546c6a6b4d4b41495664694456642532425a7379787339364646655a674d785771356e6866484b4151517379527663744c3568475351513349716e794545724f35706e25324275676f51744676712532466872614f37315959474573596446645163484179617a4578634c6e3865376f63493548454e6f397351447732576d4f674a567774576258437772504d64553042624d303043336d52776a5447346a6555315659717a6f616f50566558366673584c7655382532464425324230436f71756f704d326f624a6e3037724d63394d484a6e3950516e73714143594c2532426243434d47535348435a757133793149357078474542305a38396c4466574568725549754e6f544b74704f4d346e6b537a444b506e253242435a426f565930745a764263556161446c4a5a784b71754c316a544e695866364c33665044745a756d616c774770505968716c58565363754556692532467343736d6b6559744b3436574f73385a446232724f4c487425324632346d434f766e68426a56454b6b4e594f6b656d65393732716e3674375a64364256654c507438686f7671747739544a494944527837507a68494f7070566e7a6f50323858347975537a31253242686a30754e4431457633424971354c4d396436334b75586766314d4d6d3262703542363646784c5141466c4b3354624f4663674e372532427376576f5a66564358443343616f586e47433642627a6d3543697633575944644a48464d74306867364f634a413977356e33466c7043387438534e737565714d664578344458434f4f4f70435577253246762532426c6c384350464d55345147596e5152586943676b2532466571365952323363253242773974366635776a43653567484354535959496e51253242347668446d25324270577a6a476e4d3158323425324631446c465675786a39596462443253474647797958317530415155714344694c253246624167413969665946624c73313666713667776a37626e514b32583075355545415a706a417a5a6237474e36366362327a4479496f4442616875253242374f76334c48547625324238526b6459356a315543306f583468566772354665727a7a7550777a417833676c394252484f7948386b31253242335537644275554150666f59645574796970516368344b5537477671364e494a6e636e735a394c4d7445484c67646c5a4d454f427a7733614f6a3166444b645a6a2532466b7842334b49535350253242494e5334674d30517469574241304f394b5842487458316174343647786b6d4a79696f69687650586b564c253242494962637934456e304755536f6e33534e4a384b676a623325324273396e68393548544377633449775566646a79694c6e5357456d637170526e344d3052716750373965367245415061586174333458547a666d6a335a647137735965487a7665776b34516d7a6e64386c50336d703866354e79556c5952426f644457776e5a436e453659597a68634b6442414d543869446b586d734e304779454c63686963644675475a7a3961662532423949253246376656545a6a424b565956317376304867694c3957434e306a44506d454f514c4d79484d536b5669534e427934327650655570532532464435656571566a5925324243546425324235694c4859703049545425324242734d3733516146714e36775538356234354c664d7176684e78634b78633863586c6c5159454b5652454f4b7763546d4b664b6f4834697463786561396a797076624972644e4947466f59474b774e5069307a5062435a4b6a3479597052777978554f59317a546b7a5570476b55424754475a7a50414c48684e696e682532424d6249684e5845386b25324643546e4875534d362532466f69463950424b444a394558424b4e6d6d724b71654b7662784747327636494978537a733368747a43396f543056786d446c486f744375586232712532466a4b506b7574534e335366536a6f55386957687a496f6d565677736759614c6c37394e4d63636938624f546953786f4674626e634c6c6b655743514967324d7070553553434b614b62565a783025324252614e48784c4d685576536b35594b7076666451526a536e774b5645593871544a7852795875427349394625324247376174774c66427044766c385370746f464e454151715872453850686c49754765692532424d614533577444546374776e72386a736d5344526d45677577386856576b514337656833684b3937685575366c57656c74376f434852706559795377337446796737253242376478704176715a51666f776c7a54574b327836706261666344764b366878686d675872415763423472433659417025324269742532466b4e74414a517a496c467357594b59467544456956524765564c646c4c6a4f45357967356e6156744c4c304e507078744d4c54754d3336313364397432684c68636a4f76484a587a4a387756547851423455643230704b4c415a536558312532426f6670685139316f736c4e47367a726e796553555264253242564b7a626c6b5756357672353567355130453562734b4f484465467239365537676f7231544e594d513741253242596a75475353663654253246465661626d324439336b50684137396570795337336f4957597870714a30715776704d704c6c6e58432532466a77656e47617a775569614a345657765569427473734e4b42573035574442426c344776587a6a37554a64556b766925324263384e514f7773516a496d5576435733706341564a7847566e534f423841433565676b634b38647376766a496874484c696d49676f415a505a445543485239307a6e51676433516d43466f4b3567556c627a32414966694a7676553177253246696639695230716b4a78517366727a484f65726825324659253242464d52795a67576d524e6758353946425071566a4e5250386470494276385737506671626e6c796b42253246535225324225324270516178566279785352656c6b756f626872714270753939633959526258686a2532426c784c382532426774693365304b43516f68554330507a694358646c253242394671686350684437253242567a3475676771756f4969743770336558597050494d535a4545757758335832554c685171367749657967694c7a44593125324253644132614e6d6242596a2532426173253246754766665438452532462532467748505a67715256327442327058305361424153317456534767675a5630583367794c356e6b253242343353526f714f34566434734669436f354770396b6a5068574d7848784b5a754a78353877664f6939414f3674676a38583176564f4f44786a664c4549335a3970496672565451444f565747484e505755445261624850522532466f253242624d47765377437547447a7576774b77577569307759445732546337253242766371356f312532464c46313149496a71344138446d6e6159587832434431593662573736565168392532464d534d754e42576d4551253246416154324b394a3478454369593136337a39535031786468664e316f4e6f476a37564c7050564772334e4d416f76344d364f364c613742624f3161585668795530692532423137376578354e352532424d6939726a746f486b67447036523752766d485832684b4c746f4d71342532424a4e703734326b6f77456f4655697337392532427834432532426a6e79696339456f2532464738673242706f54625254792532425a694537304648644a253246714872485175354c7750253246634f55397334544e3372335769775338474b45466d734b7a4c3745667a712532467747443850616450786845415241737a4a7853654b5271524f25324674435453453655754566573565596876596c3541796b6735304b6e45304f494f356f504c2532425348757372654254636e7535746539486c7a3859456e79483150634d253242654449426137443261473464253246336d48713633585425324225324265253242317925324653626b523268664a433525324255746379385a493473447241363525324266764b6270726739317a464e5a6a506e25324669356f7034392532427576476e7a61695757743463706b345a64625563317268714142253242733168753662357070684b3325324645776a685050334659384e5048656449467938756266656c414e4b42536b5674384749766950647a6176634f56425a77424c6a516c54306c6a6d6e68776230356a716f7747356544575461724b4b7a6e796730376a4d796525324637493238786a79614f6e674e2532427a4470396b66325325324670315a253242704933486d317825324255654665343972663145562532424a504d6b6239323831253242595261797625324638504d65695376253246444a4b637a427832613639624d70304a567157625a35313141457478537877492532426d35653342497569396a38756d557650784556346259575654437966704e302532466f46566f3777472532467834486f53354b77425549424e333078253242634574764e71646359796b6a414325324230415973584b675447435574796a253246624178683146516f6f33526e6d45656c3331594771356d67616b3030424f666b54476966746c5730374276545a6559745a41716d33754f573262534335646b597369495a455877383234376c435259553053724c4a704a46682532424f306a6e46343673456f7869316f437259716f57545a5435626a4d4958354d46306b574a49624b41347a544a4475517378626558253242596f64495669394f31766171326c64435051676674467850627238617263765146652532464130675359704352634f484b4447536434703948303875317236383862253246395825324634436350535a48726530514e5673756f737575546b59716465676670414d715045706f7844656e744d25324645476c7a36756f50486575315a3764655266654d4d387a7a676e644b574272347a4667366b6e464e42484f7874324653764b56684f456a5233456d73733043704c7a645a4238443853366f594874377977374643785a466f4c73786f674a544a5a70315777394e50352532466b32713064483547784d616e4d78384b436e56316b434172766b4a654762666f70253242524a306b68777a6a676d70576677695831416b4a4b25324234554c693825324653776a73377146616266325a6d795a6645495a43386e585076764e59395668544c6b7777716d505932574b544861454e7970684e6c526a68436b767535593369586a7349566d59504f4c61736f4d6353726b4a46465359446e78596d566c68735655736f594b35725530394a6465484c4e6470396c664350707854686771474c44332532423176304465774a5679546b2532425949757a6b55416a675a55347448686425324275776250415370367764594d6755595076253246253242623034716b5a6539304e4749703158694d45796c65314946664643347839356768616d4c6e6c4b4d2532466a7a4156434936326c4650472532425354524336655165326b4d6435334f517a4b53546f69484a6d39615a6e497138614c564c53704225324656596e636656426d66366f4c414f7931326e75434768655858486c78756d676635362532425744727a714e2532426b446e746c775130396b3025324638717066717435786269614554727278794e3547327a36364b5148426f4d6c31524e74495478324346632532424152716b6c5a7062644670557754253246344a716b4a5256617075633056374a366a53526751253246653464616c65325833426c636725324265425266594330315764774877637659716c70704d36324166316156624530556c4d67675961753070336878576b48685631737825324272566a714a36464a34644551304d6c7241337879373157757a68556d6c4c485270504d57445569465669253246526a7943253242747230617a6559696649356d45524e6b624e784e504f6a4c61683153784b77314d5525324658434e694d4f496a6741376b77683150524f57596f492532423148475833253242565751697938685452253246544f36594b393375494b347059465056335061426e253242422532464d6b564750547a4151477a544e424f43445a3349646a4469313474744b6a2532425338304325324273425066724a667258552532424b6b6b79787a6e50386e3446625875396b5838594e566b67706654686b364d5865684d773365536837714a6253496c614543794174336d756d25324263715a426a6f4864475543545125324250253246513271704c3459486b4b6471644b304c634571733579697a493669463744686b7569716f414b546632633658456950617570326d726f6b6a4a73317645396a7a43594738736f78366a68253242376b7a726e615459503379566e77253242764b64494b556c5467724172374d576b7135446d676e494a62476f6a34366d4d754b65716a7650424f324a7041384a6b6a36446c786f617341613255634648745756336f516b445562415253716970394c6a59356964464542644c676b4c773148336c4f66765175576f346530497a476c6f6754675065334d6c707a4e6245324b4e7461304c596e4a355a6d437437765164746a7878554374506f5142484a5430706f34734d584e4e74426b4d67565962304474473555335246697856335854704c53636363567a476b683779734c61713772415578676b73387a7149644a626477666a665751694b4b6c717855253242753854454c787979644376343450304653726c705a455a68416151636534676a51253246414d37426c4f7751386731754b62776765345870594b445a704b793734305733454662764b59253246253242726d364754346d443159487253737450644f774c5059796e764d5945414a474b473358444768493873386a52584b4d4651776132674c4c397a7956334f6858493478344d43647143635473253246636e516e614d6a2532426678386d47762532427042674939515136334d6b4871334c4737636c627637687a25324635632532465a74346f637a4555613869647833706d724a6d65747738776e66536d2532426f4a4241796236364a7571596b253246414564467a306846484e653349364c35336237383247596a7871474f5444346d68666a32464a3633357439457870564637774b446f416739564a4d3776553439565146374c6c424f6650696a62724a51584b54784a6b7925324242754c796246484856717036736869684e48672532423364525043303056577673354e446e734f3479745431466c4948343953795a2532467158683144425430487039726825324236554a6a7773556648666c4a682532463762476b33734e737532324e7a386872453761394b65303874734c66767a6c52513377533131674e545173734868626166394a782532465753706d42527238575a436c68475463427278414677464a756941253242586c78704778454a67774b6e4d73586f364d676637364b6a584d6d39436661554c4a66736c73574863733762776261506d3536744f69367a6d43725825324277504e487358614459716b797474714e694f6c7235663769463067445048566e693837346d377a477a3245253242526b395965354825324643707270363361324f253242734e4f32636571395a70566478656849667a41596c73386f6c64655a7a6b6f7475716c5164334f553954716354615269596e615a78306725324672796f544e49585a6354594f5a436f726c61744e5334774b7130344b63384543306449574425324239777177597a6d796f56496c786d66504e4a696931436a6d4c3473622532465274516d746b3234764355316f6d763179697432334773726846507453727a5072756a45533463764870796370413250647975784f716c46514a7a67646d734678584d6a784e702532464d4175645736704a455561645a367336712532462532466454755570474b574b495745734b634350674b6d766d79716a6e736657646e63384c794b7378446478446a476436704d544d2532424f4a50363043744c54764a6d4a507a6a635342744a576d36794c30677078745a62336d6d4f3759733467647a556b554a79253246794241415075716f4d3168477139346c7174414d62477547623652477644716b6330357a43505776434f3565476173314469764662686235564f684e416f7a3753682532464d6348696a6246617549494a4644504b3335664753743473356b714c3257632532424a61756c794c634436754e586862253242726c7149487056514b33536c3679347141554b326847574a736d716a30354a696a5a4555624241797735414355364579576131685064676b4a5a4455455451687334505a584a334878374579724c695a4b4f6d3169797048697056634b53303644504d386c567669325065454c536a646e50645579596b6b434b6a6d31454f7054705161315a5a5a50326c5159564735253242494e55634a737261396f6f796d73626d4d5452726a514c516d75494667344e683025324269365a713265314c3855464b4a614a357779583261624f6a69374154616b6b2532465162756b745537323536415439696c715579414834664a305963376461424d37517344787a253242346a68686f6778504b63575370593441326742396458625252544362715a7968626843785378314876486e3230253242584e334e546b4a555639486d6348356125324649303671463436645737734f79414977704a3641686f74595a6d452532464a3665506825324678524b4a4c74765933626f596b355a59575561704367774b71674d763165436663646b615264514558627445625359344e434f444c6a4b71766a4156385a476e4e7a4f4d79325a4d3971416f574b7833734544734c484a45746b6d394c5a6425324276546b69446142526d5166726b35624d6b51376e3647416d675731253242466d66395766526c6d7a686c4753547a4d444a3372537a3865447a6c4a776a564474585a376d37253242617873666354316535556e34494d6e6c68755367626251777138553059635263472532424e677a556a68364f71447a374f303557413544486353466e71494f34477242306d2532424f5154746b574d33556e515767707678395937566d563865724131782532423748365767736d5467384149364f457643314a484b4663784c48594433454963693070566a6f483370344264514e25324271654833736854647758536e394a6641754a474a306d4a764e73374e3372784355305156334f71253242466a67736d613563384773675477387538487a37707634734e6a59336f79796447554f4c4f716e4b67496d7438344c62433578727565634357435772613232374d596d767a396e736d5368574433253246584243734450647950533345554f4463395351706666657931546648674e4c483741415032466b43426c625957304f6d4c46674a48726c395873787a4b79746968397869324d33597754364e6a4343457a5476337141253242304a31334648696e4e73647854524d3668723639656f6c3765424b7669554236425a686e42794e56393779737173424c356e4956367068414f546e51746e4278774a356a4557313077586b6738314572316d33684c425533615250776773596147646b484979514a72723544364e422532424833374f73436c33384665675025324254707052774348424b303735437236635a6743794c484b7530723779517561356d3663385a3952464b475a4d58506f4130796d34657864585a6c706362776d7252455153676d6835366645495425324625324653416d727852726a764f6858614279463566327153566b6b6556717525324652766d7168397567344c754f526a6b436e59457672617749364373595a4e6d62646648446b394a59572532426241776244526c64253242736f6c6353486f4b4e744a694a424252737936646c6a476631514c4e7a47374a3575494f72716f70537a6c364c7531697537414248476a31535178384561453454366a48664c32366230424d5173483541696e4f79543644416763594865384d57376a577734625733315a515453567a4a3156484b4f4a654438563965374f41587751774c62797761377445576259764d253242626e6f3959533648776e6d486c4d547645647248793557516a5a556f737775533025324675454830344d374158744f536b6f3667334f3174302532426c736a467367426a6e2532426a4e72354a396b4b61424c7264646341363668646a3663644272654f4e67564f392532426d25324248353455447a776d6c79534f6151655a72384b454a454864556268395539485671646c25324254543171516873456a4c537a794e25324231783249585642634e495654543043784a4c656e39525a654f7476776e6a4d385533496b796c564445564548304452616c6b6e474a6125324677344271456656676671756d72766d373142694b4c44464d49416d44764157503131707231734b586f787070573733494c51686b347730766b6d6f4535425454776f6e6449417976694a756a354d4943783561476b344e6b5470683771566e55766e253246534f4e6a75387254504e34594e7446497671253246425a5a44484a4e43574576253242646b556e3573754973486a7343445067534a554d6d5239516c4278366a6f5375314e4e4755577041344e6e4278614f45376d4f3359253242746264667a7957457645333445554f6c305873314e4225324663776865366d47664f4a596a69335141644e394f733766366b5a795041757535735072354668644b4563365a696b6b62617a2532466b4b587430657262524e4a6e516a67496e4750776b4b766a782532464d47764172436c3256317350694e6f37766a2532424831433578536756775149683368452532425a4163394d596d66415174634a4225324249464736253246346e7857484a5a704b6f395331253242354c332532425943745069377a703361365570462532467638373049456f676c6e7a4e36652532463544515a4d615767524b61654a47666d7a367150614c4b525837797452417037782532424f4f7061554652515a62794467554833484e644f4d4433674b78546554684c66794d3333486d3254534d446c4c36417372765772516752784b653551665164366a306859755a584f316334445158794279776847356a335041447556472532464b474154785041634d7079484b78526a6c4e71456a776b484e50427643336925324650346164646130464c6542253242667a7142456f616c67436562492532427030696c6758253242325172513142493462613277366432695677595625324247444a78684939316a354425324270445130413674577a74596179325974586737706a52437525324637526d5a466e3177466d49744d4162646d59667a726f7354347676654a534c2532427477716d453659354f5134795862253242696e363641512532425344304347742532426a474e6b705a464244534577646c756d48733948477849525a65615a5a746a584a456d676556516d51733872645a4139584338324e4f52586551634c414d597a56554c6368364546594476383741506825324661357735566a50583974727957306c3450752532424473616c5233436851355a39556b4d334f48584b71464b6233376453634e4f77346e58777661784763643651786b65376c397247646678364e446844596832565a7978576d5164703665437279537938474950514a7a4f30594c6c4c31445557757a34454c634e57576677526b324c556a534e4f253242546f2532466f6470326b58686654474b516d38707956696870253242785337516b746336423032577a664b6b45493641467a7a7a37414a3679725673754170475839356968716b355142736e5237633754313663716a583469655150554f4d676a4f324c66424a5a794949664a61534c3938253242777a62454c6766757675504b66376b464a4a397455626165656d464b593133624f6d3361313073556f6c33566c35587a4c714932676b6d3536516379667a36725759355554696f5a6d326e7a436b537569317a334e432532426b59515832524965676d5a717a4625324258455253526861684b58614c354776645938436e4967385534543774377236724a4e4a57452532423149417251547846447248483641486d474a4a67526853424f2532462532423364634637434b456137686e5473337137454c6a79513253776f4f7a49523156756a6c72686f6b4b44314e78354e4325324279515a7368306771467665555a447844467a4e4e3441554e623333347a6c71453153336f2532427870745954355a6a6c6b50374469633338464c6577675645344c46707048714c634c42537672542532464d4b6d4d47386b7135333425324638304833614c416a55586856504632546c305034676639667445447375744c6f357053704b67417156454b6c7778344366774f43414b46743571364338365451755658354e686e4435705531387275306175306a253242316e755575376d675425324230504a506e4b656a5745705843632532467274734a504550674f68436872597630614b4434705875636c436a6e4a47776a6b675264764a253242717567774458596d6434486435556164484e4b706a33536c594a76616134716c72443279474e54314d73792532423639566e4c714a324f4c73464a72786d684d65666d534525324648384f7752524f327870375a324956703471563830513941727355794a743158525a734f476b353874356e5a754962554679734a4d4c782532427133614d4c7761416d4344753735714b696c44546f4a7825324636336747785453502532463779675357797777595579474a6f354170536e494a5a6566453049727668706e7454714f2532427965423376253242415166386e6f4866384832446538663879574454356677495725324662386633557a253246583446757072382532464a2532464825324656374e51354c253246627a306e3838664e4c58367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a364636762532427861702532467365706672506f58712532463746716e25324278366c253242732532426865722532467357716637487158367a3646367625324278617225324636597456253246324c5676316a314c316239693158253246597457253246575055765676324c566639693162395939533957253246597456253246324c562532462532465446716e25324278366c25324273253242686572253246735771253246784d517466682532464e3677363958253246346e253246416d25324635762532464539347725324648384679763250312532467a433350253246586c524b48253246747642334a45767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a44334c387a394333502532467774792532464d5063767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a443350333168376c2532425925324278666d2532466f57356632487558356a37462532426225324268626c253246596535666d5073583576364675583968376c2532425925324278666d2532466f57356632487558356a37462532426225324268626e2532463651747a253246384c63767a44334c387a394333502532467774792532464d5063767a50304c6325324625324643334c387739792532464d25324651747a253246384c63767a44334c387a394333502532463078666d2532466b253242437565506f667a65594f25324633253246786a2532464a44755025324673326a31253246364e6764667825324644465a6e7a46754c49436c65386a302532422532467836582532466f253246513637253242773676646458447341494e6c253246414a68653576767a47734162736d4d25324256253246656138766d7678383225324644503650676578486e76336d502532467750414e52646c575525324673765250554371592532424675594f6f4c25324276564a683244253246514b754b253246544b7651253246366468366b346e2532463025324644314f39675a3858467638445538253242624e4d2532466c7831755a4f33613546645877616b5244304a3065614b674b5769553178734e444b646a6e703564253246745a6849453870545031486c304778746156436954374876356e573464434c66705453583469253246703137515839366a486b503230703448614166304f784e36586935497641344450343047583630393879572532463736646466384539564e4d2532426765753957795a517835706548504a5772586468754e726a614a695534685169424a3935386943636f784f7657424558536d6a38496e363263526d72656a59544e4e663452484d4e78634c423048754237694f654f64557a523662414a5878504a4f65796d25324658764d306568463073724734414f395a354d52506c346b78345131625154584b473046335a642532424525324249357437346738786261596b6e253246656d6858426a72397837346f3572775365376d74514246706a67774b31326754636a564b7644563351315152396a4b7a323968527a3575305677423838364d55366575376a6d74576c57375177576d5939564e78253246723730696a6d57707077775139374b74387758772532424b797a3725324673623759304d4c31505853612532467a6f4d717256743435416266613034784a79486c4c5a696f3934536e4f4d366c7634346a4444794d675676563158646b486c534d466955436f79527353573933422532465338537044774e5850496437704637544869495a37426b59766f50615a30553775496c7a77414c55514c4f366c485a65354a597561554539547650306b7842726458686862385436514242394462456f546a6a6b33624225324247764230675542575334785a68614e66686a7238307150547557554e39692532425855704f7959703050584f43645543676873645771396d61554d4e51556e716b30425243784e696f7525324639383563575553253246675448716e41696e4a4865646c504e584270336c61384425324245444f344c366d6961584437464250736a4436336f3355534d766e56586271564232676b5837577278786d6d4d554d6470785772336d446f73545079382532464e5031323943356657356a4743524c52393925324641645a512532462532463675413634425350656b576f4346557950384758552532426d72656a3835306b4355423350436f4a4b334159706b554c6d364c627a7a5968793546346f3944446371483164253246576d65736463306e68383373384872545368526532386e5736326a58744556347765315564426951354e4c444a444130414a6742253242703078386563534334545352655962704b516b70504665436d795725324272576258794176736f76422532427a574549636e3450347941665547776c49794a6c55514d67304e716a52347a794a476542737a55657554354548774d7153503864694169735634544c69666c545957386b566c377a6d445838416553503448704a743653412532464b6e6461507951784755336942734f61456b47776f6756317766576c54632532426d54765241304d4d4432397a3336594154736a41514a34647631586b716f427059443731456b71774e76755043526541537931786462374f5772527670592532464e48757a4447784559636351592532467561494a5859704f44313538764c396d306a786c504d666230795378343967504649253242685045335a5772564e46734248614451465277706b52616675587150744e3153416747634b6c346654723375584e6e4679687356316569497147654b4e4b6b764a53587934576661695242707425324277665a7531646d54536c6c426f67433758495158426b614b7a627663695938417735385563576a6f775439327148417948656a35726a66636125324267724d51484e683631374b766f4a432532424f49517a5a3361397474714f2532424d5a6e764a2532466325324225324259706c4c634c445a62674f316b3178374c6b45253242776c325244666b4a765472717a6d335538587047444d45506b324358487735467659754142325859424f64685051426f7936416a57547650364a645632787366335a34704d754345746e7773554d336774646b526279664d314a65486a5a6156594f515949744e6c4c31337a253246436e7842364152726f7932377368505666523151614e663074586966554b626e47344a6c314f69646f323650526b73426b347472773946557a43357a396641564f714537337333316d7a46777049356e713935593355744e7859476177656c4d453666764842253246476c633651716f534a7348504936776e46635445353057464f7a4e754f7578724665253242552532425750516477626a656f6d377976636e32586c76394e7a3855306c41666a315749692532422532463868447363475158636449673279515866543137377a484675696138253246425a744f696f57496978354b7557424b625564356573376b447564657a2532465a68464d684a5a78676d716b477858576955253246637977684d652532465479594566253242636264636533477273383852684c5025324644667970316a4356547168347a25324636444b6f4e32614c4c42746e31424e6e586575524b4e436d2532464136556d594e764a7a6f3643537a6648494f354e466c75534f723351344b546d424832756a79424a787273363174517575794861716a734c7a68475a6b6e574958753258676b315a526b7554724136356a2532466c4b6b51646a697453366f34784825324633564539716469317336306433754c6c31474e34576f735164616d476f3053626559253246253246696e424c6a70516325324677417379504638694b72305164376330695978325659614a467a4c41546638674e7543574d5333636e2532464d503372557a61714167794b4a6e32484d7334746e7873676c656351253246704e72472532464861646a66575461657079646362363742644b463830562532424c49653337484e356674774c6e78576e72766342646425324632574f3738726b7158253246326a58696b6c6479765a314a685363316e2532426874313872333432586f47624f6c567a44506d6c3467685a4c655a6f347a746a444654717753374335777536524e4e694b7044796456564a704546375538644d656d39526e4632734f364c7170677a6347717377787768526e43786c4d5a664b67617748784957673959357a6c6e253242345352432532423242446c31793856647075333571553150435742335062683352513672572532466779664b77426531445a3939464b34694338393345355a644264683443465568716f356e654d664c386a7736315471327a6a6162504b4a474c55462532424525324256253242547a4776536d2532425541397a685a51695a6f304e6e616558664f6635325536694f4e25324632417868734e4a377664615238546c646f69345062484d4679787250554447656a253242565432516c464475376d38723663756b2532464a49324d71253242484355684448253242614c304844364d5231383671636e32436e2532425268703269503141334d253246504852744f3974654a6a314a52453477334f6e7a72694d784635666e786d55684d71713271376f3952344e58754c6555574737654b646c594a76416d45547a3053534e30253242694478306b556234413949414a6a586b744e576379513736486f65494b565878253246696342693767486e6a765578657a4a66494c55465762307644694a7559656475374a447868707239475a614a735a763255753472377834457539714d696f4d67455079786b3265377a6c624b4f556f6c56347125324676435769306f78636b557142563764764a6f7051706567634c307669387064567146364537477959554e5a747234414a4a67336969513037715374334174474454396c524e54356b5052616731784b717625324252547a5a38486f30346b76544348667a466c346a505862664d6c76705330726b5539324a6b3151577a6a486c4e54695a5338534a46384725324625324253783859373869637648504a4147695165675732566f596b4f6f534f5632397563424b654a303665794f4e5678735677346d6f5836646e68474a454e677a6572345a446b455a4f355445754845746b35534133672532424537624746796330436b57365479785335394361305245452532425971786e4b7165435879584b507a67527970796c725a6a4c7079652532466265516d6a65365275374c3442456b746d3731323473654473726a7234316725324665736a515757253242506172464d6a33495a77384c745364534c4c4a663259315137466f346778575070394a4e6645797354783151387a34396338756f54472532426a3346646b537337354d784131514d7a5435496e32387951597548345347474c6f3657795a72523451544f4d734747706433726e4b417159665534314e74395056366158556e36595165646e3030463665706542417337727841384633253246524b4d637158354b5161716a7676332532463276754f5a636d68354c7176305659426235594143743537564f336776546346344f7546577a326159417948306f54496f6268675233664536336f6f344a724d764f656b51253246414b32694663577639534b47766f34663673376d78584750306271665172787425324655657937504539346f654f74634f6247366157532532465835594b5465624d32426d706d39727872776a745533636a6d7a667a37627a43574975314c253242666f746e6a696d253246524d73553359397855325868444c676d4b376750384c744f7474534f4f386858337a4f4f5555375279316e50577256253246775959384b6e434f5472305a54756d736c436d6246516836757972316f7963774d6234614e324a62345473432532427145506c5525324246555636564e253242596b424678737652685471726d626f7a39306470374b4d6d253242536757773838736846626d3769333141647556672532424d63746b74686e5a345a6c6c326645334b346d617061746b7a39526e6c576c356d37564c61466c704d4c253242646f614d756151624f654b593337473954577a4e364e253246566a7850546c754c416443586c376268337579486725324232627a7867253246563368756a506c346d526961253242703657713242253242434c5639306e695a696f4834624b344e4f4455306a4255253242614863384d71757a6d36744474346d4856383056304f25324634537a357837457a476a4f6532773066774a396369643371557175426470383968626335666d7557507a6b744b774c4a71663574456d4a306151384564677a496142534c47394f306b4639553838455a677a543143363932567164564f5a5a64525263303745725235795a5769326330553774397770766e4a6979564d6458253242736473646e4a732532463854644d46336544696a533044536531596269756a316d646e553134717865747369644e666e51627a46524b58454631486456784d596a713770595561764942694c47773251253242304d726e424551684973645a53356e253246546a7a385069794c6f756f51253242465643777242325277717577634a6b4c54567750596d535269253242624a76636f504c37685539784a73506d5a37505832574b7677776f6c564c334b345a6162462532424d683356646f4143455255674e77737366646c4e74553679527647523830516a3655544865506525324238716e52366f3447306f5555764f5863374c7248554d4c6f3249424f4d636f4f756831533252334e724474415856756c597659344c38717665303759377553357a2532463653634b38416c693853696744455925324633624d6d6f34454b6845746b4138334563736d736a76575056796c383550445246566b4a644255513456713671394d77586447324668776850316f755846446f3231507975755a50344b4a6a4a4a5764464a4e735142696f6e5864427a59646c54594d6a596a5a744b506276536e75347670786651634f477a75385a5a4339253242477a754c4b553664593733693351303879543570764d65744d71565337576d6f4b7745363836796e784c37766a47475446323569773355316874253242746837517732713571794b747a4339375877792532466d6d48414b725865704636446a3663583749526c357468642532427259476d3752316d346d726b6e2532424d7157443332455339714a63622532423438785a696b41576d596d33597938746d68523855774d4c5a6a5125324236586639576f546a695457647a6a694d71516b63694c5464504755546c51334739524c32373432334e66455554336d5a314d4651415a4f50746f6c4d78343155366843646d6961442532464f794a4d6d316d5352434355684c75666e566c427968415670464f644b6a4e4e37677171653335545650764575477559733935786a47702532424a4f6c43566e4a37515644614761615349596b7361655558445a74506737734b7331614237626e50455a5679556d433631376e545a77453753546b66567159513969345930695a4a504f664b62415264466557765239624d35346a6b7a3145555248344c39695558335a53305678664d535a63452532465a6a736479645149784f63456b5852585632644a4a4f6c455a79696d73754231477a423647306834704752426855573257374a7052457947776a71626c7569253242615277474a3435314969455335796b4c3279334377794c5734653252253242392532426a55733469686d4a6a4578356b4a35717979463531467a50574f46526d494547436f6f394e7a7047527448384e4171342532466b7469253242612532465154636839496136414f516d58757a6d317453703355564a6c467a6e574265744e33704d57766d48514c4a456971474d4a66577465677642365876434a3525324262656f42586a6e35786c797a5a4379315050694d7a536a75323257636b5377774c3261336a5a666b7866754857525759755a64437333436c32624f52466375323238584652794e716f58774456755a4e65585a42735557323639646570735451354a666a386c684164377925324630323767454e4351574a6171626b3637645567337925324674714238555a6955783531796a4944456e6d31594939506367506d587a4835554f54394c536857655775634a71624f59253246787a4774385a2532425a337a4c763348373674476f31346f6d4a4e754b385036453479383032313841325837444e463973714c556a6662774e373168614146477667484957697141556b433879796f6d714f4725324655626756346233314d4d747857423530356a616c59783878714678776c72377936487265663756304652533076377452433725324673467a487930564f6f56534e4e36767a773941545175434d7348723156306256334176564b676d3663444662765261384f4d2532424651534f374f6277794867614844636f4a6b734a6c544f6751357148344f454a6f5249756830467147745731797773536e6442345070703075587379644879654358334264316925324647747631545a774f644e6a6d4357564c49466c78663576333250657a755333446a61427a5a544e67344467706674637734714f725949346637515470724f4653526376656f334470354f6525324634445051646c4f4d4b566a4f5a7439433842466e7370425951635857345a58714d45315867516b4c4773477465556c436d72485a7479367a426454466a6f6768456157586c504661487670644b7a4a47687974615a34464a4b493173746a7a75483950367539546165566c63727a536549595251762532425968464a49396b503863525a76534433526839745356474d63775331767076357a626d6841784f6a55253242516b6533253242634939377a616269714a416a542532464a61363675524d4653797342513546364152496c376f465050486b5054324f3175253242456c4849747349486e2532464a48756a7a7a597a36494759333368314163334b4e496e38506c6f4f62393773756d71764c714474356a2532464642784b4a7575714b6b46414d72633553734f456d77456e4150533471557141316c49726d71312532424d4f4e4f767764367a3254664d584f572532464872564251475351363477665530625465383035704a69495470684c5a5333526730413957574e636e4f6f444b534b3231535a6a54753966427863316b4f5a304b48623132704850762532425a66515443336e4f3747747a344c775a6b3625324242424f355966327164712532425a4a3969466a423630374a596d616e4331745039645337324825324243635a6a7578613339743342444e744c344561505a574e724842396c493034787272387447567a564f5a53477039426f686a796d4242476c7478684a424e6d6e76347a6d4839667a36462532464452656f782532465364525269526253745a3525324272596e47753634435a5249535177794d642532424e51665271417869634b5764794830483557556453636337594968737a48326b434456425a565935414967504d5847374d36754e44597063726c45463173784f514a787545545057655a627925324236784a4c78766d3233317876593464456b2532426e4c253246627249456870574e714c6a37757278506c6a654b67695845466a55726f71746a4e677936586275596f496b72744676477a314c575a43356c516d355966795352504c576c31655039726e58797a3241493347537a6a504277253242636f596e796647594c41414a467a506d773072696e66546b316551505a396c516a4367673859474b52444a63656e39562532466f69517a70655a25324670794c543278796d79494965464f314b5a6a694651534741466c6d792532426e36253246574678504a48586c53556a6754786642726944366176487a4a444175647368637832537a726e30766333344b4e2532466d6748536b6356614759426c72434939364f777871306938787a4f486d44677742735148765072763966333774356c5961624a79344f44796e444f4b536f7a6b6f4374574a6e38525978453734506a53767646385964544f6f7566783369545655685941682532425a25324642465a75646951617159556137464f79746769347743253246455235627544684f526d50487436687872634953367a76684852536a4b53794869675453397758333643344c514a32724277316e32645045634e25324243454a494143637141615a394754657425324661644e6c35333251513639745325324234436a25324644536b524f624c584e4f3867756c25324271427a4a7342544f38253246554c474956667a6c4a3972416e324f75474b4b34666f323265764333374f73516d345563583053486d733963534d6b6f253242612532466644583172674e4b684136494456422532423064584c4a52794d58696932577941306f67472532465138734b414f554969315972486b71434f5747716b567a5531764a33536f355a65434a45653376626332397167716d4e594b4841623841307a6f424342374453637463713341314d475a586c41676c794b6e6449657878734436685577553770506d737448534c5968424362467676487925324265396b58253242303137756f2532464473324d594668736b784c4838356d577a747844424a697833766d52695a64477150424536544a4225324237466c594253353264346a6f3259743446253246624543556f613858374572475a526e36455558476b5742562532464239746a58796144476c5432614d4a77463146664f253242797564594a6759694676514a2532463346374c674f2532423735486d314b64506b346a68344a6e6651525025324274596c43636c79786237345134644e63366f386d7a72706c43366b697759253242536d596c51516d683050525939376b31526a6b315339253242516232336b796e536e3277433838577a364c67506c4854307a6125324653525756304c56624c733649325545716f797a4d56476371366d7158694e25324663536869466442342532466859506453727173776452376552384d595356416a644d777033446f444b7438634e5770786a3371444c757675746d394c684c3755716d65736853515933743646637538586d253246436c6b5a686e675132427439306f697469707876424e466268312532426a534742564a414943535a68756e78253246756a717a51386432514364544f6b675a4c634832363075624a4341517852783155627237526742466945716c733642354d783545794e4d6939684c6f7a504179374b554e5036705a5a356c654f784b3136543431444c2532466d47646350376830516169765a6a4f424845794770566249543053385432355159793725324231546b4e374b69644e65414f57323871736b66786d597825324270446678714f6731454d64646e58775648414c484d25324625324645764b7258253246654c4251676a6938427431522532463166377a494767486e667539445773644a3074576568504271633825324625324251704539563171394e3754786751522532464841305857674f466b6b45357750386d456759304d465736467458764c4c6f732532464a7a663154666270765677253242626730515745624341316f4841253242364a75575639305649666b576d646c5a4b56336134567352703244476f414630497543704e4763644a76556d525053595a4d466850567153686c57492532463738536c6e4242785a4b6a6a727879705a4b7a37524d48744b4c75553041694b473934516364524872534a524436644d4c76504748775138735877253246586d7a4c54413066534b623041716854623948466675347364477a45567942766b794f587532742532465378334e76576c32755778375131664c4f6b306c4c79497a302532466e3738785574253242642532427a367a66315a686b53754e7a6b734e2532467679704a4164734c356b4c386f7a4b426339715857696131566e6139664d74534267417a4f50584b70736d316e543569485771644c25324631456c4554645a353941616138754447714b4c5a664537446f794a42356f6b553954514a25324232253242617131594f64744b4b4f504a4c7056365976344a61556e4b5a345038394c5154506158305734253242717765747874375131685753566e46437172686e253242384e314e4873566371577a3936496c326c694134567769486e6f76366539557931344c5673592532464c7142484273393138394f6d563161516233655958537867456b654e31617451763272386c3665657938564a6454504769365048506a34495757253246436e4d34537a495641366c6837353761534d776b5132532532467a586b7a6253446c4964586f78765438686e34253242415766723855644163334a796e6e47685941544439316e587546364e38586e796c53655425324665776f55535934714f30253246783554673530773148306e676b3856676e76384c524748567a253242794b5966324656596f6237665473486f467a55487a574b51564a31566f424a463638714b4c5a69253242574d7a6c3246666d756d545a756f50314b715643746250574f31396d33766e7430746674387148776d6a663172517a3754725147594456697061747a795a44645634253246706b4c485966506d5137435659575550664a74253246475a4b663445685052354e57523870644825324656253246696749387a38514b6e664a5a253242253242755277253246675a3135787031663373324d566b68253246474d793459584b7369553859704a556c6e534834627a36714e765435687a31694254497035306c6d506c4c58397570486658253246504349746e383330253246377337667349366e48745439507956586f305134424f313666527750525225324638395343436f373525324269624d6876635925324668587a30692532467371593258653753513744796177447925324241444c6d4c6c4d50704c6754624437504a5877436150526e34586f34376925324262364532322532467a7857496c4d446f5a6e396f4d77797562347643436e78764c68685a6434786b7078253246354d4b73653338635430253242336c38616a65306125324675613668714758533659744e6f3975635468586551305348583145453052596d5373596c44624f4533693663494256385a453356752532423571684137794d344c364246366a566c54342532423054377268737849306b43475567706670786e487976724f375377517771762532467350787a545a6341495a6a6c49746d41506b4e72424636787625324652496c6a73482532464a5a6d34646442384b3157724b6c7531784847572532427962443144676239537933455330417834775765443673546e435076507775335155596f5349355777782532424136615a47364c6548487769592532423373555542456f6431557052796f71634a4d4d50594f514f665a576b4979733645674d3425324248635625324651425a466d64504563696336566f68774c4a446a4439424d386541343279734846696d4138663959776a42316e5858466c462532463943706844417a33483038686642796775666874705965766e6161735a3038694642496a76476777774853314c436444444f4552647263726e7a44624b39615453633858354f4766656b504b6a7547764a5675545a645368696939783525324668395957475033344a624c3274586b79684d7948743725324669754f576c34414e436f7a44684a537264344a4c6e4177794f58433042425238646835415555744434577831376839434c64517639474263376c63523643457a4d59443571394b6646427376674169434c766a7255446c6f3744316e3975527a4350585771464374306b42354c33543277324153384b4d7a6951253242683746327642564e4d54784b4f3632592532467136707a52473453774e365934587071717664726a3674526d7936746d5269656632344b4977614777452532425a325450423056414e746a31474a476d6b6b3541307531574668253246765656336a373746344d58354634354e534b755925324675616f644165414d54583634504b514c687279693837455142253242333772793756596f7025324631515076615a4a515276766e507767473261437933576e584c3355507578495071485a384752394a466c51454e58565055514f494865584c765255742532464b64774b43627a55253246377247717561627353415a466832466b50766a6f4162614b44474a786262574561755330685368337a3847644b6c387434703256323668356d54415843253246672532466e684d32346f6a4762253242724b703773753061464271393674647231326c6d3249654e713668376d7972426f686c33537778713430477a7a73617a6b726735796b3738666749553578734e764538516f5a4a7445616773314f76393034253246396d7a536278456b31304572573834593238584a614c33694478656b43584251775335324a4a253242746a70336c647736766d6973466d7678436b3265703370253246532532467a35617971643854444a3772687a5a5a4525324670485969316b366259496f4b744330596a6d723170253242656c6a3136555239543731327335676b704556785372725064344846356f7058764c7442676d315861253242646c396b4d444562314f477a437a4b6a72357025324667324f304c556d4b546e466e4b766575774575746c6a4e4970577876763569307a642532466e454457366e336359684668355232567337475356253246576b477068626f53614b79434e3079575538376f32427a594e30553555313461453454253246766e755052624346614261587863636d63496f395a3767367532764c253242716d695661497168526d6d5478454c6278386f58664267535a7a4245524d646a69584a3236314f6b584f643973716d6a47304362623647687741764a70437137716b5155494667324c6a4530616d653430746e3644716c375a70766d4b54704e6d4f356a4b64424d7535684c64354948665a44595a62446f31506c776d7052455539646642417746644e467630587078483364786f7157426b25324279446578547a525342306e433468587442374c674e41637144743839367a524f397865723649697063376b756f7a4d455678356439783141316249554673556e743834326154775134326d43324b57764d547941496970766d72784138765739623766723063434a48765145786c3176564f785972576968347659705546744942704a4f7954666159364f4b552532464d6a71373078414b35635142434a705479614f54473161725273797a6f565653763858687025324633396162526d25324659776d676c4b3078253246573637724a73433356446f7656477751733058374149775146554d565638723561346b5579616570764f486330655a45475847634550643247326b6369713874514a334653787448326c4c504f644b7076304c54444b736c3858253242746c3162547565346625324268767151476f6f4d4d76504f474a715a38664c724236352532426f72653577666d47444825324230342532424d545a4344494e526e4e474e79316e59253246335453566e724e637450494c4147626f45253246395249546c45444f6d626c253242385a44654256436d6d6f594d2532464f566a7a453750473561464d3875704c5625324670683355634679766e35306d6a4c583871504d464262484f7a356d4b733771253242637442464f6a6f5a35664142717a6d704763546b446e7a4b506931716b56366e5763485279717356557a45335a25324676757955376d636a65377a42473857253242664b3254483345536a316c2532464d434e505866626b6e3067644b756b4d77636c465463624e4d7265384c467861363243673056544b374d51567853334d57416a59364225324246434e536f32344442696f2532464e497672626e5163364a765242695042423041353734584d566a7344545a774b35484d3833667367677a55706178494c374954387a6e5a4177417775547436477525324671466974586825324241584b627a426430675975253242644d444138384d4d343057665667414661696a694a5665383558253242454f594d46575436553144584d49426b38435376524a416538764f6f5663514e4a474e3462536858416c253246587531526d5a465a427a756565346b6d37656f416c3238722532466d4e253242447267546c4f306a78346f784b4566424c5047695a6676384c7076675641634b79704b4c71763438445a514a31374242335a3930576a3930465633253246674c3152535925324679344832714c6f2532424231522532426c6242646b597643366a725578426a754f6b45614b3269784432722532464a7169494b505179487235716e415968515269364c6a7a6764586737735235397577393659545525324265424d34614d614158704a696a666246423456575169324a7743556a6f557278646f6f6942636550564a677439253242783663373067514734535325324263394178424f353662436225324266476c625638306256734a32504c613652253246783125324643582532466f4139513557615136437a6f7257674c25324668586164564e716d367567794b4c6b4e5a42253242566e34512532424a4e6162576d44783279554f456c57784e6e4d50706a6266655a7742575863452532464c4e7535614b49746a514e4c537939655551527375694664622532467a744351736d513876376f55516d6a3948616a58253246787469453676674d517645796b4d6e456238674b722532424b34387152326d4c7546787432306b332532427651636c386e45427565304e37346c53794f6f253246464b387573756a56424c6d534945323071546457644b4f687a47467866737a4c6348506b437765704b4f645342684c4333305a6464674a61656244465564455735724a2532466d4b397049427458785a4367416c737048565032505862355625324267647975476657735163584e596751334b6233584250703073253246356c59676a4978325a76584b4c54374968487356324b6444304832624a64364c4f3963596c4847686a4b4b33397646664b506966424171566b6b346a4b644676304663533943744e4c37456f4873666525324262722532466166514839324f50435071394b62726c46775078253246737137797666577165795742764f436a4125324675634e75466e4d253246687245614f6b564c454c4f696b7a7752642532424c483133526f746830743566597730426425324251326c624b746d25324647755a45396a584c3854394f46394f615139677525324251476b54496352544d7952615933666f7748566c7a63466561466e646a4d386d59374e546c71426359357769614a706f6b4a6e6d7a776451552532427736594f444d5834734b74732532427358785948253246555673767062556a4544566646717425324276694879487055556741253246447554632532425a6352784d774e473552452532464e626f6e754466697330616e587572315a5347347a424e487945416477526f425225324255586474326f45447a3453354d4e6767763775387338647673326c315062466b44476a6b6f624f63557a25324255614e3241532532426a5964326b46615a766c3559665a4d79525a324a5759415976787353397443343725324677654e31654b576a634a374562675450654f35343069476c55336956794e5a784e525165414125324668537349534551435273564774393165576a6b7a78544d386b54797a463656334d486e63546c76534b6f6e376561636b483753765555563045704433773042484a4276753466693143636d42614e467058644672647679776254336b666e71715a304156253246584a6d6f4541665a413150772532424a66513448794b5a7472445359374b6b4c467a253246366236416674253246466c794c73396451736d756149714f5879504563624e72656675394d472532466f673363766a497a67495469333349422532464c7a517a786a6f57466a63624959426777566d45546f534c446b727a775433675a32522532463764634f65715562556649253242685834757639795a7772447064614c784f75707a393453476a726637673458476d7a5074646e75517943433949334c374a4c656772774e672532424d754a4f395234347970577a7925324662624151324a5338654b773849743237766748464437586479365a736765554359714c524674784d4954685332715834654f52744e594f48304c30576a686b674141617325324667616648686848334f494150467358794b75796c3935317a72327725324269343662443925324279743468446657334444692532426d53766b41377750364e4b67647665426b42505a68546679674a317441344a426c543074676138714174523679414865447569334e47522532466e393059797449635a47354570795571396d57754461566461375a4252726831716153253246494231655762674c304a686834714a54707a4771566b794e4f4e465475546b4867545869767838504a5275427a337251253242253242336868597176566e626e6730437a44713353587a66786351324b796830526f3575454d5151614a466678354f666a30396a783677314e6941525a6e4a6b316654306d68253246667a4a4a346525324232334e4a38724150716e324e365876314d75567a4c5931784f734b4a466335486a656548303057666d6d36354d6663436c4762664e35727a6d4b6147724f47253246413779764e6e525541746c777953375763573530346d396a5a4d6b746b655a5a53615242714f4a456d58443358565338433654566a57434d48774c4f5149654e44475a535425324673684958574e374a4d41566e253242644d25324225324677376d3962625951476c62464848506b7a63745150676c4d555369546546794c4344753567716e4b4468566833384d6f624a726f71626a707241372532425368546d615437253242356c3666424e6b4a4f4438535135506442713949756c655458304339576e504b76673261735330624c6f3648336931594654624645784449546361583246795162494a30434e522532464b34457357513648687355743067726e4139704b6b6e337971654d59796f715174596e75394c454d6532794b6e484673253242253246496d544d6c675934696b663730314c76756c5571444b46784b5158415251693567354c6e436b56576f2532426c794241414b74376275644c5533493262413963394576326c6e7839467241797464373858744a4555664f316e6a62746768563643506c5257625434436c682532466352634f2532424f4b6e3376645634766c6c4a596c414442633774253242486558566756576a49314b3665426b3635634f7a524159317367365551516f43614c587576374b76316c48497338457625324678694e427635436e3478473267797731427830442532462532425a6774454f3734353662584a4a253242516c48356e374345327074666c324363333562526e54444d46334739624c7665495238584d6d79586a354c6770486d656e6261736c3531366d4c4851683125324241354d3550594c6a7646625272623769776c62336b4854484e434c41253246506a39564b71524b637163667435386f314d704f4953784f357757676f48774e50415365564a6c474a7063536f6f6d36797655356344426e56316249474a4851335453746a4d646e575033585536744d4353637a517347304f386a4c6c53794369336956393144466a524f623979724475796f49467a664b743177464b7134757251533861523546655449614e56616b4a485949253242632532425643486b4f515533786957385950744845385565325a673941304667396367704d345831537569453248426f5a32595634667251504b366343506b4865336d4b796c7a4f4349646273717938374e3464346a6945764f753830784b66544664774b5674577958484144784c673053253242365272663249787a5179306d42326972315238744858655525324245676125324656323849622532466d56786857555850576d3830253242304c6e7272675459763658456c663054777462313768397735704b4b703144656e2532426f62595373347535524e676656684c73546e7552344a6e714825324637486170494f4170347531437662626b786a486d453962773176674f576c77575065756477744d505a495271645731756c7366686e55544c76475a4a7154764b53776363367644334c4c5049714b5376597553787a41626b645956253242766225324646443041645849514c5a3034453578536834595243545758494e4876514d686a454225324656733254613935394b5852414870614e424e4130574967717941463557786e5a4a544a38637045696871306c4c42374b4a437063346b52624f377831774468353145537537515877375142305a495856786573793743794a714f546d46724544395449455653644a4e424964765662314564454975574b5971394651505a4f416765584156574874737061475525324630795056327132417569664a4c5556703178666d6c646131496e3646664c476253307a715a49476a6d47726a72374325324667543943634a676a7654346d5457253242714779737958694f4234376f6e794e7435376a42787065583330316f31647870643552493644634e566468696d315475784d41706f384e7662504a312532465038774d48347a253242366c62707268585259695271464f5849765a3637663577536235613371714a6861336d434c73746162546558565a5a58637049766b65734d342532463231583337774c655525324641714379574b7a4c435045387672395933334369416234654a6e6857343946677643614d6f79327a73336c6c766661686e586f704d30554f413776736139327976626f3336716b6c346e6a5552597633503042444139585834253242637033434b4f7a655a4d51545331334a35566f5737525265646e4642306b756d702532466a4c556f717972426f6d436a656a316475253246463767426542737044753767734753253242796f54424f49364b463666483850485738484172694d59575639594c644c76514d5530654a58484a537a4b4f423475545262493557626d4e55332532423144783765445752787a546355327a253242354478356c565138496b4f6f36386f6c586a5a364f756b253242543136635139253246584130707a63506c47336c68344c5377766a323245504c4b7567746f6a5636253242727870523271397a693176576f37336f7a6c59774f444748424836614635374e69384a62586d6d424378366b6f6d5a46642532464b70515777384c6e6a4963416e59344c614a3855657038764f674b644378516b44676f39694b65456625324238253246335872353047366d634552757662653441347630395a78664678666d6d567369784230536234253242783953253242307239546530725176355025324646395676784c3433796c2532427866394a786138493976253246357a656e2532467856253242636a714425324659436b36253242762532427a464233356579584d66314f4b2532466f71334f496e5825324642393759376f455271526636397a396d375851366458566a78677336502532423977447a35497a4261387463502532466c6f5a6265376263357625324658586d25324225324671554948663833363650253246357158724f5a7a684f666e335872704f4579516145253246253242636f6e55632532427464712532423366667255373973347257456679253246634375492532463166312532466f253246555725324249663146763633366d33662532466d714e646250455038714d4f6a665748714d253246427442253242444f7576337a7262325468723850346434674838643847345a39704546446b763578424950253246624950776644514c3144786f452532424e25324662564f627657775438623434513747253246376d66797a4c514c31337862686e326b52634f672532467a7949415838593462763953514a3731725051787938455625324677732533442533432532466469616772616d2533452533432532466d7866696c652533459471022b0000200049444154785eec9d07981445fac6bfdd9dcd39b084258b80082288a2e279e209ea194f319ce1383d338a87f10c441573e22f8aa7a772660ce7e9e9e96156444c8882020672d865239be3fc9faab5c6ded9d99da999eaaeea99b79f679f859d8abfef9d7abbaabbabe3bc5eaf9770800008800008800008384e200e26ec38735408022000022000029c004c184200011000011000014d0460c29ac0a35a100001100001108009430320000220000220a089004c581378540b022000022000023061680004400004400004341180096b028f6a4100044000044000260c0d8000088000088080260230614de0512d08800008800008846cc23f2e790eb440000440000440202a090c39f5742dfd0ad984df3ae50f34e090df6869242a0501100001100001bb086cfaf8233af2857fd9557cb7e54a99f061d7dfa8a591a81404400004400004ec22f0fefc9b61c276c145b920000220000220d01d019830f401022000022000029a08c084358147b520000220000220001386064000044000044040130198b026f0a8160440000440000460c2d0000880000880000868220013d6041ed582000880000880004c181a00011000011000014d0460c29ac0a35a100001100001108009430320000220000220a089004c581378540b022000022000023061680004400004400004341180096b028f6a4100044000044000260c0d8000088000088080260230614de0512d08800008800008c084a10110000110000110d0440026ac093caa050110000110000198303400022000022000029a08c0841d02ef6d6ea1d6d22a6a5af513357eb48a92c60da39403f6a2f8826c8a4b4e72a815a8060440000440c0240230619ba3e1ad6fa4ba379653fdbb5f51ebcf3ba9a5b8c2576342411679061751ca6f4651dab107517c7686cdad41f120000220000226118009ab8e86d74bad9535d4b2a598ea5ffe986adff894a8a535782d9e784a9d3886d24f9d489e013d293e2f8be2e2e383e7430a100001100001d7128009ab0a5d6b2b35acfa911adff98a1a57fd442d3f6c256f7308e6eb577f9c279e12f72822cfc881947af87e943c6e18c5257a54b512e5800008800008184400261c4130bc8d4d7cd6dbf8fe4aaa7efa6d6add5a1a5269f1b919d456554bd4e60d9aded33397d2cf3c82527eb71f25e466505c4a72d03c48000220000220e00e0230e130e2d4b2b584eadfff9a1a3ffd9e5abedf44ad95d544c1fd94d714171f47b9775c4815b31e276f5d6368b5c7c5517c662a79860fa0e4fd8751dae163c933b017515c5c68f9910a0440000440c04802306189b034fdb095763ff032357efa1d51184bcdacaad4a3f6a7bcf91750c54d8ba9ee5f1f4bd46e49ea89a7e4317b52d68c532869f880f0ca402e100001100001ed0460c21221a8fbef0aaab8e151891c1d93c667a4528f97e691a7470eb5965551c9c9b3a86d775dd8e5e5cefe13a59df09bb0f323230880000880805e02306109fe4d5fff40bbcebd432247c7a46947ee4fb9b75ee0fb63e5bcc554fbef8f435ecaf6afb8e0e12b2979ffe161b70719410004400004f41280094bf06fd95146c5c7fc4d2247c7a4b9b75d406993f7f7fdb1e1a36fa8fcaa07c3ba8b9a15d2f3b5f9e429ea11767b90b1238167dff82f9d73e34cfec77d860ea5a76e9b4f43070ea44fbefe9a0e3ff73c7af7b147e9e07df70d1b5b38e5945556d29f6f98494b972fef50efe337df447ffcfdd161b74536a3b51d91721075d73734d0d577dfc3ff7be79557d0cab56b23e6cccabcf7c9a7e8c253a6505a4a4a87f253535264bb8df420603b0198b004626f6b2b6d3fe862a29610efc2b294cd6eaceaf5bfbb3aec8ee56d6aa6923fdc482d3bca255af14b524f3cf559fe20c52524c8e7458e4e04d66fdc4867fded7abaef6fd7d0b08103b9f10de8d39b9b83aac13b12133e68dfd174fdf9e7f176cf7fe4517ae59d777d27094e8453b49dd535ebe28b7c6d89a46e7f1356c199b159fef52a7ae2969b283f272792e6212f08384200262c89b9f884eba965cb2eb95c714439b79c47e9478def948feda4557ef543d24bd2094505d4ebb55be5da81d45d12102613c860ace6599093c3cdfaace38ea1a59f7cca67a8d63cc2ccbf59bf9ece3bf924dab47d070903f53761abb14d3ae8a080c62166a056131675ccf8d3d97c36dcd50c5e18f6bc8716f199fd11071e486f7ffa69a7193e4bd755fd029830377662c2fa6435392b3b5697d5a8455b45dd820b3bb961477733612b4b96d63a0367ed117589b6ffef93e51d56321e9d3b9bfefee24bbc1e7132d55599e2ef5dc5155f1d10b08b004c58926ce9b47ba971f97752b93c837b53cf17e7f9f2789b9b292e31d1f7ff5d7f9c474debb64895c9ae05b36bc238d410b01a22334feb0c3890091f306a244ff3cabbefd1bdff7c921b5bbf5ebdb8a908935ab771235f5e15261da81c66a4271e3eb1cb65d36026bcdf88bde8e687ff4ef75e7b0d07619dc18be55db6742deaf8ecdbd5bcadec602713c1ea67e9ac6d386cff719d968cfd4f60c44901334d71d22278056a933049eb72b4588d38e398dff3130deb0c97717de6f53738ff2d3b77f27e9cf8bbc3f9ecdc9ace7f395aa4b59ebc88d8091e81e2ca2e49e00001bb08c08425c956def60cd52e794f2a57d685c751e685c7fbf2b0c79c32cf3fd6b7345dfde45bb4fbfe9742dabc43149276e204ca9df567a9762071f704acb32bebcc2b90798a41bfbbcffc0dd49a9619b5300036c833e362c6e2bf8c1ac884032d475b67c3e224825d1bb52e5bb334a2ce2fbffb3ea4fa19076bbb85395a67e6fe337c6b9ba74c3ac267f6cc4cad4bd0f32e9d46b31e58c883e27f4d98fdedafb7ddd1ed92bb355ee244a73b13b69e3031e681da1928ae91dc0780ef1c08042300130e46c8eff39aa7ff475577bf2095abc773b32869683f9e876df4517ce28dd4e3991b2969687ffeb7e60d3ba8f4ac5ba8ad3ec4cd3b8828f3921328ebbc63a5da81c4c109045a2216335aebcc4ecca6ba9add32c3e9ce84dffffc0bdf72aa6895f56630f1b7ae6ecc124bb3a27e66bc73a75d42b3173ee8333566c2d6eba356137e71e9db21d5cf0af3bfceeaff7f3b4cd8ff24c51a3971c2c18c97dd80c566ffe2a4a03b13f6e7d1ddc94238d7ef83ab0b2940a0330198b0a42aea3f5849e533da07ba508ed489fb52de5d97b4ef6ee5f5125fcefef47bbef355fe4357f0973478bd5eaa9cf90faa7b63452845f234b937ff85d27e7f60c8e991508e8075b6595a59e95b8215cbabdd99b0984dc9cc84bb6a5da099b0356d30d3097526dc55fdfed750ade9c41dda769830ab27d01de9fe3773d53534846cc2a1cc8403c5153361b9ef0e52cb118009cbf1a2a6f59b69d799b710b5b605cf999840bddeba9312723279dae6f55ba8e4f45faf0df778f27a4ada7b10ffcc5b5d473b265f45dec6e6e0e526c453c1c35750f2d861c1d322454804fc9778fdaf410a43e8ce84c70c1fdee19ab0b85148f535616b87acb35b71b22096a3add75f271f7c1037abe2b232a96bc2d6ebbbc28cc48981b87b5cd423ea6566c71ef5b2ae1cf4cccfe74bed6255c17a9d9af5c77f39da7fd9db7f162f66f8fe8c23bd260c130ee9eb82440a09c0842561b66cda49a5e7dcce5fdcd0ed11479476f478cabdb9fdb11276ecfefb6b54bde855dfff33fe3499b22f9fe2db03baf29627a9f6e50f83de299d9095c667d1897b61cb4ac9f075995cccb01e7de9659ea6abe784bb336166524edc1d6ded8475b99ab5b9303f8fe228ce776d595c370de7ee68c1c4ff6e68567fa0958285375c4f0fbff022b13ba0c52cb9bbbb8e833d271cec4e66568fe8f3c03e7d3a18396be37f173d482f2d7d9be30a7477b435c6fe779c63395ad5370be5042300130e46c8eff3e61d655476d1ddd41aec31254f02e5df7511a51cfaebe60ebbce98474d6b7fbd0b3a718f3ec466c3e2cd488d9fafa5b2cbff8fbc0d4dddb6cad32b8ff21ffc2b7906f6966c3d92db49c0df54fcefc6b5b3ee4065fb1b895dcfd0766758fee6e63403d40702a61380094b46a8ada29aca2ebb9f9abedbd46dce84be0554f8f44c8acf4ce3e91a57aea7d20beeeeb08c1d97104f79f75f4a29078fe269da6aeba9f4bc3ba939c8e34a8943fa50de82e9e4e9952fd97a24b79b80f5c62e5697ffe34e76d76f2ddf7f76cf3e53b5db95b51e98b09351455dd14600262c1951669465573d484d2bd6769b33e7a67329fd98837c696a9e5e4aad9b4b3ae549e8d78332ce9aecfb7bfddb5f52f935ed1b1e747524ed3398f2eebf8c12b233245b8fe4200002200002261180094b46c3dbdc4a15373e42f54bbfec3267e2e03ed4e3f959e16d29e9f552c91937753b1b4e3e686fcabf771ac525fdbae1876437901c0440000440c0000230e130825071eb5354f7c2078173c611655d7a12659e13fee6fab52fbc4795b73fdbe5e61d69bfef78c357185d40161000011000010308c084c30842f53f5ea7dd0b5f0998332e35897afcf37a4adca3a8fdf3d6566ad95519b49684fc6c8a4bf4f0742d5b4a68d79f6fa5b68ac07760679e7b34377a1c20c06eb6da5e52a2f44513fe54d9cd55626b4c999722f85f1fb7e37a341400026e2700130e238275ff594e15b31e0b983375f238fecee038b6390711d5fd671955def66cd05ab2a69d48197f3cc297aef2a6c554fbaf8f03e6cbb9fe2c4a9ff2dba0652241741360e6b8e0e9677827a79f79067feda21d473826cc1e9d62bb77b15dbc98713343bef5917fe0ed4676040865ba9a004c388cf035ae5843a517dfd729279b05173e379b3cfd0af967defa462a3e750eb56e2b0d5a4b42610e15be348fe2d35379dad6eda5547cda5cf2d63674ca9b7fff6594f29b7d82968904d14d806d60218e0ddbb6f95e2f284c332b2383c473cfd659a8d880433c3b9c919e4633ce3e8b6f34c25e98c09e7766263ae3f63be8c60b2fe0555867c281deda245e5e51555d432ffcef7f9deec216cf335f77fe5f227a2773744714bd8b450230e130a2debc613b959c3cbb53ceb449fb51eeed17f9fe2ebbc5a5ff569495739ea0da579775aaa7c7f3b32969cfbe61b41c59a285007bfce8a6457fa73f9f783c9f695a679dfecfe65a97acd9b3cb57dc7917dd73f5553c9fd877395413663b5e5967b4ac6c7688fc7d0a0b03be6b98b549d46bd78c3d5a628b7ec41601987018f16eaba9a31dbfbdbcc3ce56712989947bd3b994fabb71ed25b6b551c5bc7f525d0013edaacad4896328f7b60b7cd7861b96afa18a6b17515b8d65361c47d4fbfdfb7dcf1f87d17c64890202ccd49e78e5559a79d105949a92c277b062af1914bb76590d8f2d058b57ffb12d25adb36636ab65ff0fd584fdaf09fbe79f30660c7ff5a0f510cf2b07fa2c0a42812e8040440460c261e2dbf9bb2ba8b5a2da973ba17f4f2a7cfa06df72325f8a3e6926b51657845c437c5e26153e378b120a72da7dbcbe91ca2eb88b9ad66cfcb59e9c74eaf56ee7a5f0902b41c2a820605d12161d127b54fb5fc3b59a307b93103bd8bb77d9216bc2e21dbd62999b95c1eaf53771d12661c05dcd90a32218e80408444000261c26bcd2736fa3c6af7ff2e54e3d721ca54efa6516cc5ed6f0c336aa7ef835e9d233ce9e4449a3f7f0e56bf8f0db0eb3e9a45183a8c7e2eba5cb4586e82110e8fa6a77d770c399095b978f1939714d98bd3061d9ca95bebbb1bb32719647b4935d67f69f1d474f34d01310888c004c384c7e75ff5d4155773c4b6d55b5ed257812282ebefd8e687678dbda885a4278d3925ffd719e78a2f8f880e5c467a450f615a751da898784d96a648b060281ee34b62ef9ee3762af0e3752594d38d835613163b5beb5a82b13b6be46d07f268c25e868501afae00401987004949b37efa49a475fa7868f57535bb0b72a45504f7c561a251f3882b2ce3f963ce2f9e308ca43567713103743892565d11b669cecda2fbb4efcc033cfd2bdd75ee37b3c485c1366d78fc552f6a4830ea249071f483575f57c79dafad6a23bae9c415fac5ed3e9ee685617bb996be9f2e5c4f25f70ca147a6bd9329a77e9349af5c042dfddd55dbd8718cf0abb5b7b68bd7a0230e14899b6b652f3861db4fba157a9e1c355a1bd6738d43ae3e32879fc5e9475d9497cf30fb19947a8d9910e04ba2380d92af40102fa09c08415c5c0dbda4a0dcb5653cd13ffa5e6ef3793b7b139ec92e3923c9438ac1fa59f3989d81dd330dfb05122a31f01ff5dacc4cd5c00050220a087004c583177f696a5c615df51d5edcf52ebae2ae9d213723328ebcad3f8661ce23588d28520030880000880802b08c0846d0a93b7a1916a9e78936adf5841addb767578a6b85395714409bdf329ed887194f197dfc37c6d8a098a0501100001d308c0846d8c08bb43ba6d5b29552f79976a9f7997c8eb0d585bfac98752c619475042ffc2f05e7f68631f50340880000880807d0460c2f6b1ed5072f30f5ba96ac18bd4f4c57a7ebd985df74dda774fca9c7622258f1aec502b500d088000088080490460c20e4683ed80d5f4fd266a786305a54e1a4b892307fb76d872b019a80a0440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c2100133624106806088000088040ec118009c75eccd1631000011000014308c0840d09049a010220000220107b0460c2b11773f4180440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c2100133624106806088000088040ec118009c75eccd1631000011000014308c0840d09049a010220000220107b0460c2b11773f4180440000440c01002306143028166800008800008c41e019870ecc51c3d0601100001103084004cd89040a019200002200002b14700261c7b31478f4100044000040c21e01a131e74e86f0d41866680000880000880801a021b3efc808e7ce15f6a0a932c25ceebf57a43c9f3e392e74249863420000220000220e03a02434e3d5d4b9b4336612dad43a520108304d6ac5943071c7000ad58b182468e1c198304d06510881d0230e1d889357aea120213264ca04f3ef9840e3ef8605ab66c994b5a8d66820008844300261c0e35e401019b08ac5cb9920e3df450aaa9a9a18c8c0cfae0830f68ecd8b136d5866241000474138009eb8e00ea07010b01310b167fc26c18f20081e82600138eeef8a2772e22609d058b666336eca200a2a920100601987018d0900504ec202066c1e9e9e994909040adadad545b5b8b6bc376c046992060080198b021814033629b009b051f78e0819493934377df7d379d7df6d9f4e4934fd295575e49959595b47cf9725c1b8e6d89a0f7514a00261ca58145b7dc45a0acac8cfefdef7fd3b9e79ecb1b1e171747e211fec71f7f9c8e3ffe78cacfcf7757a7d05a100081a00460c24111210108384fc06ac2ced78e1a4100049c220013768a34ea0101090230610958480a022e2600137671f0d0f4e82500138eded8a2672060250013861e40c0400230610383822681800d0460c236404591201029019870a404911f04dc410026ec8e38a195314600261c630147776396004c3866438f8e9b4c00266c7274d0361050470026ac8e254a0201650460c2ca50a22010309a004cd8e8f0a071b14a00261cab9147bf638d004c38d6228efeba82004cd8156142234120620230e18811a20010504f0026ac9e294a04011309c0844d8c0ada14f30460c2312f010088110230e1180934bae92e02306177c50bad05817009c084c325877c2060230198b08d70513408184400266c5030d01410100460c2d00208c4060198706cc419bd74190198b0cb0286e68240980460c26182433610b093004cd84eba281b04cc210013362716680908f808c084210610880d0230e1d888337ae93202306197050ccd05813009c084c304876c2060270198b09d74513608984300266c4e2cd01210c07234340002314600261c63014777dd4100336177c409ad04814809c084232588fc2060030198b00d50512408184800266c6050d024108009430320101b0460c2b11167f4d2650460c22e0b189a0b026112800987090ed940c04e0230613be9a26c103087004cd89c58a02520e0230013861840203608c0846323cee8a5cb08c0845d1630341704c22400130e131cb281809d0460c276d245d920600e0198b039b1404b4000cbd1d00008c4180198708c051cdd750701cc84dd1127b41204222500138e9420f2838002024b972ea52953a6d082050b68ead4a9244c78f1e2c5347dfa747ae1851768f2e4c90a6a4211200002261180099b140db425a609a4a4a490c7e3a1d4d4542a2d2da5828202aaafafa7e6e6666a6c6c8c6936e83c08442b019870b44616fd721d81db6ebb8d66cf9e4d4d4d4dbeb6272525d19c3973e8baebae735d7fd060100081e00460c2c119210508384680cd821b1a1a7cf525272777f8bf630d41452000028e1080093b82199580406804acb361cc824363865420e06602306137470f6d8f4a0262368c59705486179d02810e0460c2100408184680cd8667cd9a4573e7cec5b560c36283e680806a023061d544511e08444880dd0d7dde79e7d1238f3c426c491a07088040f412d066c213274ea4f7df7f3f7ac9a267200002200002b61038ecb0c3e8bdf7deb3a56ca70bd562c26ce301f6b364c912a7fb8bfa4000044000045c4ee0d4534fa5534e3985ffb8fdd062c2d104d0ed0240fb41000440c06d04a26922a7c584b12faedb248ff682000880805904a2c5471c37e1683a83314b92680d08800008c40e8168595175dc84a3055cec481d3d0501100001f30844cb84ce71138e962504f324891681000880406c1188063f71d484a3e5cc25b6648ede82000880809904a26165d551138e0660664a11ad0201100081d823100d133b474d381a960e624fe6e83108800008984bc0edbee2980947c3198bb93244cb40000440203609b87d85d53113763ba8d894377a0d02200002661370fb04cf311376fb9281d93244eb40000440207609b8d95f1c3161b79fa9c4aeb4d17310000110309f809b575a1d31613703325f7e682108800008c43601374ff41c316153960a1a5a6aa9b6a99a1a5beb6877433935b5365052420a65a5e45172422aa52766514a627a6cab19bd0701100001171230c56764d1d96ec2269ca194d66da3659b5ea39fcabfa18afa62aa69aca0566fab8f55425c026524e7525e6a4f1a9cb70f1d3ce038ea915624cb12e9410004400004341170eb8aabed26ac0b8cd7eba5f2fa62fa60c38bb46cd3abd4dcd6c8a591e249a78ca46c4af6a4527c9c875adb5af88cb8a6a992d84c991d89f14974f080e3e9b04153283fad1711c5699215aa0501100001100885800913be50dae99fc67613d6b544f0ddae15f4d2ea05b4ab762bef73617a3f3a6cd0293420772fca48cae126cc66c0ad6dad3e13de50b1863edcf83215d76ce2790ad28be8d451336878c1fee1b0451e1000011000010709e8f29b48ba68ab09eb383369f3b6d1f2cdffa125dfde435ef252617a7f3a7cf06934bedf519410ef09ca8a99f2675bdfa4777f7efe17338ea32923a7d321034ea4f8b8f8a0f991c0dd04d6ad5b47a79d761aefc4f3cf3f4fc3860df375e8a69b6ea259b36675e8e085175e48f7de7b2fffdb8c1933f86ff6ffd4d4d44e20962d5b46871c7288efefa3478fee544757f458bbde78e30d5f1deea68cd683803d0474adbc46d21b5b4d580790cfb7fe8f9efde60e6a696ba6d1bd7e4ba7ef7315a52566123b430af5604bd9752dd5f4e2b7f7d397dbdf264f7c229dbcf7749a30e0f8508b403a971278fae9a7e9acb3cee2ad7feaa9a7e8cc33cfec60c2cc48599afcfc7c12a6cad29d74d249dd9a30cb73e79d7776305d66ea2fbdf45250232e2b2be3ed98306102cd9c39d3a564d16c10b09f808e895fa4bdb2d5849d5e1af8b6f8137af4f3ebf90c78bf3e47d02923ff4a6949996133aa6faea1e7beb98b56ee788f9771fefef36954cf096197878c6613a8afafe7465a5555c51b9a9d9ddd6156cb4cd36ac2223d4b3b7ffe7cbafefaeb03ce84c5ecfaeaabafee60eafe3444ba55ab56f94e0284b93ffcf0c3fc6f62e6fdd5575ff966d5471e79243f316087d5acc549c2bc79f3b8798bff7ffcf1c7b471e346dfc986989117141474327bff3e9b1d41b40e04884fb8d844ca2d876d26ecf41949abb785e6be733a5536eca27d7a1d4ae78c9d1dd2f273b040b11bb79efefa36fa62fb52ca4e29a059873f4389f1c9c1b2e1731712b09a256b7ea0996b38261c6816ec8f4718fad9679fcd67bcd659b2bf395adbe93f03bfebaebb7c270a6fbef926375a61dc2fbffc323df9e4933477ee5cbaefbefbe881071ef019f7c08103f9098735bfbfa9bb30a468720c12d0b1021b0966db4cd80910ec8ee6d5c5cb6963c51afef811bba12a37b5274d3ff07eca4fef1d3697daa6dd949e94e5cb5f515f420f2c9f41bbeab6d2a0dc9174e941f7f23ba871441701ab59b29eb16bc3d6d9abffac30d4e5687f13f6bf366c5df6b6ce86bb9aa1fa97c7fecfcc95fd5ebb762d4d9b368d2f712f59b2845fc366e53cf1c413b468d1222a2a2af22d695b97defd67d86cb6cc0e760d9bfd9b9d18e000013710707a02182913db4cd8ee25812fb7bd43cf7f7bb7efb12206223e2e81fe76e813d42bb37fd85cb654aea7155bfe4b53465ddea18c929a2d74cbfb7f222fb5d1c5e3efa2bd7ae08ee9b0211b98d1bab4dcd58d56816ecc124bbdfef9ad3766599781ad66669dd11e75d4517c2978e7ce9ddc40bff8e20bdf4cdc7f261ca81dc2b0c5c9c3d4a953e9adb7de22b654cd7eb319f3830f3ec84f2ad8ac97992b33de5b6eb9856eb8e1061e11d6efbaba3ade0e3623fff9e79f3b2cbf1b18363409040212b0db7f5462b7c584ed3c13a969aaa21757df4f5fef789fdabcad94959ccfafd30ec8d98b8ab28650bf9ca161f3d951bd911effb27d19fbb283eee33774598f7f7c318b56edfc8026f43f9e4edbe7cab0eb4146f308f8cf4ead2d1433c1eeae8f7667c25d5d13b6fe5d18a3a8cb3adbf537e1ee96b7453b366cd8c0bb70fbedb7f31930bba62c8c9acd90c5b27a5a5a5aa71bca583fbffbee3b9e7fc48811b819cc3cb9a245410838b112ab2a08b698b05d00d8661a0f7f7e1dfd54b68acf7ac7154da2d3475d459e84c48878b0c79a3657aea587565c4df52d35fc39e2e907dd4fbd32077628973dfaf4ec3777f2bf1565ef4953c7cca25e19fdb0994744f4cdc81ce84e656192279f7c3237a2704d98f5502cfd0a9315773cb3592a5b8e1e376e9c6ff9db7f562c734d98cdc0455de286ad40d786c5f5eed2d252dfac583c5a653d21c152b419fa442be408d83911946b49f0d4b698b05d4b01ec4ee54f33112a770000200049444154b7bc4ea99e4cfee8119b01c7c72704ef651729d81d74eb4bbfe265ae2e594e8d2d753c651cc5d38507dc46230ac777c859d75c4dafac79903edfb6945abdcd949e94cd9f419e38f854fe18130e77121086286e4e124bc96256c9ee2466c6c69673ad3766597bdbdd4c58a40b34db16cbd92c8d7599995d8f66cbd2d65938bbbe2b8c955dfb15cf1c8bbfb1c7a6d8e17ff2e07f97b4f50480cd8e7bf6ecc9ef28158f5e89cfc5c98328d79dd145ab6395805d3ea49aa77213b6eb0ce49b9d1fd1a35fdcc837cc3865e4157470ff63437af6972d5957375650795d31edacd948d58de5c496b44bebb6d386f2d554dbdcfe388aff71ccd0f3e8c8a16707fc8c5d377e61f5bdb4b96a1ddfd0f2d8e1e7d3e1834f0fa93daa0388f2404035013c97ac9a28cad341c0ae1559d57d516ec27674bcb1a59e1ef9e27a3e6bddbf68329d31fa6f9410c20cb8a9b591febbfe715ab5e3432aabdbc16faaeaee604bdceca7a5ad89d773f698f61b56021dac4dfffe7e117dbce9154a4c48a63f8f9d8d678855ab13e5394e40ccc6fd67d78e37041582408404ec9a1046d8ac4ed9959bb01d4b00ecd1a37b965d42e4257ec354dfec3d83726868a9a37faebc855617b73f6a11ca519056442c5f4d53050d2b1847d30ebcbbdb6c6c8bcb7f7c7923ad2efe847a670ee2d791d912350e100001100001fd04ecf023d5bd526ac2769d797cb6f52d7aeaebf9d4376b4fbaeca0fb29358477fe7eb4f1dff4d29afbf91dd4a11cec66ac03fa1e45effdbc84cf98f7cc1fc30d3fd8515cb3991ef87406d53456d2f9fbdf42230a0f0c96059f8300088000083840c08e9559d5cd566ac2767578c9ea7be9e38dafd098de13f9b26fb07da0d90c75cebba75155c3ae90782527a4d1d143cfa1377f78c2f7dcf1e85e87d15fc6cd0d9a9fd5f5cf9537f1ad2dc7f73b9ace1cfdb7a07990000440000440c07e02764d0c55b65ca909db35f57ff4f31be99be28ff8cd4f278eb83868ffcbea76d2dc77dbdf8413ecc84ccaa3f3c6dd4c6facff07ad2bfdd297fcd861e7d3e43ddb37f20f767cb2e9357aeedbbb282fb537cdf9dd73c192e373c309f86f8611ce633aec0ee53973e6f0ad2155dd5d6cbdab992114bb5cb1bbb955d7c7eea8661cc41dd386870ccd03812e09d8e54baa902b33613bcf381eff6a2eaddcfe2e1d3af064fe5ac16007db6672f63ba7749bcc139f4443f2f7a54943cea2afb7bf471f6dfa972f7d52420a5d32fe6e1a9c37325855fcf375bbbea0852baea4f8380fdd77cc3b21e54122330930e3d9b66d9befc50de2719f850b176addba511830dbc94abcd98919e4471f7dc4dbba79f366a5a60f1336539f68953c01bb5668e55b1238873213b6b3a3afadfd3b2dfdf1691a5eb03f5d3cfecea0cbd1ecf9df79ef9e4165f5db03f69a5d5b3e65d40cea9735941efeec5a5a57f6eb0c98651898bb374d1b7f37257b3abf13365081eb4abfa2859fce8009ab52a5a672c4b3bebff9cd6f3abdc29035e9aaabaee2bb4b8d1d3b963f33ccde7624f67d66663d7d7afb09223bf3b6be24813dd32b5e96f0dc73cff976ae62ef2ab6ce6ed9cc96bdc189cda0adef3166655a0dd7ff396666cc6c430febccdbfa4cb2ff3b8fc54b2258dd975e7aa9af3eebbed5ecf9e5ae9e89d6141e540b026111b07382185683fc322933613ba7fcdfeffa8c16adb8867aa4f7e5376665a7b46f4ad0ddb176d7e7fceee8e6b646ea953190fa660da1fe39c3b8c1b2ad2ebfd8b694df84555ebfb343313d3306d0b963e752efac41c1aaf07dfee1867fd18b6beea3c2f4fe74e3c42743ce8784e61110bb4d5937d110adf4dfbc83ed36c58c77c182053c09db6043cc98adcbc362630db6accd0c9c19b97891029b79b383edc8d5d576945d9d1c58e959eb63ed126db1d6274e220299b0d8954bccb4f10a43f3b48916854fc04e7f0abf55ed399598b0dd671a6c79f9de65d3687763195d74c0ed343c849727b4b5b552434b3da524a6f10d3ed85151bf8bdefbf979fa70e3cb01ef9ade237734fd79bfd92199bc00cfeebe667b4a7f5bfc311dd4ff58fae33e57471a13e4d74cc0ffdaabff4b1aac3365665683070fe6db4e0a4366b3587f13b65e5f6566cb5e8e70c92597749889facf4cfdcd5f9867203cfef5b1b72a59b7a164f53ffae8a374f3cd37f39733b0174958eb63655a67d2aaaf316b0e29aa8f710276aed4468a568909dbdd4166746ccf66f676a3de198368fac10b3abc6ad01f02bb6379d6db5368afc203e88cd1d750795d096daffe8976566fa4e6b62662ef08f67adbf89697ec250dd9c9f9d43b6b30f5c91c4471bf1876a860d94b1f1e58fe577e57f5f9fbcf0fe90421d4b2914e3f01eb2c54bcbbd76a865613eecac4d84cd86a8ac284d9f7c66adcc14cd87f99bcab9930db2b5a5c2bb6deb4c5f68beeca84d9ecd97aa20013d6af3db4401d01bb278a91b45489093b31d567cbc637bf7b16b5789bf98b1bce187d6db7fb35b3571de6a5f6a44121de5c150ec496d6665af4d9b5b4beec4bbe81c8a507dedbe9cd4be1948b3c7a08301364aff563aff7b3ded12c4c532ce70a33b41a349b09cb9a70a833614623d03561f677669c871f7e78876bc2fea62f6eb2f29f098bebd862391d33613dba43adce1070c2a7c2e949c426ece419c6e75b97d2f3dfdec567b2fb151d41c70fbf90b252f2c2e977c479d89698cfaeba93bedcbe9412e393e9a2f1b7f30d3e70b89b80f51a2deb89f5ae643113667f1777245baf09cb9ab07833132bafbb6bc2feedb0de1dcd66d8cca0d94c56d41fec9ab0b81e6dbd06ddbf7f7f7ead5a9c60e09ab0bb758cd6772660f78a6db8cc233661273bc65e39b8f4c7a7f89dd24dad0d9497da8b4ede7b3af5cb1ecab78b646f320ab69147b8a0583e66feec5587ec050eec9dc6bbeab6f27da34fdefb323ab8ff7191148dbc0611f07f4e58dc012d66beccc4d81b8dd8219e21f65fbeedee1aad985933e3b55e7fbee79e7be8b3cf3e0b7877b4d588d9eb0fd961dddfd9bffe4077478ba56976d316bbb3dbbf3eebddd1ec33f67fff550183c284a68080140127278c320d8bd8849d9ee2b36bb95f6e7f97bfc5a8beb986f7b520ad0fe5a5f5a2b4c42c4a88f3c8f45f22ad97d8ab0cab1acaa8a4760b7fc903bb9e7ccac81934baf7a17895a10449b7261526dcdd0d5291f40dcfe646420f7941203801a7fd2a788b22bc3b5ae799057b3de1ebeb1ea375a59f53554329b5b43587d25f256972527a5051d69ef487bda751617a5f2565a210f309a8366151dec30f3fcc3bcfdeedcbde21ecff8cb0f964d0421070070127576e432512d14c587787d8acb8a2611755d417d3b6dd3ff24790dada5a42edbb74bacce41c2aca1e42ec6d4bf969bdf96b0f71800008800008b88380ce8963578422326113a7f6ee90025a090220000220a0838069be15b6099b7846a123a0a8130440000440c03d0474afe0fa930adb844deb887b248096820008800008e82260da04326c13366d4aaf2ba0a8170440000440c05d044cf2afb04cd8b4330977851fad050110000110d049c0a495dcb04cd8a40ee80c24ea060110000110701f019326926199b0495379f7851f2d060110000110d04dc0141f93366193ce20740711f5830008800008b89380292bbad2266c4ac3dd1976b41a0440000440c00402a64c28a54dd89429bc0941441b400004400004dc4bc0043f93326153ce1cdc1b72b41c0440000440c0140226acec4a99b0090d3625786807088000088080bb099830b194326113a6eeee0e395a0f0220000220601201ddbe16b2099b70c66052e0d016100001100001f713d0bdc21bb209eb6ea8fb438d1e800008800008984640f7043364139e387122bdfffefba6f1437b40000440000440202202871d7618bdf7de7b1195116ee6904d38dc0a904f1f81e6e6669a3a752a2d5ebc98121313f53504354b1140dca47019931871332614ae6a084cd855e1926becfcf9f369eedcb9346bd62cbae1861be43223b53602889b36f411558cb845842f6633c384a338f4292929d4d8d848494949fc370e771040dcdc1127ff56226eee8c9bee56c3847547c0a6fad959f9bc79f3b8f9262727d3cc9933311bb689b5ca62113795349d2b0b71738e75b4d504138eb688fed21f71562eba87d9b03b028db8b9234e5dcd82f17d7367fc74b61a26ac93be4d755bcfca4515980ddb045b61b1889b42980e1685b839083b0aab820947615099e17a3c1ecac8c8a09292122a2c2ca49a9a1a62776f36353545618fa3a34b889b3be388b8b9336ea6b41a266c4a2414b5e3edb7dfa62953a6d0030f3c40679d7516892dd99e7aea29baecb2cb68c992253469d22445b5a1185504103755249d2d077173967734d606138ec6a85afaa47b5fd428c76b5bf71037dbd0da5a30e2662bdea82c1c261c9561fdb5531814dc1960c40d71732701b45a96004c589698cbd263307759c07e692ee286b8b993005a2d4b00262c4bcc65e93198bb2c60306177060c717375dc74361e26ac93be0375c3841d806c4315889b0d501d281271730072945501138eb280fa770783823b038cb8216eee248056cb128009cb1273597a0ce62e0b189635dd1930c4cdd571d3d97898b04efa0ed40d137600b20d55206e364075a048c4cd01c85156054c38ca028ae5e8e80828067377c611717367dc74b61a26ac93be037563507000b20d55206e364075a048c4cd01c85156054c38ca028a997074041483b93be388b8b9336e3a5b0d13d649df81ba31283800d9862a10371ba03a5024e2e600e428ab02261c6501c54c383a028ac1dc9d7144dcdc19379dad8609eba4ef40dd18141c806c4315889b0d501d281271730072945501138eb28062261c1d01c560eece38226eee8c9bce56c38475d277a06e0c0a0e40b6a10ac4cd06a80e1489b8390039caaa800947594031138e8e80623077671c113777c64d67ab61c23ae93b503706050720db5005e2660354078a44dc1c801c6555c084a32ca098094747403198bb338e889b3be3a6b3d530619df41da81b838203906da80271b301aa0345226e0e408eb22a60c2511650cc84a323a018ccdd1947c4cd9d71d3d96a98b04efa0ed48d41c101c8365481b8d900d581221137072047591530e1280b2866c2d111500ce6ee8c23e2e6ceb8e96c354c58277d07eac6a0e000641baa40dc6c80ea4091889b0390a3ac0a987094051433e1e80828067377c611717367dc74b61a26ac93be037563507000b20d55206e364075a048c4cd01c85156054cb88b804e9c3891de7fff7dd787fbb0c30ea3f7de7bcff5fd88b50e60307767c4a365dc504d1fe350d74461c25db0c120a8fa6b88f26408407f32b490d67402d0334c585aa3108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384a54508d1482343068504a03f853051947602d0334c585a84108d343264504800fa530813456927003dc384838a70e9d2a53465ca145ab060014d9d3a958468162f5e4cd3a74fa7175e7881264f9e1cb41c2400817008407fe150431e530940cfa14726ceebf57a434f1edd29535252c8e3f1506a6a2a95969652414101d5d7d7537373333536364677e7d13bed04a03fed2140031412809e43830913b670baedb6db68f6ecd9d4d4d4e4fb6b525212cd993387aebbeebad088221508844900fa0b131cb21949007a0e2d2c30613f4e6c16dcd0d0e0fb6b72727287ff878615a940203c02d05f78dc90cb4c02d073f0b8c084fd1859cfde300b0e2e20a4504b00fa53cb13a5e925003d07e70f130ec0489cbd61161c5c4048a19e00f4a79e294ad447007aee9e3d4c38001f76f6366bd62c9a3b772eae05ebfbeec66ccdd05fcc863e2a3b0e3dc384a585cdee863eefbcf3e891471e21b6248d03049c2400fd39491b75d94d007a5664c237fde742bb6385f235139879ecc39a5bd075f5d09fb1a151d63093f5a7ac93bf14043dab266a5e79a1ea39e4e568269a93f79f6e5e4fd12225045efa7c01852a1a25154a1602fd4902735972d3f5a71a27f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e63d6845bbd2d54d7541556e4d293b2293ece13565e5333c98846471fa26dd082fe3aaac874fda9d63cf4fc2bd1581f4f63ce84d9e0f7f9b6d76875f187d4dcd618d6772b29218546f5fc2d8d2b3a96e22921ac324ccb64fa20182d8316f41758f9a6eb4ff5f7157afe9568ac8fa73167c2effefc04ad2bfb4cc9776aef1e13e8d081672a294b7721a60f82d13268417f306146007aeeac83581d4f63ca847754ff40afacbd57a9dffd61afaba857c660a565ea280c266c3f75e8af6bc6a6eb4fb53aa2c184a167357a8e1913f67abdf4c277f3a9ac6e9bd2ef5361fa003a69c4351447714acb75ba30d30741b70f5ad05ff78a365d7faabf8fd07360a2b1389ec68c097fb7eb63fa60e333217d97d213b3a9c5db4c8d2d7521a53f7cd0d934ace0a090d29a9ac8f441d0ed8316f40713b612809ebbd643ac8da73161c28dad75f4ec3773a8bea526a807f6cf194e7f3de8ffa8a9b59ee67f700eed6e2c0b9a272d319bce18358712139283a63535014cd8bec8407fc1d99aaebfe03d904be16613869e83c75a46cf3161c29f6c7e895615bf13905c5e6a2f62b7c86fa95ac73f3f6cd0143a79efcbf8bf1f5c710d7dbf6b055f6a1e5ab01f6ddbfd23d53455062c674cefc97460df138347c7d01432a2d1d105370f5ad05f70c598aebfe03d904b013d633c158a897a13ae6c28a6e757df4c6dded64edf92bd0b0fa273c6cea1a48464ba67d925b4b1f2bb0e26fcd067d7d277259fd221fd4fa0d3f6b982763796d3a215d7d296ddeb3b959510e7a1d347cda2ace402b96fa321a94d1f04dd3a68417fa109dc74fd85d68bd05341cf184f63c6845f5fbf903657ade9f4edd8236f1fbaf4c07bc8139f484d2d0d74c747e75371ede68026ccccfa82fde7537c5c3cd53655d19d1f5f446575db3b953928671f3a6acf8b42ff261a94d2f441d0ad8316f4179ac84dd75f68bd083d15f48cf134264c7873d56a7a7dfd839dbe194909a974e361ffa4dcd442aa6dda4d0f7c7a056dddfd43a7e5683113661f8cec7930fd65bf9bc813efa19fcb57d3bd9f4c0bf88d3b7ef8742aca1c1efab7d19094a60f826e1cb4a0bfd0c56dbafe42ef496829a1678ca7516fc26cf979c9ea9ba9a2a1b8d3b7e2883dcea413f6ba80d863230f7dc6aefbfeba7987f59ab0d584592113079d4a27eddd6ebe8f7c7e037d53fc71a7b2f352fbd0a97b5f4f7171f1a17d1b0d4965fa20e8b6410bfa9313b6e9fa93eb4df0d4d033c6d3a837e16f8adfa1659b5f0af86d983df1192a482fa235c59fd2a2cfafed90a63b1366cbd1330f7b9a0ad2fbd09ae2e5b4e8f3bf052cff37034ea39185bf0dfe4d342885e983a0db062de84f4edca6eb4fae37c15343cfc42fef613c258aca1bb31a9a6be899d5b3a9b1a5bed3b7213fad37cd39fc39fef7c7bf9c4b5fed7837641366097f3ff45c3a7ae8547e1df9eab77e1ff086af644f3a9d396a0eb1df6e394c1f04dd3468417ff2aa375d7ff23dea3e07f4dcce07e369949af0f22d2fd1d73b033f92b4578f03e892f1777201cc7df70c2af5db41abbb9930cb33b2f060baf0805b79fed9ef9c46e5f53b037edbf6eb73241d507482eaefae6de5993e08ba69d082fee4656abafee47b143d260c3dcb475f46cf5139137ee9bbdba9a476534072a37b1d4ae78dbb897f76fdff4ea4eaa68a0ee926f43f8e4edfe72afeb7fb3fb99c7e2cffbac3e743f246d3e5072fe07fbbe5fda9b4b36663c07afa64ee41270cbf523e7a9a72c888464713dd64c2d09fbc424cd79f7c8fa2c784a167f9e8cbe8392a4df85fdfdf493b6b360424b767fe189a7ed07dfcb3db3efc0bdf80c37a247bd2e8a411d3a8aeb99a5efdfeefe4a5b60e9f8fed7d389db3df6cfeb71b96fe813f3b1ce828ca1c4ac70fffab7cf434e590118d8e26bac984a13f798598ae3ff91e458f0943cff2d197d173549af017dbfe439f6f7f232039b62ff4ad935fe1772fbfb87a017db031f0cd5b5d613f75e40cfacdc013a9bab182ae5fdaf50e59e3fb1e4f637b1f251f3d4d396444a3a3896e3261e84f5e21a6eb4fbe47d163c2d0b37cf465f41c9526dcd4d6c0f78aae6bde1d90de8c8317d2e0bc91b4b37a33ddfae1546af3769ced76853c2d318be61cfe2ca52666d0f2cdafd333dfdc11306946520e9d3e6a3625c6bb672f6919d1c84b32f21c6e3261e84f3edea6eb4fbe47d163c2d0b37cf465f41c9526cc90adddf509bdb7f1a980f4c6f49e48e7ee37877ff6fabac7e8cd1f16874479ea989934aee808f27adbe8f68fceefb4942d0af9dd1e7fa6a179078454a629896444a3a3cd6e3261e84f5e21a6eb4fbe47d163c2d0b37cf465f41cb526ec252fb11b0a76d56e0e48f0b203efa3a10563f8861d2f7fb790dedff04297a4e3e312e8e41197d1a183fec0d37cbce9557afedbbb03a6ef953188feb017bbb1cb5def1796118dbc2423cfe1361386fee4626ebafee47a133c35f48cf154a8246a4d98757067cd4ff4afef039b6556723e5d31e141ca4febc559acddf505fdefc7a7e8c7b255be9bb1d8bed2230a0fa4a3f79c4a7db3f7e4e93654aca1ff5b3e839adb1a037ed34e1e710d15a60f0cfe2d342c85e983a0db062de84f4ee0a6eb4fae37c15343cf184f63c2845927dffef931faa1ec8b80df8adc94423a7fff5ba85ff650dfe70d2d75545eb793efe6c236f6b0be2398edb0f5c4ca79d4d0521bb0bce10507d2c4417f0afe0d343085e983a01b072de82f74a19baebfd07b125a4ae899f88e85184fa374b30eebd7a0a6a9829efb762e35b73505fc7624c427d2c441a7d0e1834fa3cce49c80694a6bb7d39b3ffc93566c7d9388bc01d330b3fee3a839c4eebe76e361fa20e8d6410bfa0beddb60bafe42eb45e8a9a0678ca7313313661dfd72fbebf4d9b6d7bbfd86b0f701b3678807e4ee45d9c9f9fce6abf28612da50fe2d5f8266d7f8ba3bc6f73d81c6f63e32f46fa161294d1f04dd3a68417fa109dd74fd85d68bd05341cf184f63ca845bda9ae8d9d5f3a8a68b8d3542ffea044e99955c40a78f9a45ccc8dd7a983e08ba79d082fe827f2b4cd75ff01ec8a5809ebbe6156be36954df98650df38fe55fd0d29f1e93fba68498faa82117d2a0dcd121a6363399e983a09b072d1671e8af7bdd9bae3fd5df5ae8b96ba2b1369ec68c09b390ff7bed3db4bdbae33695917eb9fa660da5e386b9677bcaaefa6bfa20e8f6410bfa83095b0940cf81f5108be3694c997069ed667ae1bbdbbbbcb94ad690e3289e4e1d793de5a5f691cd6a5c7a98b0fd2181feba666cbafe54ab231a4c187a56a3e798326186ec93cd2fd2aae28eef100ef70b36b6f7641adfb7ebfda3c32d57473ed307c16818b4a03f3583968eef87ea3aa1e7ce4463753c8d3913667739af2e7e9f5615bf43d561dea8c536fa18ddeb081a5978a8eb76c6c272b4eae154ae3ce82f302fd34f02e5a21c3c75b49830f41cb99e63ce840532b6a96457cf0e07fb0a79e293822571dde7a60f82d13268417f910f5aaefb72056830f4fc2b94581f4f63d684a3e18bacb20f3061953451962c01d3f527db9f60e9a3cd8483f537d63e97d1334c38d6d4d1457f6544a30319062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a3676d26fc9f97fe43d74efb1b27f7e4ab4fd2d803c6f07f3f74cf227ae08e0768d8dec3e8ee87efa28af24a3afbf8b33ba4310b7768ad69a86fa0db67dfc1135f3bf71a4a494d0998f1abcf566ae9af8c6842ebb1da54aa072de80ffa53ab50b9d2a067395efea9a3693c35c2842fbde652baf88a8b48805df2cf253e131e34645064d142ee9008c4b209437f2149c4d644a6eb4f75e7ed3461e85975b4e4cb93d1b376133efa84a328333b8bcf0e776cdb41575e78150d1e32887efe7143c099f0861f37f034ebd6aceb308b16334826403693164214336b96f8d43f9ddaed2cb4abb495e59574cdb46b69d97bcb3ad429da32e1b707d3b20f3ea1bd47ef4d6c27ae048fc7570f2b73e5e72be9a6bbe7d1a2fb1ef6cd84df7ee36ddf4a8008315b11608775e6ef5ff7ed0b6fa3634f3e565e154172c8884679e5211468d7a005fdfd0a1ffa0b41888a9240cf184f8594b49b3033cba5af2fe586bb66d51a7af5c5d768c26113e8df4bfeddc984993933333c7eca71dc8884c1ddb1f0766edaccbc84f9b20e5a3f67ff6779c7ec3f86cfbafd0feb32706e5e0e37fa732f39878ef8fd111d969199793ef6e0e3bc6dec60e946ef37da67ba6c9993f581b5c95ae739b227dd81000020004944415417ff39e072b430f282c2029e47f4830d88a2bfa2cd762e55c7aa09437fed27b5d1a8bf65cb96d121871c42f3e6cda3993367f2ef637d7d3dcd9831833efdf4537afef9e769d8b061fcef81d22af2db80c5d865c2d0b3fbf4acdd84ffef8905f4dce2e7b9b16ed9b4954a7696d088517bd1b34f3cd7c984999a6fbeee66fe77ff656a7f83123348abe932831406da557e5687f51ab5304966c8ccf8c5ff6fbcf546b29ab5989d5a3fb7ce6a599f025d1316b36f31c3b5f6c37f561cea759070068f583561e8affd1e8c68d45f2c9a30f4ec3e3d6b37e1479eff3b2d7dfd6dee1bdbb66ce366cc0e6196d61bb3b66fd916d4448581fa9b272bb33b13b65e8f1626665d9ef337363668b1e567316316262cca29ec55c8b3b0a56836c3653762f99bb030dc091327f034397939643561fffec284a787737e11308fb8310bfa3b9ba03f65b20ab920bb66c2d0b3fbf4acdd8499d131b3b1de296d351fab09fbcf0cad8a979d09b3a56f51a775095b9835fb8c0d4ed3ae9a4673af99cb97a6fdafc506327aabd917f4c8a731078ced70d319fb9c5dff6607336576139a75e68d9970e071ccae410bfa83fe42764e8509a1678ca7424e4698b030577146fef17b1f079c09fb5f23b5ce6c033dca24734dd85a56efa2debe59ebe5d74da7fb6f5dc07931f30c744dd8dfa0ad378f0983f59fc57ef7edf7fc1ab6ffcd625613c635e15f473d3b072de8efd747e6a03f854edb4d51d033c653a34c58984d51bfa24e46e76faec1ee8eb6ce2a5927ad773cfbcf78fdbf23d6b4e2396576ed38d8ddd1fe262c0c972daf8b65667f137efca127f8b538ebc1da37fe90f1ddde1deddf3f554346ac5e13b6de0007fd417faabe4fc1cab1d384319eb6d377cb78aa6d261c4ca4f8dc5902b166c2ced2456dc10898aebf60ed97fd5cb509cbd68ff4f61290d1334cd8de58b8a67419d1e8e814062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a367d798b0ff1dcad60d0664f0b347305e7bf1b56ef790eeaebc48f3fb97cdeef67ef0ae07e986f937f0cd3a741d32a2d1d146dd8316f4676fd44dd79feade43cfed44319e12b9c284c50028f68c66c1b3eed1eca4794134aa87a3d0cad33968417fa1c528925430e148e8c9e5859ee57885935a46cfae3061365bbcf5c65be9ba9baff3ed192d8474d18c8bf81ece6c363972cc28ba63f61d1d5e83c84c73d13d0f51e9ae32fea285238f9b4c6fbdf63f129b70b0ed25c5f3bad6e788c5a6052c00ecef6c4f6bb65907db6483cda43332d2f98622d619b9ffd69781f6a0666f7f127958d9e2ed4ce1ceecc31148a03c32a25155a74c393a4d18fa93895478694dd75f78bdea3a17f48cf154a8c315266c35b7409b55880d3c261d33896f11c966c95faef8ca679ad6973e8899acff4e58cc5c45badcbc5c6e8ecce0fd5fbc2076ba121bdeb30d3ed8c1ea65ffb69ab57f79d6b73f8974ecf58d588e0e3ec4e91cb4a0bfe0f18934054c385282a1e7879e4367156e4a193dbbc2840508ebec94fdcdfab206eb4c99cd926fb9fe16bae4aa4b88edb8b5e8de451d5e90c066b2c284f71b3f96ef09ed9fc77addd8ba04cd4cd85a9eb8a67bd5acabf8fb828f9b721c8d3d600c09a1b3f2d98b1eac466b9d59b17ec084834b5da709437fc1e313690a99412bd2ba4cc80f3db7df9783f1d425d784037d69ba33b2500c5598b0304d6b1ef672073193666f3ff23761ab410b13664bd6b7dc309fcf9e9909b383cd8cfb0de84b7dfa1575306e6b5d30e1d0864413062d6b4ba1bfd0e2166a2a9870a8a4ec49073dabe52aa36757cc849909aef878055ff215879869321365d784ad3361aba0d84c38d0acb63b13ee2a4fa033377ecdf9de4574d3ddf3301356abe30ea5e93461e8cfc6c0fe52b4cca0657f6becaf017a0e3c138ec5f1d415266cbd094bcc3259b0c43557f695b1bed7d7ff9ab0ac0987724d582c85e39ab0fd0316ab41e7a005fdd91f6398b0fd8c450dd0b3fdac65f4ec0a1366c8fc9fd3b4bee5482c09676465f2f7f3fabfa45cd684d99b93c4f56756cf1fff7c3abf7611e8ee68ebab0865ef8e668f56897eb13e8a372ed92f91ce35c8884647fb749a30f4677fc44dd79f6a02d033c653a129d79870775f02bb37bcb0ce76557f194d29cff44150f7a005fdd9ab54d3f5a7baf7d073fb1325d17ac8e819261c4005feef2cb6ce76211a3d046269d082fef468ccc95aa1e76b88ddf41aad47cc9970b406d2c97ec988c6c97689ba4c1eb474f088b63a4dd79f6aded0b36aa2669527a3e7a898099b85df9dad91118d8e1e62d0d241ddb93a4dd79f6a12d0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a7695098bbb8fd97ecf915ed4b7deccf5f38f1bc27eb39275e38dde45bde9f6d977f876cd324b16ddb74646343afa65c2a005fdd91779d3f5a7bae7d07360a2b1389ebaca84c5ce552c7c97ff6d7a44affe537547b55534ecd126b71ea60f82260c5ad09f7dea365d7faa7b0e3d0737e158194f5d65c2ec51a1f1878ce7bb67b1ed20d99ecfec1083a3ff9b8dd8dd776c66ca5ec2f0ec13cf117b839178f142773361568f78b392d894c3ff3965b64de53917ff9997cf9e4d66cf13cf5f700b3dbf78896f266cbdcbd5ffd9e5671f7b86b7fd8d57fedbe1ad4faabfeca19667fa2068c2a005fd85aa26f974a6eb4fbe47dde7809e2b7d6f9063a462793c758d093313bcffb6057c065c515e412f3ff3324dbb7a1abfcd5d6cace1ff66236192dbb66ce31b61b07c627b4b1678f1e204eb72f4db6fbc4d5b366de5cbddfe2f67102f7bb06e8bc976d7122f8bb02e470f1e32888b2cd09b93c49b9898c18bb734a958628f64a0307d10d43d68417f91a82b785ed3f517bc077229a0e78709e369bb665c63c2d6fd7bd9b5b985772ea493ce3889bf5f58ec372a769ceaca3c5987c54b15ac6f361226ecbf9f74575f2beb127457262cde717cc3fc1bf8b2b9ff7ed6d63731b16d3685f1cb7d95d5a5367d10d43d68417feab416a824d3f5a7baf7d0f3af44637d3c758d095b978845f8c4ccd7fa96233633eeeaf582c14cf8c2bf5e40b3ae9cdde14d48a22effd7288a6d33bb326196cf6ab4ddbdd909261c7c88d33d68417fc16314490a987024f4e4f342cff2cc6472c8e8d915266c9d458a8bf5fed774fddf196c7db39158f6e8ea1dbfc166c2fe1b9eab3873b3ee670d130e2e6f9d260cfd058f4fa4296406ad48eb32213ff47cad6fb213ebe3a92b4cd8fa5624b1d599d518d997eaece3cf26ff371b896bc2ec73f6f2851ddb7604bd26fcf8434ff0efa8b826ccae21b36bcf0bef7ad0271ad69ec71e7c9cee7ef82e0af79a304c586e28d43968417f72b10a27354c381c6ae1e5819ec3e326934b46cfc69bb075f62aee861630d8924ac9ce123af2b8c9f4d2d32ff13fb3bb8dc55ecfecffecee6576d393ffddce5ddd1d2df2b03b9ed9218c9d09f7da697fe37f9b73e76cfe5625f62e637163d5aa2f5749dd1d0d139691b4be5719427f72710a37b5cca0156e1d26e5d37552093d3ba302193d1b6fc2a120f3bf262cf208c131b314ef210ea5bc584c23231a1d7c740d5aa1f415fa0b8552f7694cd75fe43dec5802f4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9ea3c284cdc2efced6c88846470f4d1eb474f088b63a4dd79f6aded0b36aa2669527a36798b059b1d3d61a19d1e86824062d1dd49dabd374fda926013dab266a5679327a86099b153b6dad91118d8e4662d0d241ddb93a4dd79f6a12d0b36aa2669527a367291336ab9b688d6a02338f7d587591caca6383168ee82660b2fe5493879e551335afbc50f51cb2099bd745fb5ad4dcdc4c53a74ea5c58b17536262a27d15a16410084000fa832ca28900f4dc7d3461c201f8cc9f3f9fe6ce9d4bb366cda21b6eb8219abe0fe88b0b08407f2e08129a183201e819261cb25844c29494146a6c6ca4a4a424fe1b0708384900fa739236eab29b00f40c1396d2183b6b9b376f1e37dfe4e4649a39732666c3520491381202d05f24f490d73402d073f0886039da8f91386b137fc66c38b88890421d01e84f1d4b94a49f00f41c3c0630610b23eb599bf83366c3c14584146a08407f6a38a214330840cfa1c501266ce1c40cd7e3f15046460695949450616121d5d4d410bbbbafa9a92934a2480502611280fec204876c4612809e430b0b4cf8174e6fbffd364d9932851e78e0013aebacb3282e2e8ebc5e2f3df5d45374d96597d192254b68d2a449a151452a10902400fd49024372a30940cfa1870726dc052b61c2a1a3444a10504700fa53c71225e927003d771d0398304c58ff37142de84400831644114d04a06798b0b49e211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a06798b0b408211a6964c8a09000f4a710268ad24e007a86094b8b10a29146860c0a09407f0a61a228ed04a067987050112e5dba94a64c99420b162ca0a953a79210cde2c58b69faf4e9f4c20b2fd0e4c9938396830420100e01e82f1c6ac8632a01e839f4c8c479bd5e6fe8c9a33b654a4a0a793c1e4a4d4da5d2d2522a2828a0fafa7a6a6e6ea6c6c6c6e8ee3c7aa79d00f4a73d0468804202d073683061c2164eb7dd761bcd9e3d9b9a9a9a7c7f4d4a4aa23973e6d075d75d171a51a402813009407f61824336230940cfa1850526ecc789cd821b1a1a7c7f4d4e4eeef0ffd0b0221508844700fa0b8f1b729949007a0e1e1798b01f23ebd91b66c1c10584146a09407f6a79a234bd04a0e7e0fc61c2011889b337cc82830b0829d41380fed4334589fa0840cfddb3870907e0c3cede66cd9a4573e7cec5b5607ddfdd98ad19fa8bd9d04765c7a16798b0b4b0d9ddd0e79d771e3df2c823c496a47180809304a03f2769a32ebb0940cf3160c2cd4d2d545fdd4075d50dd458dfc87f37d53753435d1335d635f2df49491eaad8b59b5a9a5aa9a5b9855a9ad9ef56ca2ec8a4b21d15e46d23624f6bf19f362f15f6cba7922d6514171fc79f19e63ff144057df2a8aa7437257812c893e8214f12fb9d40997919e46d6ba3e4b4644a4e4da2e4b4244a494da294f4244acd48a1d4cc144acb4ce17970441701e82fbae219ebbd819e9d55802b96a32b4b775375592d5557b09f3aaa2eafe1ff6e6d6da38a9d55c49e744e494ba2e4f464caed91454c441e6692491e4a4cf650629287925292283e3e8e9b6782279e121212289efdf6c4fb4c96b8d992efff565366611106cdea6d6d613fadfc775b6b2b6f4b734333af9bfdb436b7526b5b2b35b213817a7632d0440d758d14171f4f7d87f4a4a6c666cacc4da7ccbc74cacc69ff9d959fc1ff86c32c02d09f59f1406b2223003d47c64f756ea34cb87c67159f95966eaba48ae22aaadc554dbbcbaa29a7308bcf20d98c32252db97d66999ec267996cd6e9a6d9259b853343aeaf6da0fa9a46fe9b99337989f7bda1b6919b714e8f2c2aec9fcfff9ddf2787f27a66ab8e3dcaf32300fd417fd1f4a5809edda1676d26cc4c76e7c652aa2aada6cdeb7650f98e2a3e0bcc2ac8a0f4cc344acf4ea38c5f7ed89270ac1c6dad6d54bbbb8e6aaaeab821579555ff32f3afa3bcded93460af22caca4ba79e030b60cc118802fa0b0c0ffa8b40541ab342cfeed5b363265cb6bd92b6acdf413b36eca26d3f96506a7a329fe1b2191e33dcacbc0c8a8f8fd72863b3ab6e6b6ba3eaf25aaad95dc757092a4aaaf875f0a2213da9d7a002ea37ac3715f4c935bb131a5b07fd45061ffa8b8c9feadcd07364444dd2b3ad26fcf3b75b68eb0fc5f4d3aacd7cd9b8a02897f27ae6f0ebb689c9899151446e7eed99dd6c56b1b392766d2be7d79e07ee5d44034714d1a0917d639e10f467af04a03f7bf9fa970e3ddbcb5b979e959bf0e6b5dbe9fbcf7ea60ddf6ea55e030ba857ff1e94df27979b300e7b09301366665cb2a5948a3795d21ea3fbd3b0fd0751bfa1bdedadd8a0d2a13f7dc180fed4b3879ed5330db544a7f4acc4849b9b5be89b0fd6d1ea4f7ee04ba26cb6db7b500f2c2f871a6d1bd2b16b7bdb37945075450d156f2ea35113f6a491870ce5778a47db01fd9917d158d29f6afad0b36aa2919767a79e233261f63cedf2ffaca42deb77526e8ff69b86d89dcb38cc2250575d4f9bd76fa79aca3a2a1a5248e38f1e6d5603c36c0df417263887b345abfe5463849e5513b5a73cd57a0edb84d77db981be5cba9a7a0f2ca43df619604f6f51aa72023faeda489bd66ea30927ec4743c70e545ebe5305427f4e91565b4fb4e84f2d1522e859355167ca53a1e7b04cf8eda73fa186da26dae790e1cef414b52825c0ee0cfcf6e37594919746134f1dafb46c270a83fe9ca06c5f1d6ed79f6a32d0b36aa2ce9617a99ea54d78c9ddffa5c1a3fa5361df7c677b8ada9413d8f8dd16aaaeaca563ce3b4c79d9761508fdd945d6f972dda83fd594a067d544f59517ae9ea54cf8c3973ea7b48c34beaf328ee8205055514d3b37eca249671d6c7c87a03fe34324dd4037e94fba73413240cfaa89ea2f2f1c3d876cc2ab97ada72deb76d2de070ed5df53b4402981d59faea78123fad0880387282d576561d09f4a9a6695e506fda926063dab266a4e79b27a0ed9849fbfeb0d1a317e4fcacecf34a7b7688912026cebd0b55ffe44a7cc384a4979761402fdd941d58c32dda03fd5a4a067d544cd294f56cf219bf03fe7bd42874d39d09c9ea2254a09bcffe2a7f4a759272a2d536561d09f4a9ae69565bafe5413839e551335ab3c193d876cc20f5df52c1d72c238cc84cd8ab592d6b0579b2d7bf54bbaf8ae3f2a29cf8e42a03f3ba89a51a61bf4a79a14f4ac9aa839e5c9ea59ca84d9f687782cc99c60ab6ac9aa0fbfa7ad3fee34de84a13f551137ab1c37e84f353166c2d0b36aaa669427ab6729131e3caa1fe5166653af013dcce82d5a1131811d1b4af8eb247ffa76b3f1260cfd451c6ee30a708bfe548363260c3daba6aabfbc70f42c65c2c79c3b9196bdf625edb14f7f18b1fe7847dc829d9b76117b33cbc1c78ea5d71f7bcf781386fe220eb95105b8497faac13113869e5553d55b5eb87a963661d6cd6f3efa9e5a5bdb68df4347505c7c9cde9ea37669026c8797afdfff8ebf4e72d484613cbf5b4c18fa930eb77119dca83fd510850943cfaac93a5f5ea47a0ecb845937b7fd544c6cdfccde830a69e89841cef71c35864560dd573f53c9e632da63f400ea33a8d057869b4c18fa0b2bf4466472abfe54c3b39a30f4ac9aae73e5a9d073d826ccbae9f57ae987951ba9646b19e5f5caa181c38b282d2bd53902a8292402b5bbebf94b1bca7654f0f73b0fd97700c5c5755cc1709b09437f2185de8844d1a03fd520fd4d187a564dd8bef254eb39221316dd64d3f18d6bb6d2c6b5db28bf570ee5f7cea5de037b508227c13e1228b95b02ad2dadc46e1228dd514115c555346078110ddcbb6f97ef7876a309437fe67e09a24d7faa49073261e859356575e5d9a96725266cedeaae6de5b4edc79db463e32e2ae893cb97ab0b7ae7524a7ab23a2228292081fada062adb5149db7f2ee1b35ec6beef905e3c0ec10e379b30f4172cbace7c1ecdfa534db03b13869e55d30eaf3ca7f4acdc84addd2dde5cca67626c469698e4a1823e79dc10720bb3282925293c32c8e523d058df44ecc1f0d26d1554baad9c5a9a5ba9f7a01e9c7161bf022952d162c2d09f54d8234a1c4bfa8b085480cca19a30f4ac9a7cd7e5e9d2b3ad266ced6e75452d956e2fa7f2e22a3e5b4b4cf6f0678e0b7ae7507a761a65e56560f9ba1bbdb1e590dde535545b55cf395694eca696e616bef4cf4e6a0a8af22833273d6cc546a309437f61cba153c658d79f3a92ed258563c2d0b3ba2898a467c74cd81f5f6d551d559454b59bca8e0a6e30a9e9c994d3238b9b32fbc9f8e5774242bc3afa8697c41efd626c6aaaeaa8b692fdaee59b69d4d736f2131536cb656c98f1a667a529eb4db49b30f4179a54a0bfd038459a2a5213869e438b801bf4accd84032164c6c3ccb89acff87e31a2aa3acacccd204f5202a566a4506a7a4afbef8c647e9d393925893fefea96a3b9b1991a1b9aa8a1b691ea6bd84f43fb4f6d03353534f37efb4e4072d2282b278332f333f809899d47ac9930f407fdd9f97d0a56b66a13869eddab67a34cb82be1d65537505d75bdcfacda8dab91da5adba8bab296d8d242726a12ffc92ec8a4d6e656bedc9d9894f8cb6f0f25a526517c5c1c5ff28ef7c4f3df09ec77423c7f5c876d3ac27f8b9ff838f2b679f96358be1ffe7fa2d6d6566a6d69e3f58adf2c4d537d133537b55073630b353735f3df09890954b5ab9a1b2fbbe6c0ea65335a560f3b91683fa1683fb948cb643f7a1ef18209773d6c427fc12c25f2cf4dd75fe43dec588213268cf1d41de3a92b4c38d8178099313338f6c3ccafb1bedd0085113263f42426f0255e669c6d1603cdc849a3cad2ea4e869bd73387ca8b2b3b19734e8f4caaa9a86b377061e49e043e536d66e69fe4e97002909c92488929897cc6ce4e12e20d5d5a377d10d43968417fc10844feb9e9fa8bbc87e69870b0be603c0d4628f8e7327a8e0a130e8e0429821190114db0b2ecf8dc6413b6a3bfb156a6e9fa531d0fe8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dc384cd8a9db6d6c8884647233168e9a0ee5c9da6eb4f3509e8593551b3ca93d1334cd8acd8696b8d8c6874341283960eeaced569bafe5493809e551335ab3c193dbbce84173c742fddfdc01d1d889f79ead934ebdab99492127cb7a92fbefa8cb66edf42271e7b7297516b68a8a779b7cfe69f875aae5912906f8d8c68e44b8f3c87298316f417792c039560bafe54f71a7a564dd4acf264f4ec4a13fe62e56774ff1d0b2937278f2a2acbe9f26ba651dfa27e410df3a70d3fd2a5575e44179e7b314cd84fb332a2d1217793062de84fbd024cd79fea1e43cfaa899a559e8c9e5d6fc20c3d9bdd9e7cf609f4d293ffa671630fa057fef3125d7eeda53c2a2386ed4d0fdcbd88f272f3b8597fb0ec7dfef72b2fbd86a65f3c83ac339bdf4e388c9b7b6a4a2a9f0957d754f3b4afbef18aaf9c3d060de17f0b948f9d1408a3ff6edd1a9e4eb4c9da4ef66f5117cb63c221231a1ded3575d082fed4a8c174fda9e9e5afa540cfede332c653a2a83061eb0c77d4dea3e9be07efa67937dcc2156f9d256fdbb1adc34c9899f7cbafbdc867d0e2b3a3271d43179c731137e195abbeea60e062b6bdfabb6fbbcdc7ea6565fefdf14524664de515e5beba8f3ae2f7c62d779b3e089a3c68417f915b94e9fa8bbc871d4b809e7f5dbd8cf5f134ea4c585cebb5ce86c535637f13165f0bebac96cd9085090b3365d79a59790f3ff65097676fd67c4f2f7992fcaf53fbe767ff7ff9d5177dcbeaaabfe4b2e5993e08ba65d082fe6495d79ede74fd85d7abae7341cf184f853aa2ce84fbf6e9c797a699095e7df9dfe8cefb6fe37db5ce76c5356161d4cc40cffee3543e6b1e37e680a026fced9a557cb9db3f1f5bde164be302b03063362bf6bfa14c2c958b2519d55f7499f24c1f04dd3268417f32aafb35ade9fa0baf57ee3761e839bcc8cbe8392a4cd87a4df89315cb7c4bc0e2da6e2013f65f12ae6fa80fc984ef9e7f3f3df5fc629fb15bf331131687b8618c5d83befff607f89ffd67d2e185d79e5c32a2b1a705dd976ab209437f912bc274fd45dec38e2540cfed33618ca751704dd8ff71a237df7ec367761515e5be5971a099305b8616d76c3ff8f83ddfec562c47b365657663d51e838774b8b66cbdd66bcd679d4d5b67c5ac8cdcdc3c5c138e60243375d082fe2208aa252b4c580d47d952ac6320bb49147a96251838bd8c9e5d3913eeee3961eb0c942df71614f4a038a20e773d8b6bb6679d3695aebcfe726277328bb4fd8afad135975f4777dc7f6b87bba3ad77335bef80b6e6b31abdb83b5adc85cd42655daac6ddd1726237c984a13fb9d885925a66d00aa53cd3d340cfed4fa2f83f51128be3a9eb4cd8f42f975bdb67fa2068caa0e5d6f89ade6ed3f5a79a1ff4ac9aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac4490987d00000a2d494441549aa859e5c9e819266c56ecb4b54646343a1a89414b0775e7ea345d7faa4940cfaa899a559e8c9e61c266c54e5b6b6444a3a39118b4745077ae4ed3f5a79a04f4ac9aa859e5c9e8d995262cee809e7ed10cbe57b438d8e61b9bb76ce67b428b5bedd99dd0ecf0dfc18adda9cc9e293e78fc04fe1893f52e66965ed4c1fe2deee2531166d1ae938e9bd2a1ed2aca8ea40c19d144524fb8794d1ab4a0bf70a3d8753ed3f5a7bac7d0b39a3df3a3613c8d5a136686cc0eb68da008d401fb8df7bd3d893d1fc70c989beca27b29273b87ef372d5ea8c04c3ad0df23fd324683682265104e7eb70d5ad09f5c9461c272bc54a60ee5a4127a96232ea3e7a835617f644c449f7db9826f5fc98e7b16de45a79df447621b7ab09738646464d2e48947fa66a7cca40b0a0a68f9679fd0f557cda4ff5b741f5967afc2c4478e18c55fc62066dc6c772cfffd83d9b36f6c230fb651b978061933613951bbcd84a13fb9f8ca0c5a72259b991a7ac6782a94193326cc4c931d6ca99a6db6f1fccbcfd215d3aee2c6c84c989969696929ff9c9d19b23da799512e7ef6713e43663b6389a56ef139db9bbaabbfb3b726cdb97526cdb9ee262aea5de47b6b124c38bc41d1ed8316f4d77ddc61c2e17d2f54e40a6526ec5f0ff4ac4ecfae3661f16e602b0eff6bbbec33b6b4bc60d1bdbe6bbbd6a515f13ac3334ffb132dfac7426eb83ffdfc23bf5e7ccc51c7f95e8bc84cd56adcec7366d8d6ebd0d6765867deec2d4ca21e987078c38689260cfd8517cb40b960c2ea58ca9664dd65d03f2fc653599aede965f4ec6a13eeeec62c818e99dfcc9bafeff40a42763d98ddd425cc91cd6a1ffac742be44fdfa9baf51ff7efdc9fa6e62f63208b184cd3e17f9593dd65721b27da259b9fee60c130e4fcc229789260cfd4516536b6e99414b5dadfa4a829e319ec6c47274a077f65a9792d94d58c21cd9b562f6f287d2b2325ab57a25fdf5922b39a3fb1ebcdb77c3162b8f7dfef3c61ff96b12c54d5c02262b7bd62d37f0bcec7587e21a3466c2910f766e1cb4a0bfd0e30e130e9d95ea94a12e4743cfa19397d173d4ce84fd97a0ad3363b1942c96aad9356166c2ecfab07817b1781983d584c58b1b8e9e740c5f8a16b360366b663763590d9e2d5f5f7ae54574d38df3f9f56676f3163bb01c1dba90ad29dd66c2d09f5c9c65062db992cd4c0d3de7f17b73d81819ebe369d49ab07589587c0dd9b3c2fbee33969212137d77305b67c2e2ddc0271d3f857fce446235e1408f17f95f4f11cbd1c2e099a9b3835d5bd959b203261ce698e8b6410bfa930b344c588e97cad4a1cc84a16739e2327a76a509cbe15097dadf94654ab69a3d5b9e36ed90118d8eb69b64c23afacfea84fe7491575f2ff40c3d0b55c18443fc7e8977015b67ba2166e5c960c232b43aa78df5410bfa8b4c3fa6e5869e3fe397fe309e12c1844dfb766a6a0f66c29ac0a35a4ec074fda90e53ac9bb06a9ea69527a3e7904df8e5fbff47e326ed635a5fd11e45043e5ffa0d9d7cf96445a5a92f06fa53cfd4a4124dd79f6a56d0b36aa2669527a3e7904df8f9bbdea011e3f7a4ecfc4cb37a8bd6444ca0b27437adfde2273af58aa3232ecbae02a03fbbc8ea2fd70dfa534d097a564dd49cf264f51cb209af5ef6036d5abb9d461d34cc9cdea2254a087cbb6c2d0d1ad997461c34444979761402fdd941d58c32dda03fd5a4a067d544cd294f56cf219b30ebe2c7fffa92925292a8d7801ee6f4182d8988c08e0d25d4dcd242879c3036a2729cc80cfd3941d9d93adca43fd564a067d544f597178e9ea54c9875f1857bdfa401c38b60c4fae31d710b766eda455bd66fa7932f3f32e2b29c2a00fa738ab4fdf5b8517faaa940cfaa89ea2b2f5c3d4b9b30ebe23bcf2ca7daddf534fa90bd282e3e4e5faf51735804dadada68d5476b292b378d269e7e605865e8cc04fde9a41f79dd6ed75fe4043a96003dab26ea6c7991ea392c13665dfc61e526fafcad6fa867ff1eb4e7be039ded356a0b9bc0fa951ba8745b398d9b3c8a86ecdb3fec72746784fe744720bcfaa3457fe1f5beeb5cd0b36aa2ce94a742cf619b30eba2d7eba5cfdffc9636acde4ad93db268e0f0224acb326f372867c2616e2d6cd562d3da6d545152454346f7a7719347525c9cfb5730a03f7335676d59b4ea4f357de85935517bca53ade7884c5874b1ada58dbefe702dad59f603e5f6caa6bc9e39d47b600f4af024d84301a50625d0dad24aec2681b29d9554b96b378d9cb0278d3e7438c527c407cdebb604d09f79118b25fda9a60f3dab261a797976ea5989095bbbb875fd4efafeb39fe8e76fb75261df3cea39a00715f4cea594f4e4c849a0846e09d4d73650d98e4a623708b025e74123fbd18803f7a0a2213d63861cf4a72fd4d09f7af6d0b37aa6a196e8949e959bb0b5831bd76ca3ad3feca09f566d214fa2870a8a72f92c39b7308b3fea842332028df54dc41e0c2fdf5949bbb655506b730b0dd97700f5ddb3270d18511459e151901bfab33788d09fbd7cfd4b879eede5ad4bcfb69ab015597971156d5db793b6ff5c42db7f2aa1c4640fe5f6cca6bcc26c4acf4ea3acbc0c2c5f77a331b61cb2bbbc866aabeaa9bcb8925fdf6d6e6ae1b3dcde837a50bfa1bd384f1c8109407f912903fa8b8c9feadcd07364444dd2b36326ec8fac725735156fda451525bb69ebfa62be8c9a9699c26ff04acf4ce5c69c919dc67f2744e175ccae24d4dada46b5557554535547b5957554bbbb8eaacaaaa9bea681f27ae570b3cd29cca25e030b28bb005b8886fb5584fe029383fec25594de7cd0b37bf5accd840321ab2cd94da53b2aa96c5b059517efe63714ed2eaba1acfc0cf22426506a7a0aa5a425536a460aa56624f3ebccc9294994989ca8f71b20517b73633335363451436d23d5d7b09f06aaaf6ba486da06629f5557d451767e06651766515ecf2ccaef934b057d7228a74796442d481a0e01e80ffa0b4737a6e6819edda167a34cb82b31b365d8dd65b55453514bd595b5545d5e4bbbcb6b892d295414efe6d74293d393b941b359624b630b376d761d9a2d7b27267928293589e2e3e2f89277bc279eff4e60bf13e2f9e33a6cd311fe5bfcc4c791b7cdcb1fc3f2fdf0ff13b5b6b6526b4b1baf5ffc66699aea9bf8127173630bb534b39f564a4c4ae0b3fd86fa266aac6da484440fe5f7cea6b8f878caca4ba74cf6939b4e1939e9fc6483fd0d875904a03fb3e281d64446007a8e8c9feadcae30e1609d6666c8669475d50dd458d74875d58dc42eb2b39f869af67f7b923c7c66ddd2d4cacd5198249b75b2a5706eb4cc647f31de1e7df369d7d6b25f0dfa1793ceef9dcb978785c97b92dacd3ea74726b534b5f01381e4f4244a4e4dfafff6ed200540180602a0a72afdff83c5de45161641999b5092ca34b05470dbe758b7f6638ef5a9fd7af6dbd6d3697e6fddfc7defccbcf1bd80797e773a7e11c2ef92d98d000102040874048470c751170204081020100b08e1984c010102040810e80808e18ea32e0408102040201610c23199020204081020d01110c21d475d0810204080402c20846332050408102040a02320843b8eba102040800081584008c7640a081020408040474008771c75214080000102b1c009f0d85e2e8a834b040000000049454e44ae426082); +INSERT IGNORE INTO ORDINE (`id_ordine`, `data_ordine`, `urgente`, `ragione_sociale`) VALUES (1, '2020-12-13', TRUE, 'dottore'); +INSERT IGNORE INTO RIGA_ORDINE (`id_prodotto`,`id_ordine`) VALUES (1, 1); +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/globalExceptionHandler.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/globalExceptionHandler.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e363a8ae001fbd4f59396afee40869368be34c61 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/globalExceptionHandler.mtl @@ -0,0 +1,18 @@ +[module globalExceptionHandler('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] + +[template public genGlobalExceptionHandler(oclAny : OclAny) post(writeAndFormat(getGlobalExceptionFileName()))] +package [getAdvicesPackage()/]; + +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import [getExceptionLibsPackageAsMs()/].BaseExceptionHandler; + +@RestControllerAdvice +public class GlobalExceptionHandler extends BaseExceptionHandler { + +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/liquibaseConfigurationBean.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/liquibaseConfigurationBean.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b3ea73e7409d2a48dc7df4fbf91664996c4f62c5 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/liquibaseConfigurationBean.mtl @@ -0,0 +1,58 @@ +[module liquibaseConfigurationBean('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] + +[template public genLiquibaseConfigurationBean(oclAny : OclAny) post(writeAndFormat(getLiquibaseConfigurationBeanFileName()))] +package [getConfigPackage()/]; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import liquibase.integration.spring.SpringLiquibase; + +@Configuration +public class LiquibaseConfigurationBean { + + @Autowired + private DataSource dataSource; + + @Bean + public LiquibaseProperties liquibaseProperties() { + return new LiquibaseProperties(); + } + + @Bean + public CustomSpringLiquibase liquibase() { + LiquibaseProperties liquibaseProperties = liquibaseProperties(); + SpringLiquibase liquibase = new SpringLiquibase(); + liquibase.setChangeLog("classpath:db/liquibase/update.xml"); + liquibase.setContexts(liquibaseProperties.getContexts()); + liquibase.setDataSource(getDataSource(liquibaseProperties)); + liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema()); + liquibase.setDropFirst(liquibaseProperties.isDropFirst()); + liquibase.setShouldRun(true); + liquibase.setLabels(liquibaseProperties.getLabels()); + liquibase.setChangeLogParameters(liquibaseProperties.getParameters()); + return new CustomSpringLiquibase(liquibase); + } + + private DataSource getDataSource(LiquibaseProperties liquibaseProperties) { + if (liquibaseProperties.getUrl() == null) { + return this.dataSource; + } + return DataSourceBuilder.create().url(liquibaseProperties.getUrl()) + .username(liquibaseProperties.getUser()) + .password(liquibaseProperties.getPassword()).build(); + } +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/mapperConfig.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/mapperConfig.mtl new file mode 100644 index 0000000000000000000000000000000000000000..007c39c3dc9e514f2ec7f00771efde6b50554c04 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/mapperConfig.mtl @@ -0,0 +1,36 @@ +[module mapperConfig('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] + +[template public genMapperConfig(aModel : Model) post(writeAndFormat(getMapperConfigFileName()))] +package [getConfigPackage()/]; + +import org.modelmapper.ModelMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.modelmapper.convention.MatchingStrategies; + +import [getConverterPackageAsMs()/].BeanConverter; +[genDtoImportsForMapperConfig(aModel)/] + + +@Configuration +public class MapperConfig { + @Bean + public ModelMapper modelMapper() { + ModelMapper result = new ModelMapper(); + result.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); + [for(aClass : Class | aModel.getEntities())] + result.addConverter(new BeanConverter<[getDtoClassName(aClass)/],[getEntityClassName(aClass)/]>()); + result.addConverter(new BeanConverter<[getEntityClassName(aClass)/],[getDtoClassName(aClass)/]>()); + [/for] + return result; + } +} + +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msConfig.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msConfig.mtl new file mode 100644 index 0000000000000000000000000000000000000000..c26eb497860c582eee14fe8091c77c40c2bb2e00 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msConfig.mtl @@ -0,0 +1,23 @@ +[module msConfig('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] + +[template public genMsConfig(aModel : Model) post(writeAndFormat(getMsConfigFileName()))] +package [getConfigPackage()/]; + +[genMsConfigImports()/] + +@EnableConfigurationProperties([getMainClassNameAsMs()/]Properties.class) +@Configuration +public class [getMainClassNameAsMs()/]Config { + @Bean + public MappedInterceptor metricInterceptor(MeterRegistry registry) { + return new MappedInterceptor(new String['['/]]{"/**"}, + new [getMainClassNameAsMs()/]Interceptor(registry)); + } +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msInterceptor.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msInterceptor.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b93681fbc55855c0451a43a82f3128fcb686e1bc --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msInterceptor.mtl @@ -0,0 +1,38 @@ +[module msInterceptor('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] + +[template public genMsInterceptor(aModel : Model) post(writeAndFormat(getMsInterceptorFileName()))] +package [getActuatorPackage()/]; + +[genMsInterceptorImports()/] + +public class [getMainClassNameAsMs()/]Interceptor implements HandlerInterceptor { + + private static Logger log = LoggerFactory.getLogger([getMainClassNameAsMs()/]Interceptor.class); + + private MeterRegistry registry; + private String URI, pathKey, METHOD; + + public [getMainClassNameAsMs()/]Interceptor(MeterRegistry registry) { + this.registry = registry; + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + URI = request.getRequestURI(); + METHOD = request.getMethod(); + if (!URI.contains("prometheus")){ + log.info(" >> PATH: {}",URI); + log.info(" >> METHOD: {}", METHOD); + + pathKey = "api_".concat(METHOD.toLowerCase()).concat(URI.replaceAll("/","_").toLowerCase()); + this.registry.counter(pathKey).increment(); + } + } +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msProperties.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msProperties.mtl new file mode 100644 index 0000000000000000000000000000000000000000..cb83ba35b6b20dea7d81e59224c58740edbb7226 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/msProperties.mtl @@ -0,0 +1,20 @@ +[module msProperties('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] + + +[template public genMsProperties(oclAny : OclAny) post(writeAndFormat(getMsPropertiesFileName()))] +package [getActuatorPackage()/]; + +[genMsPropertiesImports()/] + +@Data +@ConfigurationProperties(prefix = "[getMainClassNameAsMs().toString().toLowerCase()/]") +public class [getMainClassNameAsMs()/]Properties { + private String path; +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/securityConfig.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/securityConfig.mtl new file mode 100644 index 0000000000000000000000000000000000000000..8cbc481651e67a03fc7e1e2ecbbeb742df904a64 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/ms-web/securityConfig.mtl @@ -0,0 +1,21 @@ +[module securityConfig('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] + +[template public genSecurityConfig(aModel : Model) post(writeAndFormat(getSecurityConfigFileName()))] +package [getConfigPackage()/]; + +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@EnableWebSecurity +public class SecurityConfig extends WebSecurityConfigurerAdapter { + @Override + protected void configure(HttpSecurity http) throws Exception { + http.csrf().disable().headers().disable(); + } +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/packageUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/packageUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..23f585f74c5be87a0b2a2d01d6c9dd718fc111a4 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/packageUtils.mtl @@ -0,0 +1,177 @@ +[comment encoding = UTF-8 /] +[module packageUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties /] + +[template public getGenericPackage(oclAny : OclAny)] +[getBasePackageName()/] +[/template] + +[template public getEntityPackage(oclAny : OclAny)] +[getGenericPackage().concat('.entity')/] +[/template] + +[template public getEntityDtoPackage(oclAny:OclAny)] +[getGenericPackage().concat('.dto')/] +[/template] + +[template public getResponseLibsPackage(oclAny : OclAny)] +[getGenericPackage().concat('.libs.response')/] +[/template] + +[template public getResponseLibsPackageAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.response')/] +[/template] + +[template public getEntityLibsPackage(oclAny:OclAny)] +[getGenericPackage().concat('.libs.entity')/] +[/template] + +[template public getInnerGatewayPackage(oclAny:OclAny)] +[getGenericPackage().concat('.gateway')/] +[/template] + +[template public getAdvicesPackage(oclAny : OclAny)] +[getGenericPackage().concat('.advices')/] +[/template] + +[template public getConfigPackage(oclAny : OclAny)] +[getGenericPackage().concat('.config')/] +[/template] + +[template public getGatewayConfigPackage(oclAny:OclAny)] +[getInnerGatewayPackage().concat('.config')/] +[/template] + +[template public getGatewayFilterPackage(oclAny:OclAny)] +[getInnerGatewayPackage().concat('.filter')/] +[/template] + +[template public getDtoLibsPackage(oclAny:OclAny)] +[getBasePackageName().concat('.libs.dto')/] +[/template] + +[template public getBaseDtoLibsPackage(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId().concat('.libs.dto'))/] +[/template] + +[template public getFilterPackage(oclAny : OclAny )] +[getBasePackageName().concat('.libs.filter')/] +[/template] + + +[template public getConverterPackage(oclAny : OclAny)] +[getBasePackageName().concat('.libs.converter')/] +[/template] + +[template public getConverterPackageAsMs(oclAny : OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId().concat('.libs.converter'))/] +[/template] + +[template public getEntityPackage_(oclAny : OclAny)] +[getEntityPackage().concat('_')/] +[/template] + +[template public getCriteriaPackage(oclAny : OclAny)] +[getGenericPackage().concat('.criteria')/] +[/template] + +[template public getRepositoryPackage(oclAny : OclAny)] +[getGenericPackage().concat('.repository')/] +[/template] + +[template public getRepositoryLibsPackage(oclAny : OclAny)] +[getGenericPackage().concat('.libs.repository')/] +[/template] + +[template public getRepositoryLibsPackageAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.repository')/] +[/template] + +[template public getControllerLibsPackageAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.controller')/] +[/template] + +[template public getExceptionLibsPackageAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.exception')/] +[/template] + +[template public getLibsEntityPackageAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.entity')/] +[/template] + +[template public getServiceLibsPackageAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.service')/] +[/template] + +[template public getServicePackage(oclAny : OclAny)] +[getGenericPackage().concat('.service')/] +[/template] + +[template public getServiceLibsPackage(oclAny : OclAny)] +[getGenericPackage().concat('.libs.service')/] +[/template] + +[template public getControllerPackage(oclAny : OclAny)] +[getGenericPackage().concat('.controller')/] +[/template] + +[template public getAssemblerPackage(oclAny : OclAny)] +[getGenericPackage().concat('.assembler')/] +[/template] + +[template public getControllerLibsPackage(oclAny : OclAny)] +[getGenericPackage().concat('.libs.controller')/] +[/template] + +[template public getLibsUtilitiesPackage(oclAny:OclAny)] +[getGenericPackage().concat('.libs.utilities')/] +[/template] + +[template public getLibsRequestPackage(oclAny: OclAny)] +[getGenericPackage().concat('.libs.request')/] +[/template] + +[template public getLibsRequestPackageAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.request')/] +[/template] + +[template public getLibsExceptionPackage(oclAny:OclAny)] +[getGenericPackage().concat('.libs.exception')/] +[/template] + +[template public getLibsUtilitiesPackageAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.utilities')/] +[/template] + +[template public getUtilitiesPackage(oclAny : OclAny)] +[getGenericPackage().concat('.utilities')/] +[/template] + +[template public getSecurityPackage(oclAny : OclAny)] +[getGenericPackage().concat('.security')/] +[/template] + +[template public getResourcePackage(oclAny : OclAny)] +[getGenericPackage().concat('.resource')/] +[/template] + +[template public getBaseAssemblerPackage(oclAny:OclAny)] +[getGenericPackage().concat('.libs.assembler')/] +[/template] + +[template public getExceptionLibsPackage(oclAny:OclAny)] +[getGenericPackage().concat('.libs.exception')/] +[/template] + +[template public getBaseAssemblerPckAsMs(oclAny:OclAny)] +[getGroupName().concat('.').concat(getRootArtifactId()).concat('.libs.assembler')/] +[/template] + +[template public getResourceServerSecurityPackage(oclAny:OclAny)] +[getGenericPackage().concat('.libs.security')/] +[/template] + +[template public getActuatorPackage(oclAny : OclAny)] +[getGenericPackage().concat('.actuator')/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/pomUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/pomUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..1e35edee3e093c89cbdf016c50d26a435cbc7565 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/pomUtils.mtl @@ -0,0 +1,173 @@ +[comment encoding = UTF-8 /] +[module pomUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::properties /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] + +[template public genParentTag(oclAny : OclAny)] + + [genParentBaseInfo()/] + ../../pom.xml + +[/template] + +[template public genParentBaseInfo(oclAny : OclAny)] +[getGroupName()/] +[getArtifact()/] +[getVersion()/] +[/template] + +[template public genParentCompleteInfo(oclAny : OclAny)] +[genParentBaseInfo()/] +[getProjectName()/] +[getProjectDescription()/] +[/template] + +[template public genImplDependency(oclAny : OclAny)] + + [getGroupName()/] + [getImplModuleName()/] + ${project.parent.version} + +[/template] + +[template public genCoreDependency(oclAny : OclAny)] + + [getGroupName()/] + [getCoreModuleName()/] + ${project.parent.version} + +[/template] + +[template public genVoila2RuntimeImplDependency(oclAny : OclAny)] + + it.mice + voila2runtime-impl + ${voila2.runtime.version} + +[/template] + +[template public genVoila2RuntimeCoreDependency(oclAny : OclAny)] + + it.mice + voila2runtime-core + ${voila2.runtime.version} + +[/template] + +[template public getUrl(oclAny : OclAny)] +http://www.micegroup.it +[/template] + +[template public getWebModuleNaturalLangName(oclAny : OclAny)] +[getProjectName().concat('-web module')/] +[/template] + +[template public getCoreModuleNaturalLangName(oclAny : OclAny)] +[getProjectName().concat('-core module')/] +[/template] + +[template public getImplModuleNaturalLangName(oclAny : OclAny)] +[getProjectName().concat('-impl module')/] +[/template] + +[template public getAngularModuleNaturalLangName(oclAny : OclAny)] +[getProjectName().concat('-angular module')/] +[/template] + +[template public genVoila2RuntimeAttachmentWebDependency(oclAny : OclAny)] + + it.mice + voila2runtime-attachment-web + ${voila2.runtime.version} + +[/template] + +[template public genVoila2RuntimeMailCoreDependency(oclAny : OclAny)] + + it.mice + voila2runtime-mail-core + ${voila2.runtime.version} + +[/template] + +[template public genVoila2RuntimeMailImplDependency(oclAny : OclAny)] + + it.mice + voila2runtime-mail-impl + ${voila2.runtime.version} + +[/template] + +[template public genVoila2RuntimeBusinessIntelligenceCoreDependency(oclAny : OclAny)] + + it.mice + voila2runtime-bi-core + ${voila2.runtime.version} + +[/template] + +[template public genCoreLibsDependency(oclAny:OclAny)] + + [getGroupName()/] + [getRootArtifactId()/]-libs-core + [getVersion()/] + +[/template] + +[template public genVoila2RuntimeBusinessIntelligenceImplDependency(oclAny : OclAny)] + + it.mice + voila2runtime-bi-impl + ${voila2.runtime.version} + +[/template] + +[template public genImplLibsDependency(oclAny:OclAny)] + + [getGroupName()/] + [getRootArtifactId()/]-libs-impl + [getVersion()/] + +[/template] + +[template public genTomcatWebDependency(oclAny : OclAny)] + + org.springframework.boot + spring-boot-starter-tomcat + provided + 2.4.3 + +[/template] + +[template public genLombokDependency(oclAny:OclAny)] + + org.projectlombok + lombok + +[/template] + +[template public genHateosDependency(isMs : Boolean)] + + org.springframework.hateoas + spring-hateoas + 1.1.0.RELEASE + +[/template] + +[template public genLibsWebDependency(oclAny:OclAny)] + + [getGroupName()/] + [getRootArtifactId()/]-libs-web + [getVersion()/] + +[/template] + +[template public genJasperReportsFontWebDependency(oclAny : OclAny)] + + fonts + noto-fonts + 1.0 + +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/repositoryUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/repositoryUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..7de0e44e73fec03ce926bd15f07ce944ba71a5e9 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/repositoryUtils.mtl @@ -0,0 +1,15 @@ +[comment encoding = UTF-8 /] + +[comment] + +Repository Utility's Templates +This library contains all the methods needed for repositories + +[/comment] +[module repositoryUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + + + +[template public genRepository(aClass : Class)] + +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/runtimeUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/runtimeUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..869d39aff9b8034bf527a297f9d7a00ae4af194d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/runtimeUtils.mtl @@ -0,0 +1,107 @@ +[comment encoding = UTF-8 /] +[module runtimeUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[template public getRuntimePackage(oclAny : OclAny)] +['it.micegroup.voila2runtime'/] +[/template] + +[template public getRuntimeRepositoryPackage(oclAny : OclAny)] +[getRuntimePackage().concat('.repository')/] +[/template] + +[template public getRuntimeControllerPackage(oclAny : OclAny)] +[getRuntimePackage().concat('.controller')/] +[/template] + +[template public getRuntimeWebControllerPackage(oclAny: OclAny)] +[getRuntimePackage().concat('.controller')/] +[/template] + +[template public getRuntimeWebGenericControllerFullyQualified(oclAny : OclAny)] +[getRuntimeWebControllerPackage().concat('.GenericController')/] +[/template] + +[template public getRuntimeObjectPackage(oclAny : OclAny)] +[getRuntimePackage().concat('.object')/] +[/template] + +[template public getRuntimeWebDtoPackage(oclAny : OclAny)] +[getRuntimePackage().concat('.dto')/] +[/template] + +[template public getRuntimeGenericDtoFullyQualified(oclAny : OclAny)] +[getRuntimeWebDtoPackage().concat('.GenericDto')/] +[/template] + +[template public getRuntimeGenericObjectFullyQualified(oclAny : OclAny)] +[getRuntimeObjectPackage().concat('.GenericObject')/] +[/template] + +[template public getRuntimeGenericControllerFullyQualified(oclAny : OclAny)] +[getRuntimeControllerPackage().concat('.GenericController')/] +[/template] + + +[template public getRuntimeUtilitiesPackage(oclAny : OclAny)] +[getRuntimePackage().concat('.utilities')/] +[/template] + +[template public getRuntimeUtilsPackage(oclAny : OclAny)] +[getRuntimePackage().concat('.utils')/] +[/template] + +[template public getRuntimeFilterPackage(oclAny : OclAny)] +[getRuntimePackage().concat('.filter')/] +[/template] + +[template public getRuntimeStringFilterFullyQualified(oclAny : OclAny)] +[getRuntimeFilterPackage().concat('.StringFilter')/] +[/template] + +[template public getRuntimeStorageServiceFullyQualified(oclAny : OclAny)] +[getRuntimePackage().concat('.attachment.service.StorageService')/] +[/template] + +[template public getRuntimeGenericEntityFullyQualified(oclAny : OclAny)] +[getRuntimePackage().concat('.entity.GenericEntity')/] +[/template] + +[template public getRuntimeMailFullyQualified(oclAny : OclAny)] +[getRuntimePackage().concat('.mail')/] +[/template] + +[template public getRuntimeMailEntityPackage(oclAny : OclAny)] +[getRuntimeMailFullyQualified().concat('.entity')/] +[/template] + +[template public getRuntimeMailManagerPackage(oclAny : OclAny)] +[getRuntimeMailFullyQualified().concat('.manager')/] +[/template] + +[template public getRuntimeMailMailManagerFullyQualified(oclAny : OclAny)] +[getRuntimeMailManagerPackage().concat('.MailManager')/] +[/template] + +[template public getRuntimeMailTemplateFullyQualified(oclAny : OclAny)] +[getRuntimeMailEntityPackage().concat('.MailTemplate')/] +[/template] + +[template public getRuntimeMailStyleFullyQualified(oclAny : OclAny)] +[getRuntimeMailEntityPackage().concat('.MailStyle')/] +[/template] + +[template public getRuntimeMailConfigFullyQualified(oclAny : OclAny)] +[getRuntimeMailEntityPackage().concat('.MailConfig')/] +[/template] + +[template public getRuntimeMailMailManagerImplFullyQualified(oclAny : OclAny)] +[getRuntimeMailManagerPackage().concat('.MailManagerImpl')/] +[/template] + +[template public getRuntimeResponsePackage(oclAny : OclAny)] +[getRuntimePackage().concat('.response')/] +[/template] + +[template public getRuntimeExceptionPackage(oclAny : OclAny)] +[getRuntimePackage().concat('.exception')/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/securityUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/securityUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..62c700551e80d4f9ddfde7d43c402c5245e5a7e7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/securityUtils.mtl @@ -0,0 +1,15 @@ +[comment encoding = UTF-8 /] + +[comment] + +Utilities templates for security + +[/comment] + +[module securityUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] + +[template public genPreAutorize(aClass : Class, className: String, privilegeName: String, aModel : Model)] +[if(isSecurityEnabled(aModel))]@PreAuthorize("hasRole(@permissionHolder.[className/]_[privilegeName/].toString())")[/if] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/serviceImplUtils.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/serviceImplUtils.mtl new file mode 100644 index 0000000000000000000000000000000000000000..24c109663f7f101aea12345e3a54e81a7abb9eb4 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/springboot/serviceImplUtils.mtl @@ -0,0 +1,574 @@ +[comment encoding = UTF-8 /] +[module serviceImplUtils('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::runtimeUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils /] + +[import it::micegroup::voila2::cartridge::library::common::idUtils /] +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::specificationFilterUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] + +[template public genFindAll(aClass : Class)] +/* + * (non-Javadoc) + * + * @see [getServicePackage()/].GenericEntityService#findAll(org. + * springframework.data.domain.Pageable) + */ +@Override +@Transactional(readOnly = true) +public Page<[getEntityClassName(aClass)/]> findAll(Pageable pageable) { + return [getObjectRepositoryName(aClass)/].findAll(pageable); +} +[/template] + +[template public genFindAllListed(aClass : Class)] +/* (non-Javadoc) + * @see [getServicePackage()/].GenericEntityService#findAll() + */ +@Override +@Transactional(readOnly = true) +public List<[getEntityClassName(aClass)/]> findAll() { + return [getObjectRepositoryName(aClass)/].findAll(); +} +[/template] + +[template public genFindByCriteriaPaged(aClass : Class)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#findByCriteria(java. + * lang.Object, org.springframework.data.domain.Pageable) + */ +@Override +@Transactional(readOnly = true) +public Page<[getEntityClassName(aClass)/]> findByCriteria([getCriteriaClassName(aClass)/] criteria, Pageable pageable) { + final Specification<[getEntityClassName(aClass)/]> specification = createSpecification(criteria); + return [getObjectRepositoryName(aClass)/].findAll(specification, pageable); +} +[/template] + +[template public genFindByCriteria(aClass : Class)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#findByCriteria(java. + * lang.Object) + */ +@Override +@Transactional(readOnly = true) +public List<[getEntityClassName(aClass)/]> findByCriteria([getCriteriaClassName(aClass)/] criteria) { + final Specification<[getEntityClassName(aClass)/]> specification = createSpecification(criteria); + return [getObjectRepositoryName(aClass)/].findAll(specification); +} +[/template] + +[template public genFindById(aClass : Class)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#findById(java.lang. + * Object) + */ +@Override +@Transactional(readOnly = true) +public Optional<[getEntityClassName(aClass)/]> findById([getClassIdType(aClass)/] id) { + return [getRepositoryClassName(aClass).toLowerFirst()/].findBy[aClass.getClassIdName().toUpperFirst()/](id); +} +[/template] + +[template public genExists(aClass : Class, aModel : Model)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#exists(java.lang. + * Object) + */ +@Override +[if(aModel.isCachingEnabled())] +[if(aClass.isInPrivilegePerRoleRole())] +@Cacheable(value = "PrivilegePerRole", key = "#id.toString()") +[/if] +[/if] +public boolean exists([getClassIdType(aClass)/] id) { + return [getObjectRepositoryName(aClass)/].existsById(id); +} +[/template] + +[template public genInsert(aClass : Class, aModel : Model)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#insert(java. + * lang.Object) + */ +@Override +public [getEntityClassName(aClass)/] insert(@Valid [getEntityClassName(aClass)/] entity) { +[if(isInSecurityUserRole(aClass) or aClass.generalizeSecurityUserRole())] + entity.setPassword(passwordEncoder.encode(entity.getPassword())); + Role role = roleService.findByObjectKey("User").get();// FIXME .get() + RolePerSecurityUser rolePerSecurityUser = new RolePerSecurityUser(); + rolePerSecurityUser.setTheSecurityUser(entity); + rolePerSecurityUser.setTheRole(role); + + entity.addRolePerSecurityUser(rolePerSecurityUser); +[/if] + return [getObjectRepositoryName(aClass)/].save(entity); +} +[/template] + +[template public genUpdate(aClass : Class, aModel : Model)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#update(java. + * lang.Object) + */ +@Override +public [getEntityClassName(aClass)/] update(@Valid [getEntityClassName(aClass)/] entity) { + [if(isInSecurityUserRole(aClass) or aClass.generalizeSecurityUserRole())] + if(entity.getPassword() != null){ + entity.setPassword(passwordEncoder.encode(entity.getPassword())); + } + [/if] + return [getObjectRepositoryName(aClass)/].save(entity); +} +[/template] + +[template public genDeleteById(aClass : Class, aModel : Model)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#deleteById(java.lang. + * Object) + */ +@Override +public void deleteById([getClassIdType(aClass)/] id) { + [getObjectRepositoryName(aClass)/].deleteById(id); +} +[/template] + +[template public genMassDelete(aClass : Class, aModel : Model)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#massDelete(java.lang. + * Object) + */ +@Override +public void massDelete(Collection<[getEntityClassName(aClass)/]> entities) { + [getObjectRepositoryName(aClass)/].deleteAll(entities); +} +[/template] + +[template public genDeleteByIdIn(aClass : Class, aModel : Model)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#deleteByIdIn(java.lang. + * Object) + */ +@Override +public void deleteByIdIn(Collection<[getClassIdType(aClass)/]> ids) { + [getObjectRepositoryName(aClass)/].deleteByIdIn(ids); +} +[/template] + +[template public genMassInsert(aClass : Class, aModel : Model)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#massInsert(java.lang. + * Object) + */ +@Override +public List<[getEntityClassName(aClass)/]> massInsert(Collection<[getEntityClassName(aClass)/]> entities) { + return [getObjectRepositoryName(aClass)/].saveAll(entities); +} +[/template] + +[template public genMassUpdate(aClass : Class, aModel : Model)] +/* + * (non-Javadoc) + * + * @see + * [getServicePackage()/].GenericEntityService#massUpdate(java.lang. + * Object) + */ +@Override +public List<[getEntityClassName(aClass)/]> massUpdate(Collection<[getEntityClassName(aClass)/]> entities) { + return [getObjectRepositoryName(aClass)/].saveAll(entities); +} +[/template] + +[template public genFindByObjectKey(aClass : Class,isMs : Boolean)] +/* + * (non-Javadoc) + * @see [getServicePackage()/].GenericEntityService#findByObjectKey(java.lang.String) + */ +@Override +@Transactional(readOnly = true) +public Optional<[getEntityClassName(aClass)/]> findByObjectKey(String id) +{ + [getEntityClassName(aClass)/] [getObjectName(aClass)/] = new [getEntityClassName(aClass)/]([if(isMs)]id[/if]); + [if(isMs)._not()][getObjectName(aClass)/].setObjectKey(id);[/if] + return findById([getObjectName(aClass)/].get[getClassIdName(aClass).toString().toUpperFirst()/]()); +} +[/template] + + +[template public genFindByParentId(aClass : Class, aModel : Model)] +[for(parentAss : Association | aClass.getParentAssociations()) separator ('\n')] +@Override +public Page<[aClass.getEntityClassName()/]> findBy[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]([aClass.getParentClass(parentAss).getEntityClassName()/] parentEntity, Pageable pageable) +{ + return [getObjectRepositoryName(aClass)/].findBy[if(aClass.hasCompositeKey() and parentAss.isIdentifying())][aClass.getClassIdName().toUpperFirst()/][/if][aClass.getTheParentPropertyName(parentAss).toUpperFirst()/](parentEntity, pageable); +} +[/for] +[/template] + +[** + * Generate block-if for criteria filter class + * @author Luca Barone +*/] +[template public genSpecifySpecification(aClass : Class, p : Property)] + if (criteria.get[p.name.toUpperFirst()/]() != null) { + specification = specification.and(filterService.[getSpecification(p.type) + /](criteria.get[p.name.toUpperFirst()/](), [if(aClass.hasInnerCompositeKey() and p.isID)]r -> r.get([aClass.getEntityClassName()/]_.[aClass.getClassIdName()/]).get([aClass.getClassIdName().toUpperFirst()/]_.[p.name/])[else][aClass.getEntity_ClassName()/].[p.name/][/if])); + } +[/template] + +[** + * Generates block-if for criteria filter father class + * @author Luca Barone + * @author Vittorio Niespolo r.get([aClass.getEntity_ClassName()/].[aClass.getClassIdName().toUpperFirst()/]).get([aClass.getClassIdName()/]_.[aClass.getTheParentPropertyName(parentAss)/]).get([aClass.getParentClass(parentAss).name/]_.[getClassIdName(aClass.getParentClass(parentAss))/]))); +} +[elseif(parentId.isString())] +if (criteria.get[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst()/]() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.get[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst()/](), r-> r.get([aClass.getEntity_ClassName()/].[aClass.getClassIdName().toUpperFirst()/]).get([aClass.getClassIdName()/]_.[aClass.getTheParentPropertyName(parentAss)/]).get([aClass.getParentClass(parentAss).name/]_.[getClassIdName(aClass.getParentClass(parentAss))/]))); +} +[/if] +[/for] +[/template] + + +[** + * Generate the method to convert Criteria in Specification + * @author Vittorio Niespolo +*/] +[template public genCreateSpecification(aClass : Class)] +/** + * Convert [aClass.getCriteriaClassName()/] to a {@link Specification} + * @param criteria + * @return + */ +private Specification<[aClass.getEntityClassName()/]> createSpecification([aClass.getCriteriaClassName()/] criteria) { + Specification<[aClass.getEntityClassName()/]> specification = Specification.where(null); + + if (criteria != null) { + [if(aClass.getAttributeList() -> size() > 0)]// Attribute filters[/if] + [for(p:Property | aClass.getFiltrableAttributes())] + [genSpecifySpecification(aClass, p)/] + [/for] + +[comment] [if(aClass.getParentAssociations() -> size() > 0)]// Parent id filters[/if] + [for(parentAss : Association | aClass.getParentAssociations())] + if(criteria.get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey() != null && criteria.get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey().getEquals() != null) + { + [aClass.getParentClass(parentAss).getEntityClassName()/] [aClass.getParentClass(parentAss).getEntityClassName().toLowerFirst()/] = new [aClass.getParentClass(parentAss).getEntityClassName()/](criteria.get[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]ObjectKey().getEquals()); + [for(parentId : Property | aClass.getParentClass(parentAss).getClassIDs())] + if(criteria.get[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst()/]() == null) { + criteria.set[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst()/](new [getFilterType(parentId.type)/]()); + } + criteria.get[parentId.getParentPropAssName(aClass, parentAss).toUpperFirst()/]().setEquals([aClass.getParentClass(parentAss).getEntityClassName().toLowerFirst()/][if(aClass.getParentClass(parentAss).hasCompositeKey())].get[aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]()[/if].get[parentId.name.toUpperFirst()/]()); + [/for] + } + [/for][/comment] + [if(aClass.hasCompositeKey())]// CompositeKey Filters[/if] + [aClass.genCompositeKeyAndSpecifications()/] + [aClass.genNotIdentifyingParentSpecifications()/] +[comment]TODO Aggiungere filtri per attributi in compositekjey interni all'entità[/comment] + } + return specification; +} +[/template] + +[** + * Generate service MasterDetail update method + * @author: Vittorio Niespolo +*/] +[template public genMasterDetailUpdate(aClass : Class)] + +/* + * (non-Javadoc) + * @see [getServicePackage()/].[aClass.getServiceClassName()/]#masterDetailUpdate([getRuntimeUtilitiesPackage()/].MasterDetail) + */ +@Override +@Transactional +public [aClass.getEntityClassName()/] masterDetailUpdate([aClass.getEntityClassName()/] [aClass.getEntityClassName().toLowerFirst()/]){ +[for(a : Association | aClass.getChildAssociations())] + for ([aClass.getChildClass(a).name/] [aClass.getChildClass(a).name.toLowerFirst()/] : [aClass.getEntityClassName().toLowerFirst()/].get[getTheChildPropertyName(aClass, a).toString().toUpperFirst()/]()) { + if ([aClass.getChildClass(a).name.toLowerFirst()/].isUpdatedEntityState()) { + [aClass.getChildClass(a).name.toLowerFirst()/]Service.update([aClass.getChildClass(a).name.toLowerFirst()/]); + } + if ([aClass.getChildClass(a).name.toLowerFirst()/].isDeletedEntityState()) { + [aClass.getChildClass(a).name.toLowerFirst()/]Service.delete([aClass.getChildClass(a).name.toLowerFirst()/]); + } + if ([aClass.getChildClass(a).name.toLowerFirst()/].isCreatedEntityState()) { + [aClass.getChildClass(a).name.toLowerFirst()/]Service.insert([aClass.getChildClass(a).name.toLowerFirst()/]); + } + [aClass.getEntityClassName().toLowerFirst()/].set[getTheChildPropertyName(aClass, a).toUpperFirst()/](null); + } +[/for] + return update([aClass.getEntityClassName().toLowerFirst()/]); +} +[/template] + +[template public genDelete(aClass : Class)] +@Override +public void delete([aClass.getEntityClassName()/] entity) { + [aClass.getRepositoryClassName().toLowerFirst()/].delete(entity); +} +[/template] + +[** + * Generate PDF report + * @author: Fabio Memoli +*/] +[template public genPrintPdfReport(aClass : Class, aModel: Model)] +[if(aClass.isReportEnabled(aModel))] +public JasperPrint getJasperPrint(String reportName, Collection collection) throws BusinessException { + JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(collection); + Map parameters = new HashMap(); + // Adds to the collection the compiled master report dependency (for subreport) and return the compiled master report. + JasperReport report = prepareJasperReport(reportName, parameters); + // Add report dir. + parameters.put("REPORT_DIR", super.jasperReportsDir); + // Add locale. + Locale locale = LocaleContextHolder.getLocale(); + parameters.put(JRParameter.REPORT_LOCALE, locale); + // Add resource boundle. + ResourceBundle resourceBoundle = ResourceBundle.getBundle("applicationResources", locale); + parameters.put(JRParameter.REPORT_RESOURCE_BUNDLE, resourceBoundle); + // return PDF document. + JasperPrint jasperPrint = null; + try { + return JasperFillManager.fillReport(report, parameters, dataSource); + } catch (JRException e) { + LOGGER.error("Error: ", e); + } + return jasperPrint; +} + +public byte['[]'/] printPdfReport(String objectKey) throws BusinessException { + Collection<[aClass.name/]> [aClass.name.toLowerCase()/]Collection = new ArrayList<[aClass.name/]>(); + [aClass.name.toLowerCase()/]Collection.add(findByObjectKey(objectKey).get()); + byte['[]'/] pdf = null; + try { + pdf = JasperExportManager.exportReportToPdf(getJasperPrint("Detail[aClass.name/]", [aClass.name.toLowerCase()/]Collection)); + } + catch(JRException e) { + LOGGER.error("Error: ", e); + } + return pdf; +} +[/if] +[/template] + +[template public genFindOtherParentByParentServiceImpl(aClass : Class){parentAssociations : Collection(OclAny) = aClass.getParentAssociations();}] +[if(parentAssociations -> size() > 1)] +[for(parentAss : Association | parentAssociations)] +[for(otherParentAss : Association | aClass.getParentAssociationsExcluding(parentAss))] +/* + * + * @see [getGenericPackage(aClass)/].service.[aClass.getEntityClassName()/]Service#find[aClass.getParentClass(parentAss).getEntityClassName()/]By[getTheParentPropertyName(aClass, otherParentAss)/]([getGenericPackage(aClass).concat('.entity')/].[aClass.getParentClass(otherParentAss).getEntityClassName()/], org.springframework.data.domain.Pageable) + */ +@Override +@Transactional(readOnly = true) +public Page<[aClass.getParentClass(parentAss).getEntityClassName()/]> find[aClass.getParentClass(parentAss).getEntityClassName()/]By[getTheParentPropertyName(aClass, otherParentAss).toString().toUpperFirst()/]([aClass.getParentClass(otherParentAss).getEntityClassName()/] [aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/], Pageable pageable) { + Page<[aClass.getEntityClassName()/]> [aClass.getEntityClassName().toLowerFirst()/]Page = [aClass.getEntityClassName().toLowerFirst()/]Repository.findBy[if(aClass.hasCompositeKey() and otherParentAss.isIdentifying())][aClass.getClassIdName().toUpperFirst()/][/if][getTheParentPropertyName(aClass, otherParentAss).toString().toUpperFirst()/]([aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/], pageable); + List<[aClass.getParentClass(parentAss).getEntityClassName()/]> content = [aClass.getEntityClassName().toLowerFirst()/]Page.getContent().stream() + .map([aClass.getEntityClassName()/]::get[getTheParentPropertyName(aClass, parentAss).toString().toUpperFirst()/]).collect(Collectors.toList()); + Page<[aClass.getParentClass(parentAss).getEntityClassName()/]> result = new PageImpl<[aClass.getParentClass(parentAss).getEntityClassName()/]>(content, pageable, [aClass.getEntityClassName().toLowerFirst()/]Page.getTotalElements()); + return result; +} +[/for] +[/for] +[/if] +[/template] + +[template public genBulkUpdate(aClass : Class)] +@Override +@Transactional() +public [getEntityClassName(aClass)/] bulkUpdate([getEntityClassName(aClass)/] [getEntityClassName(aClass).toString().toLowerFirst()/]) { + [if(aClass.hasChilds())] + [for(childAss : Association | aClass.getChildAssociations())] + List<[getEntityClassName(getChildClass(aClass, childAss))/]> update[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/] = [getEntityClassName(aClass).toString().toLowerFirst()/].get[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/]().stream().filter(child -> !child.isDeletedEntityState()).collect(Collectors.toList()); + List<[getEntityClassName(getChildClass(aClass,childAss))/]> delete[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/] = [getEntityClassName(aClass).toString().toLowerFirst()/].get[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/]().stream().filter(GenericEntity::isDeletedEntityState).collect(Collectors.toList()); + + [getEntityClassName(aClass).toString().toLowerFirst()/].set[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/](update[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/]); + [/for] + [for(childAss : Association | aClass.getChildAssFromImportedModels())] + List<[getEntityClassName(getChildClass(aClass, childAss))/]> update[getEntityClassName(getChildClass(aClass, childAss))/] = [getEntityClassName(aClass).toString().toLowerFirst()/].get[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/]().stream().filter(child -> !child.isDeletedEntityState()).collect(Collectors.toList()); + List<[getEntityClassName(getChildClass(aClass,childAss))/]> delete[getEntityClassName(getChildClass(aClass, childAss))/] = [getEntityClassName(aClass).toString().toLowerFirst()/].get[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/]().stream().filter(GenericEntity::isDeletedEntityState).collect(Collectors.toList()); + + [getEntityClassName(aClass).toString().toLowerFirst()/].set[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/](update[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/]); + [/for] + [/if] + + [getEntityClassName(aClass)/] update = this.update([getEntityClassName(aClass).toString().toLowerFirst()/]); + + [if(aClass.hasChilds())] + [for(childAss : Association | aClass.getChildAssociations())] + delete[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/].forEach(child -> [if(childAss.isSelfRelation()._not())][getServiceClassName(getChildClass(aClass, childAss)).toString().toLowerFirst()/].[/if]deleteById(child.get[getClassIdName(getChildClass(aClass,childAss)).toString().toUpperFirst()/]())); + [/for] + [for(childAss : Association | aClass.getChildAssFromImportedModels())] + delete[getTheChildPropertyName(aClass, childAss).toString().toUpperFirst()/].forEach(child -> [if(childAss.isSelfRelation()._not())][getServiceClassName(getChildClass(aClass, childAss)).toString().toLowerFirst()/].[/if]deleteById(child.get[getClassIdName(getChildClass(aClass,childAss)).toString().toUpperFirst()/]())); + [/for] + [/if] + return update; + } +[/template] + +[template public genNotIdentifyingParentSpecifications(aClass : Class)] +[for(identifyingAss: Association | aClass.getNotIdentifyingParentAssociations())] +if (criteria.get[aClass.getTheParentPropertyName(identifyingAss).toUpperFirst()/]ObjectKey() != null) { + [aClass.getParentClass(identifyingAss).getEntityClassName()/] [aClass.getParentClass(identifyingAss).getEntityClassName().toLowerFirst()/] = new [aClass.getParentClass(identifyingAss).getEntityClassName()/](criteria.get[aClass.getTheParentPropertyName(identifyingAss).toUpperFirst()/]ObjectKey()); + +[for(id: Property | aClass.getParentClass(identifyingAss).getClassIDsIncludingFK())] + specification = specification.and(filterService.generateEqualsSpecification( + [aClass.getParentClass(identifyingAss).getEntityClassName().toLowerFirst()/][if(aClass.getParentClass(identifyingAss).hasCompositeKey())].get[aClass.getParentClass(identifyingAss).getClassIdName().toUpperFirst()/]()[/if].get[id.name.toUpperFirst()/](), + r -> r[getLastPathPartForNotIdentifyingParents(id, aClass, identifyingAss)/])); +[/for] +} +[/for] +[/template] + +[template public genCompositeKeyAndSpecifications(aClass : Class)] +[for(identifyingAss: Association | aClass.getIdentifyingParentAssociations())] +if (criteria.get[aClass.getTheParentPropertyName(identifyingAss).toUpperFirst()/]ObjectKey() != null) { + [aClass.getParentClass(identifyingAss).getEntityClassName()/] [aClass.getParentClass(identifyingAss).getEntityClassName().toLowerFirst()/] = new [aClass.getParentClass(identifyingAss).getEntityClassName()/](criteria.get[aClass.getTheParentPropertyName(identifyingAss).toUpperFirst()/]ObjectKey()); + +[for(id: Property | aClass.getParentClass(identifyingAss).getClassIDsIncludingFK())] + specification = specification.and(filterService.generateEqualsSpecification( + [aClass.getParentClass(identifyingAss).getEntityClassName().toLowerFirst()/][if(aClass.getParentClass(identifyingAss).hasCompositeKey())].get[aClass.getParentClass(identifyingAss).getClassIdName().toUpperFirst()/]()[/if].get[id.name.toUpperFirst()/](), + r -> r[getLastPathPart(id, aClass, identifyingAss)/])); +[/for] +[comment] specification = specification.and(filterService.generateEqualsSpecification( + repartoVendite.getRepartoVenditeKey().getIdDipartimento(), + r -> r.get(Ordine_.ordineKey).get(OrdineKey_.theRepartoVendite) + .get(RepartoVendite_.repartoVenditeKey).get(RepartoVenditeKey_.theDipartimento) + .get(Dipartimento_.dipartimentoKey).get(DipartimentoKey_.idDipartimento)));[/comment] +} +[/for] + +[comment][for(identifyingAss: Association | aClass.getIdentifyingParentAssociations())] +[for(parentId: Property | aClass.getParentClass(identifyingAss).getClassIDs())] +[if(parentId.isNumeric())] +if (criteria.get[parentId.getParentPropAssName(aClass, identifyingAss).toUpperFirst()/]() != null) { + specification = specification.and(filterService.generateRangeSpecification(criteria.get[parentId.getParentPropAssName(aClass, identifyingAss).toUpperFirst()/](), r-> r.get([aClass.getEntity_ClassName()/].[aClass.getClassIdName().toLowerFirst()/]).get([aClass.getClassIdName().toUpperFirst()/]_.[aClass.getTheParentPropertyName(identifyingAss)/]).get([aClass.getParentClass(identifyingAss).name/]_.[getClassIdName(aClass.getParentClass(identifyingAss))/])[if(aClass.getParentClass(identifyingAss).hasCompositeKey())].get([getClassIdName(aClass.getParentClass(identifyingAss)).toString().toUpperFirst()/]_.[parentId.getParentPropAssName(aClass, identifyingAss)/])[/if])); +} +[elseif(parentId.isString())] +if (criteria.get[parentId.getParentPropAssName(aClass, identifyingAss).toUpperFirst()/]() != null) { + specification = specification.and(filterService.generateStringSpecification(criteria.get[parentId.getParentPropAssName(aClass, identifyingAss).toUpperFirst()/](), r-> r.get([aClass.getEntity_ClassName()/].[aClass.getClassIdName().toLowerFirst()/]).get([aClass.getClassIdName().toUpperFirst()/]_.[aClass.getTheParentPropertyName(identifyingAss)/]).get([aClass.getParentClass(identifyingAss).name/]_.[getClassIdName(aClass.getParentClass(identifyingAss))/])[if(aClass.getParentClass(identifyingAss).hasCompositeKey())].get([getClassIdName(aClass.getParentClass(identifyingAss)).toString().toUpperFirst()/]_.[parentId.getParentPropAssName(aClass, identifyingAss)/])[/if])); +} +[/if] +[/for][/for][/comment] +[/template] + +[template public getLastPathPart(id : Property, aClass: Class, parentAss: Association)] +.get([aClass.getEntityClassName()/]_.[aClass.getClassIdName().toLowerFirst()/]) +[if(aClass.isInInnerID(id))] +.get([aClass.getClassIdName().toUpperFirst()/]_.[id.name.toLowerFirst()/]) +[else] +[if(aClass.getParentClass(parentAss).isInInnerID(id))] +[if(aClass.getParentClass(parentAss).hasCompositeKey()._not())] +.get([aClass.getClassIdName().toUpperFirst()/]_.[aClass.getTheParentPropertyName(parentAss)/]).get([aClass.getParentClass(parentAss).getEntityClassName().toUpperFirst()/]_.[id.name.toLowerFirst()/]) +[else] +.get([aClass.getClassIdName().toUpperFirst()/]_.[aClass.getTheParentPropertyName(parentAss)/]).get([aClass.getParentEntityClassName(parentAss).toUpperFirst()/]_.[aClass.getParentClass(parentAss).getClassIdName().toLowerFirst()/]).get([aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]_.[id.name.toLowerFirst()/]) +[/if] +[else] +[for(grandParentAss: Association | aClass.getParentClass(parentAss).getIdentifyingParentAssociations())] +[if(aClass.hasCompositeKey())] +.get([aClass.getClassIdName().toUpperFirst()/]_.[aClass.getTheParentPropertyName(parentAss)/]) +[comment].get([aClass.getParentClass(parentAss).getEntityClassName().toUpperFirst()/]_.[aClass.getParentClass(parentAss).getClassIdName().toLowerFirst()/]). +.get([aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]_.[aClass.getParentClass(parentAss).getTheParentPropertyName(grandParentAss)/])[/comment] +[/if][getLastPathPart(id, aClass.getParentClass(parentAss), grandParentAss)/] +[/for] +[/if] +[/if] +[/template] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[template public getLastPathPartForNotIdentifyingParents(id : Property, aClass: Class, parentAss: Association)] +[if(parentAss.isIdentifying()._not())] +.get([aClass.getEntityClassName()/]_.[aClass.getTheParentPropertyName(parentAss)/]) +[else] +[if(aClass.hasCompositeKey())] +.get([aClass.getClassIdName().toUpperFirst()/]_.[aClass.getTheParentPropertyName(parentAss)/]) +[/if] +[/if] +[if(aClass.getParentClass(parentAss).hasCompositeKey())] +.get([aClass.getParentEntityClassName(parentAss)/]_.[aClass.getParentClass(parentAss).getClassIdName().toLowerFirst()/]) +[/if] +[if(aClass.getParentClass(parentAss).isInInnerID(id))] +[if(aClass.getParentClass(parentAss).hasCompositeKey())] +.get([aClass.getParentClass(parentAss).getClassIdName().toUpperFirst()/]_.[id.name.toLowerFirst()/]) +[else] +.get([aClass.getParentEntityClassName(parentAss)/]_.[id.name.toLowerFirst()/]) +[/if] +[else] +[for(grandParentAss: Association | aClass.getParentClass(parentAss).getIdentifyingParentAssociations())] +[getLastPathPartForNotIdentifyingParents(id, aClass.getParentClass(parentAss), grandParentAss)/] +[/for] +[/if] +[/template] + +[template public genConstructor(aClass : Class)] +public [aClass.getServiceImplClassName()/]([getRepositoryClassName(aClass)/] [getRepositoryClassName(aClass).toString().toLowerFirst()/], +[getFilterServiceClassName(aClass)/] filterService, +[for(childAss : Association | aClass.getChildAssociations())] +[if(isSelfRelation(childAss))] +[getServiceClassName(aClass)/] [getServiceClassName(aClass).toString().toLowerFirst()/], +[/if] +[/for] +[for(c:Class| aClass.getChildClassesNoDup()) separator (',')] +[if((getServiceClassName(c).toString().equalsIgnoreCase(getServiceClassName(aClass)))._not())] +[getServiceClassName(c)/] [getServiceClassName(c).toString().toLowerFirst()/][/if][/for] +) { +[for(childAss : Association | aClass.getChildAssociations())] +[if(isSelfRelation(childAss))] +this.[getServiceClassName(aClass).toString().toLowerFirst()/] = [getServiceClassName(aClass).toString().toLowerFirst()/]; +[/if] +[/for] +[for(c:Class| aClass.getChildClassesNoDup())] +[if((getServiceClassName(c).toString().equalsIgnoreCase(getServiceClassName(aClass)))._not())] + this.[getServiceClassName(c).toString().toLowerFirst()/] = [getServiceClassName(c).toString().toLowerFirst()/];[/if][/for] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/test.mtl b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/test.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e33a8b783b30ba9287a28328a28665c28f630d89 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.library/src/it/micegroup/voila2/cartridge/library/test.mtl @@ -0,0 +1,14 @@ +[comment encoding = UTF-8 /] + +[comment] +test +[/comment] + +[module test('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[template public test(oclAny: OclAny)] +[consoleMessage('test')/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/.classpath b/plugin-version/it.micegroup.voila2.cartridge.springjpa/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..4f868d57dc68d3d46fdb73dd871ff9c7ba1e8348 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/.project b/plugin-version/it.micegroup.voila2.cartridge.springjpa/.project new file mode 100644 index 0000000000000000000000000000000000000000..4d253a56215d786963f8208a81aa77b73033dee5 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/.project @@ -0,0 +1,50 @@ + + + it.micegroup.voila2.cartridge.springjpa + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.acceleo.ide.ui.acceleoBuilder + + + compilation.kind + compilation.absolute.path + + + compliance + pragmatic + + + resource.kind + xmi + + + trim-position + false + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.acceleo.ide.ui.acceleoNature + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/.settings/org.eclipse.jdt.core.prefs b/plugin-version/it.micegroup.voila2.cartridge.springjpa/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..c05cfdd98a13aa17c7feaff848b8d1bb9716c9bd --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=15 +org.eclipse.jdt.core.compiler.compliance=15 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=15 diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/META-INF/MANIFEST.MF b/plugin-version/it.micegroup.voila2.cartridge.springjpa/META-INF/MANIFEST.MF new file mode 100644 index 0000000000000000000000000000000000000000..52411bf253b97d52446ef958a992264c61d1f0b2 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/META-INF/MANIFEST.MF @@ -0,0 +1,24 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SpringBoot-Jpa +Bundle-SymbolicName: it.micegroup.voila2.cartridge.springjpa;singleton:=true +Bundle-Version: 1.0.0.qualifier +Automatic-Module-Name: it.micegroup.voila2.cartridge.springjpa +Bundle-RequiredExecutionEnvironment: JavaSE-11 +Export-Package: it.micegroup.voila2.cartridge.springjpa.templates +Require-Bundle: org.eclipse.emf.common;bundle-version="2.22.0", + org.eclipse.emf.transaction;bundle-version="1.9.1", + org.eclipse.uml2.uml;bundle-version="5.5.0", + org.apache.log4j;bundle-version="1.2.15", + org.apache.commons.lang3;bundle-version="3.1.0", + org.apache.commons.io;bundle-version="2.6.0", + org.eclipse.ui;bundle-version="3.118.100", + org.eclipse.ui.console;bundle-version="3.10.0", + org.eclipse.emf.mwe.core;bundle-version="1.6.0", + org.eclipse.jdt.core;bundle-version="3.24.0", + org.eclipse.jface.text;bundle-version="3.16.500", + org.eclipse.uml2.uml;visibility:=reexport, + it.micegroup.voila2.cartridge.library, + org.eclipse.acceleo.engine;bundle-version="3.7.11";visibility:=reexport +Bundle-ActivationPolicy: lazy +Bundle-Activator: it.micegroup.voila2.cartridge.springjpa.Activator diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/build.properties b/plugin-version/it.micegroup.voila2.cartridge.springjpa/build.properties new file mode 100644 index 0000000000000000000000000000000000000000..34d2e4d2dad529ceaeb953bfcdb63c51d69ffed2 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/Activator.java b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/Activator.java new file mode 100644 index 0000000000000000000000000000000000000000..193c30a54ac4403953bdc0888b7fe9772ff97885 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/Activator.java @@ -0,0 +1,67 @@ + +/******************************************************************************* + * Copyright (c) 2008, 2011 Obeo. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package it.micegroup.voila2.cartridge.springjpa; + +import org.eclipse.core.runtime.Plugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle. + */ +public class Activator extends Plugin { + + /** + * The plug-in ID. + */ + public static final String PLUGIN_ID = "it.micegroup.voila2.cartridge.springjpa"; + + /** + * The shared instance. + */ + private static Activator plugin; + + /** + * The constructor. + */ + public Activator() { + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance. + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/applicationResources.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/applicationResources.mtl new file mode 100644 index 0000000000000000000000000000000000000000..2b38f06b229f27761e5592b5a7a9d4db49cb66d6 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/applicationResources.mtl @@ -0,0 +1,101 @@ +[comment encoding = UTF-8 /] +[module applicationResources('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] + +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] + +[import it::micegroup::voila2::cartridge::library::properties /] + +[template public genApplicationResources(aModel : Model)] +[genApplicationResourcesContent(aModel, '')/] +[genApplicationResourcesContent(aModel, '_it')/] +[genApplicationResourcesContent(aModel, '_en')/] +[/template] + +[template public genApplicationResourcesContent(aModel : Model, lang : String){classes : Collection(OclAny) = aModel.getEntities();}] +[file(getApplicationResourcesFileName(lang), false, 'UTF-8')] +## Login +login.login=Accedi +login.button=Accedi +login.validation.username=Username è obbligatorio +login.validation.password=La password è obbligatoria +login.label=Effettua l'accesso + +## Pagination +pagination.Showing=Mostra +pagination.ElementsOf=Elementi di +pagination.All=Tutti" + +## Buttons +buttons.new=Nuovo +buttons.save=Salva +buttons.edit=Modifica +buttons.delete=Cancella +buttons.goBack=Indietro +buttons.search=Cerca +buttons.next=Avanti +buttons.export.pdf=Crea PDF + +## Panel +[for(classe : Class | classes)] +[classe.getEntityClassName().toLowerFirst()/].panelTitle.new=Inserisci [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].panelTitle.edit=Modifica [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].panelTitle.view=Dettaglio [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].panelTitle.delete=Cancella [splitCamel(classe.getEntityClassName())/] +[/for] + +## Detail +[for(classe : Class | classes)] +[classe.getEntityClassName().toLowerFirst()/].label=[classe.getEntityLabel()/] +[classe.getEntityClassName().toLowerFirst()/].tooltip=[classe.getEntityTooltip()/] +[classe.getEntityClassName().toLowerFirst()/].insert=Inserisci [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].detail=Dettaglio [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].edit=Modifica [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].delete=Cancella [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].objectTitle=[splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].objectKey=ID [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].jasperReports.title=[splitCamel(classe.getEntityClassName())/] Report +[classe.getEntityClassName().toLowerFirst()/].jasperReports.subTitle=[getProjectName().toUpperFirst()/], v[getVersion()/] +[classe.getEntityClassName().toLowerFirst()/].jasperReports.tableHeader=Dettaglio [splitCamel(classe.getEntityClassName())/] +[for(attributo : Property | classe.getCompleteAttributeListForPresentation()) separator(',\n')] +[if(attributo.isBoolean())] +[classe.getEntityClassName().toLowerFirst()/].[attributo.name/].true=Si +[classe.getEntityClassName().toLowerFirst()/].[attributo.name/].false=No +[/if] +[classe.getEntityClassName().toLowerFirst()/].[attributo.name/]=[attributo.getAttributeLabel()/] +[classe.getEntityClassName().toLowerFirst()/].tooltip.[attributo.name/]=[attributo.getTooltip()/] +[classe.getEntityClassName().toLowerFirst()/].validation.required.[attributo.name/]=[attributo.getNaturalLanguageName()/] è obbligatorio"[/for][if(classe.hasParents())][/if] +[if(classe.hasParents())] +[for(parentAss: Association | classe.getParentAssociations()) separator(',\n') after ('\n')] +[classe.getEntityClassName().toLowerFirst()/].[classe.getTheParentPropertyName(parentAss)/]=[splitCamel(classe.getParentClass(parentAss).getEntityClassName())/][if(not classe.getParentEnd(parentAss).oclIsUndefined() and not classe.getParentEnd(parentAss).name.oclIsUndefined())] [splitCamel(classe.getParentEnd(parentAss).name)/][/if] +[classe.getEntityClassName().toLowerFirst()/].validation.required.[classe.getTheParentPropertyName(parentAss)/]=[splitCamel(classe.getParentClass(parentAss).getEntityClassName())/] è obbligatorio[/for] +[/if] +[/for] + +## App +[for(classe : Class | classes)] +app.[classe.getEntityClassName().toLowerFirst()/].new=Inserisci [splitCamel(classe.getEntityClassName())/] +app.[classe.getEntityClassName().toLowerFirst()/].list=Lista [splitCamel(classe.getEntityClassName())/] +app.[classe.getEntityClassName().toLowerFirst()/].edit=Modifica [splitCamel(classe.getEntityClassName())/] +app.[classe.getEntityClassName().toLowerFirst()/].view=Dettaglio [splitCamel(classe.getEntityClassName())/] +app.[classe.getEntityClassName().toLowerFirst()/].delete=Cancella [splitCamel(classe.getEntityClassName())/] +[/for] + +## JasperReports +jasperReports.logo=mice.png +jasperReports.date.format=dd/MM/yyyy +jasperReports.datetime.format=dd/MM/yyyy HH:mm:ss +jasperReports.pageNumber.label=Pag. +jasperReports.pageNumber.separator=di +jasperReports.footer.text=Copyright \u00a9 2020 MICE srl. Tutti i diritti riservati. + +[/file] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/controller.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/controller.mtl new file mode 100644 index 0000000000000000000000000000000000000000..d70d2619cf98bb3917afe18ac1457edd35304486 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/controller.mtl @@ -0,0 +1,87 @@ +[comment encoding = UTF-8 /] + +[comment] + +Controller Java Class Template + +@author Simone Punzo + +[/comment] + + +[module controller('http://www.eclipse.org/uml2/5.0.0/UML')] + + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] +[comment][import it::micegroup::voila2::cartridge::library::springboot::controllerUtils /][/comment] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] +[import it::micegroup::voila2::cartridge::library::microservice::controllerMsUtils/] + +[template public genControllerFileMs(aClass : Class, aModel: Model) post(writeAndFormat(aClass.getControllerFileName()))] +package [getControllerPackage(aClass)/]; + +[genControllerImportsAsMs(aClass)/] + +@RequiredArgsConstructor +@RestController +@RequestMapping(value = "/[camelToDash(aClass.name)/]", produces = MediaType.APPLICATION_JSON_VALUE) +public class [getControllerClassName(aClass)/] extends BaseController>{ + + /// ENTITY SERVICE + private final [getServiceClassName(aClass)/] [getServiceClassName(aClass).toString().toLowerFirst()/]; + private final [getAssemblerClassName(aClass)/] [getAssemblerClassName(aClass).toString().toLowerFirst()/]; + private final PagedResourcesAssembler<[getEntityClassName(aClass)/]> pagedResourcesAssembler; + private final ModelMapper modelMapper; + // CHILD SERVICES + [genChildServices(aClass)/] + + // CONSTRUCTOR +[comment] [genConstructor(aClass)/][/comment] + [genPostConstructor(aClass)/] + + + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger([aClass.getControllerClassName()/].class); + [comment]private static final String ENTITY_NAME = "[aClass.getEntityClassName().toLowerFirst()/]";[/comment] + + // API + [genGetAllPaginated(aClass, aModel)/] + +[comment] [genGetByCriteria(aClass, aModel)/][/comment] + + [genGetById(aClass, aModel)/] + + [genUpdate(aClass, aModel)/] + + [genCreate(aClass, aModel)/] + + [genDeleteByID(aClass, aModel)/] + +[comment] [genMassDelete(aClass)/] + + [genMassUpdate(aClass)/] + + [genMassInsert(aClass)/][/comment] + + [genGetByParentId(aClass, aModel)/] + + [genPrintPdfReport(aClass, aModel)/] + + [genGetChildByObjectKey(aClass, aModel)/] + +[comment] [genFindOtherParentByParent(aClass)/][/comment] + + [genToResponseEntity(aClass)/] + + [genToResponseEntityPaged(aClass)/] + + [genDtoToEntity(aClass)/] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/criteria.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/criteria.mtl new file mode 100644 index 0000000000000000000000000000000000000000..68cc1319d597a7a75151e8993a22948fd5c3e222 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/criteria.mtl @@ -0,0 +1,61 @@ +[comment encoding = UTF-8 /] + +[comment] + +Criteria Java File Template + +@author Vittorio Niespolo + +[/comment] + +[module criteria('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::generalUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] + +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::filterUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] + +[template public genCriteriaFile(aClass : Class,isMs : Boolean) post(writeAndFormat(aClass.getCriteriaFileName()))] +package [getCriteriaPackage(aClass)/]; + +[genCriteriaImports(aClass)/] + +public class [getCriteriaClassName(aClass)/][if(aClass.hasGeneralClass())] extends [aClass.getGeneralClass().getCriteriaClassName()/][/if] implements Serializable { + + // SERIAL UID + [genSerialUID(aClass)/] + + // FILTER ATTRIBUTES + [genFilterProperties(aClass)/] + + // FILTER FATHER + [genFilterPropertiesFather(aClass)/] + + [if(isMs)] + //FILTER IMPORTED FATHER + [genFilterPropertiesImportedFather(aClass)/] + [/if] + // GETTER/SETTER + [genFilterGetterSetter(aClass)/] + + // GETTER/SETTER FATHER + [genFilterFatherGetterSetter(aClass)/] + + [if(isMs)] + //GETTER/SETTER IMPORTED FATHER + [genFilterImportedFatherGetterSetter(aClass)/] + [/if] + + // GEN COMPOSITE FILTER +[comment] [genFatherCompositeFilter(aClass)/][/comment] + +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityDto.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityDto.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e776c4b48afdf4221e7279e677678a0927795766 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityDto.mtl @@ -0,0 +1,42 @@ +[module entityDto('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::dtoUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] + +[template public genDtoClassSpecificFile(aClass : Class, aModel : Model) post(writeAndFormat(aClass.getEntityDtoFileName()))] +package [getEntityDtoPackage()/]; + +[genEntityDtoImports(aClass)/] +[genImportsForPropertyDto(aClass)/] +[genBaseDtoImport()/] + +@Data +@EqualsAndHashCode(callSuper = false) +public class [getEntityDtoClassName(aClass)/] extends BaseDto { + + [genSerialUID(aClass)/] + + @JsonProperty + private String objectKey; + @JsonProperty + private String objectTitle; + [genDtoAttributes(aClass)/] + + [genAttributesFromParent(aClass)/] +[comment] [genChildrenDto(aClass)/][/comment] + + [if(aClass.hasCompositeKey())] + @JsonProperty + private [aClass.getClassIdType()/]Dto [aClass.getClassIdName()/]; + [/if] +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityKeyDto.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityKeyDto.mtl new file mode 100644 index 0000000000000000000000000000000000000000..392e2a820c5efdc63227bde28ef862af678202f9 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityKeyDto.mtl @@ -0,0 +1,32 @@ +[module entityKeyDto('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::dtoUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] + +[template public genDtoEntityKeyFile(aClass : Class , aModel : Model) post(writeAndFormat(aClass.getKeyDtoFileName()))] +package [getEntityDtoPackage()/]; + +[genEntityDtoImports()/] +[genImportsForPropertyDto(aClass)/] +[genGenericDtoImport()/] + +@Data +@EqualsAndHashCode(callSuper = false) +public class [getEntityKeyDtoClassName(aClass)/] extends GenericDto{ +[for(id : Property | aClass.getClassIDs())] + private [id.type.getJavaType()/] [id.name/]; +[/for] +[for(parentAss : Association | aClass.getIdentifyingParentAssociations())] + private String [aClass.getTheParentPropertyName(parentAss)/]ObjectKey; + private String [aClass.getTheParentPropertyName(parentAss)/]ObjectTitle; +[/for] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityWriteDto.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityWriteDto.mtl new file mode 100644 index 0000000000000000000000000000000000000000..a858a6e699db8c94e0cf017efdf21be8907bdefc --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/entityWriteDto.mtl @@ -0,0 +1,40 @@ +[module entityWriteDto('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::dtoUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] + +[template public genDtoEntityWriteFile(aClass : Class , aModel : Model) post(writeAndFormat(aClass.getDtoWriteFileName()))] +package [getEntityDtoPackage()/]; + +[genEntityDtoImports()/] +[genImportsForPropertyDto(aClass)/] +[genGenericDtoImport()/] +[comment][if(aClass.hasCompositeKey())] +import [getEntityPackage()/].[aClass.getClassIdName().toUpperFirst()/]WriteDto; +[/if][/comment] + +@Data +@EqualsAndHashCode(callSuper = false) +public class [getEntityWriteDtoClassName(aClass)/] extends GenericDto{ + + /** + * + * ObjectKey + * + */ + @JsonProperty + private String objectKey; + + [genWriteDtoAttributes(aClass)/] + [if(aClass.hasCompositeKey())] + @JsonProperty + private [aClass.getClassIdType()/]Dto [aClass.getClassIdName()/]; + [/if] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/mailWriteDto.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/mailWriteDto.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b19c42316909c55b23914ec2a4552fb26813bc63 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/dataTransfer/mailWriteDto.mtl @@ -0,0 +1,40 @@ +[module mailWriteDto('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] + + +[template public genMailWriteDto(aModel : Model) post(writeAndFormat(getMailWriteDtoFileName()))] +package [getEntityDtoPackage()/]; + +[genMailRequestDtoImports()/] + +@Data +@EqualsAndHashCode(callSuper = false) +public class MailRequestDto { + + private static final long serialVersionUID = 260627236L; + + @NotNull + @JsonProperty("template") + private String idTemplate; + + @JsonProperty("objectMap") + private Map objectMap; + + @JsonProperty("allegati") + private Map allegati; + + @Override + public String toString() { + return "MailDto{" + + "idTemplate=" + idTemplate + + ",allegati =" + allegati + + '}'; + } + + +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entity.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entity.mtl new file mode 100644 index 0000000000000000000000000000000000000000..58af74ceaac2c50ddb09a3d231dbcd56c32a9735 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entity.mtl @@ -0,0 +1,141 @@ +[comment encoding = UTF-8 /] + +[comment] + +Entity Java File Template + +@author Vittorio Niespolo + +[/comment] + +[module entity('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] + +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils/] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::entityKey/] + +[template public genEntityFile(aClass : Class, aModel: Model) post(writeAndFormat(aClass.getEntityFileName()))] +package [getEntityPackage(aClass)/]; + +[genEntityImports(aClass)/] + +[if(aClass.hasDefinition())] +/** +[getEntityDefinition(aClass)/] +*/ +[/if] +@NoArgsConstructor +[if(entityHasOneStringField(aClass))]@AllArgsConstructor[/if] +@Getter +@Setter +[if(isClassExtended(aClass))] +@Inheritance(strategy = InheritanceType.JOINED) +[/if] +@Entity +@Table(name = "[getPhysicalTableName(aClass)/]") +public class [getEntityClassName(aClass)/] extends +[if(aClass.hasGeneralClass())] [aClass.getGeneralClass().getEntityClassName()/] +[elseif(aClass.isAuditable())] Auditable +[else]BaseEntity +[/if] +implements Serializable{ + + [comment] Generate serial versione uid as Serializable class resquests [/comment] + [genSerialUID(aClass)/] + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger([aClass.getEntityClassName()/].class); + + // ATTRIBUTES + [genAttributes(aClass)/] + + // IMPORTED PARENTS + [genImportedParentProperty(aClass)/] + + // CONSTRUCTORS + [genConstructor(aClass)/] + + // CHILDREN + [genChildCollections(aClass)/] + + // PARENTS + [genParentProperty(aClass)/] + + // GETTER/SETTER + [genGetterSetter(aClass)/] + + [genImportedParentGetterSetter(aClass)/] + + // CHILD GETTER/SETTER + [genChildGetterSetter(aClass)/] + + /// ADD CHILD + [genAddChild(aClass)/] + + // PARENT GETTER/SETTER + [genParentGetterSetter(aClass)/] + [comment]Se ha CK devi creare questi getter tramite la key[/comment] + [genCKParentGetterSetter(aClass)/] + + // PARENT ID GETTER/SETTER + [genParentIdGetter(aClass)/] +[comment] [genParentIdSetter(aClass)/][/comment] + + // PARENT OBJECT TITLE + [genParentObjectTitleGetter(aClass)/] + + // PARENT OBJECT KEY + [for(a : Association | aClass.getNotIdentifyingParentAssociations())] + [genParentObjectKeyGetter(aClass, a, false, false)/] + [genParentObjectKeySetter(aClass, a, false)/] + [/for] + [for(a : Association | aClass.getIdentifyingParentAssociations())] + [genParentObjectKeyGetter(aClass, a, true, false)/] + [genParentObjectKeySetter(aClass, a, true)/] + [/for] + + // IMPORTED PARENT OBJECT KEY + [genImportedParentObjectKeyGetter(aClass)/] + [genImportedParentObjectKeySetter(aClass)/] + + // OPERATIONS + [genOperations(aClass)/] + + // OBJECT KEY + [genGetObjectKey(aClass)/] + [genSetObjectKey(aClass)/] + + // OBJECT TITLE + [genGetObjectTitle(aClass)/] + + [if(hasCompositeKey(aClass))] + + // COMPOSITE PRIMARY KEY + [genCompositeKeyProperty(aClass)/] + + // GETTER/SETTER CK + [genGetterByPropNameNType(getClassIdName(aClass), getClassIdType(aClass))/] + [genSetterByPropNameNType(getClassIdName(aClass), getClassIdType(aClass))/] + + // COMPOSITE KEY CLASS + [genCompositeKeyFile(aClass,aModel)/] + [/if] + + [genPrePersist(aClass, aModel)/] + [genPreUpdate(aClass, aModel)/] + + //Equals / HashCode + [genEqualsHashcode(aClass)/] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entityGeneration.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entityGeneration.mtl new file mode 100644 index 0000000000000000000000000000000000000000..39efd26dcf29992ab390376d2c8b0244cee38eb9 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entityGeneration.mtl @@ -0,0 +1,41 @@ +[module entityGeneration('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::entity/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::service/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::serviceImpl/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::controller/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::criteria/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::resource/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::repository/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::modelAssembler/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::dataTransfer::entityWriteDto/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::dataTransfer::entityKeyDto/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::dataTransfer::entityDto/] + + +[template public genEntitySpecificFiles(aModel : Model, isMs : Boolean)] +[for(aClass : Class | aModel.getEntities())] + [consoleMessage(getInfoSeverity(), 'Code Generation for the Entity: ' + aClass.name)/] + [if (not aClass.hasDefinition())] + [consoleMessage(getWarnSeverity(), 'Entity ' + aClass.name + ' has no definition')/] + [/if] + [genEntityFile(aClass, aModel)/] + [genServiceFile(aClass, aModel)/] + [genServiceImplFile(aClass, aModel,isMs)/] + [genControllerFileMs(aClass, aModel)/] + [genAssemblerFile(aClass)/] + [genDtoEntityWriteFile(aClass, aModel)/] + [if(aClass.hasCompositeKey())] + [genDtoEntityKeyFile(aClass, aModel)/] + [/if] + [genCriteriaFile(aClass,isMs)/] + [genRepositoryFile(aClass,isMs)/] + [genDtoClassSpecificFile(aClass, aModel)/] + [comment]TO DO genClassSpecificAssemblerForMs[/comment] + +[/for] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entityKey.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entityKey.mtl new file mode 100644 index 0000000000000000000000000000000000000000..7eb9ae2d42c721867e650558bbdc984917efb337 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/entityKey.mtl @@ -0,0 +1,49 @@ +[module entityKey('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityKeyUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils /] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] + + +[template public genCompositeKeyFile(aClass : Class , aModel : Model) post(writeAndFormat(aClass.getEntityCKFileName()))] +package [getEntityPackage(aClass)/]; + +[genEntityKeyImports(aClass)/] + +@Data +@Embeddable +@NoArgsConstructor +public class [getEntityCKClassName(aClass)/] implements Serializable { + + [genSerialUID(aClass)/] + + /// ATTRIBUTES + [genCKAttributes(aClass)/] + + /// GETTER/SETTER + [genCKGetterSetter(aClass)/] + + /// FIELD CONSTRUCTOR + [genCKConstructor(aClass)/] + + /// OF CONSTRUCTOR + [genOFConstructorForCK(aClass)/] + + [genCKEquals(aClass)/] + + [genCKHashCode(aClass)/] + + // PARENT OBJECT KEY/TITLE + [for(a : Association | aClass.getIdentifyingParentAssociations())] + [genParentObjectKeyGetter(aClass, a, true, true)/] + [genParentObjectTitleGetter(aClass, a)/] + [genParentObjectKeySetter(aClass, a, true)/] + [/for] +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/modelAssembler.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/modelAssembler.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e2de8e20986592001fab77b44891458c425151ca --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/modelAssembler.mtl @@ -0,0 +1,31 @@ +[module modelAssembler('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::modelAssemblerUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] + +[template public genAssemblerFile(aClass : Class) post(writeAndFormat(aClass.getAssemblerFileName()))] +package [getAssemblerPackage()/]; + +[genAssemblerImports(aClass)/] + +@Component +public class [getAssemblerClassName(aClass)/] extends BaseModelAssembler<[getEntityClassName(aClass)/] , [getDtoClassName(aClass)/],[aClass.getControllerClassName()/]> { + + + [genToModel(aClass)/] + + [genToCollectionModel(aClass)/] + + + + } + + +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/repository.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/repository.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e981cbf070b5075ff67e6d77eb3ec2c7f2dc6c58 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/repository.mtl @@ -0,0 +1,55 @@ +[comment encoding = UTF-8 /] + +[comment] + +Repository Java FileTemplate + +@author Vittorio Niespolo + +[/comment] + +[module repository('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] + +[template public genRepositoryFile(aClass : Class,isMs : Boolean) post(writeAndFormat(aClass.getRepositoryFileName()))] +package [getRepositoryPackage(aClass)/]; + +[genRepositoryImports(aClass,isMs)/] +[if(isMs)] +[genRepositoryImportsAsMs()/] +[/if] +@Repository +@EnableJpaRepositories +public interface [getRepositoryClassName(aClass)/] extends BaseRepository<[getEntityClassName(aClass)/], [getClassIdType(aClass)/]>{ + + [genEntityGraph(aClass)/] + Optional<[aClass.getEntityClassName()/]> findBy[aClass.getClassIdName().toUpperFirst()/]([aClass.getClassIdType()/] id); + + [for (a : Association | aClass.getParentAssociations()) separator('\n')] + [genEntityGraph(aClass)/] + [if(aClass.hasCompositeKey() and a.isIdentifying())] + Page<[aClass.getEntityClassName()/]> findBy[aClass.getClassIdName().toUpperFirst()/][aClass.getTheParentPropertyName(a).toUpperFirst()/]([aClass.getParentClass(a).getEntityClassName()/] parentEntity, Pageable pageable); + [else] + Page<[aClass.getEntityClassName()/]> findBy[aClass.getTheParentPropertyName(a).toUpperFirst()/]([aClass.getParentClass(a).getEntityClassName()/] parentEntity, Pageable pageable); + [/if] + [/for] + + @Query("DELETE FROM [aClass.name/] WHERE [aClass.getClassIdName()/] IN ?1") + void deleteByIdIn(Collection<[aClass.getClassIdType()/]> ids); +} +[/template] + +[template public genEntityGraph(aClass : Class)] +[if(aClass.hasParents())] +@EntityGraph(attributePaths = {[for (a2 : Association | aClass.getParentAssociations()) separator(', ')]"[if(aClass.hasCompositeKey() and a2.isIdentifying())][aClass.getClassIdType().toLowerFirst()/].[/if][aClass.getTheParentPropertyName(a2)/]"[/for]}, type = EntityGraphType.FETCH) +[/if] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/resource.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/resource.mtl new file mode 100644 index 0000000000000000000000000000000000000000..eca5c66a32074b0bd67da67247d81be3f3ea90b7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/resource.mtl @@ -0,0 +1,55 @@ +[comment encoding = UTF-8 /] + +[comment] + +Resource for Java Entity File Template + +@author Vittorio Niespolo + +[/comment] + +[module resource('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] + + +[template public genResourceFile(aClass : Class) post(writeAndFormat(aClass.getResourceFileName()))] +package [getResourcePackage(aClass)/]; + +[genResourceImports(aClass)/] + +/** +* Resource class for [aClass.getEntityClassName()/] +*/ + +public class [aClass.getEntityClassName()/]Resource extends Resource<[aClass.getEntityClassName()/]>{ + + public [aClass.getEntityClassName()/]Resource([aClass.getEntityClassName()/] [aClass.getEntityClassName().toLowerFirst()/]) { + + super([aClass.getEntityClassName().toLowerFirst()/]); + + //SELF LINK + add( + [genSelfLink(aClass)/] + ); + [if(aClass.hasChilds())] + //CHILDS LINKS + add( + [genChildLinks(aClass)/] + ); + [/if] + [if(aClass.hasParents())] + //PARENTS LINKS + add( + [genParentLinks(aClass)/] + ); + [/if] + } +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/service.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/service.mtl new file mode 100644 index 0000000000000000000000000000000000000000..dcfbff1e2e55184a6766d4d09c3ba62b4c707146 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/service.mtl @@ -0,0 +1,64 @@ +[comment encoding = UTF-8 /] + +[comment] + +Service Java Class Template + +@author Vittorio Niespolo + +[/comment] + +[module service('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] + +[template public genServiceFile(aClass : Class, aModel: Model) post(writeAndFormat(aClass.getServiceFileName()))] +package [getServicePackage(aClass)/]; + +[genServiceImports(aClass,true)/] +[genServiceImportsAsMs()/] + +public interface [aClass.getServiceClassName()/] extends BaseEntityService<[aClass.getEntityClassName()/], [aClass.getClassIdType()/], [aClass.getCriteriaClassName()/]>{ + +[comment] [aClass.getEntityClassName()/] masterDetailUpdate([aClass.getEntityClassName()/] [aClass.getEntityClassName().toLowerFirst()/]);[/comment] + + //PARENT-SPECIFIC SERVICES +[for(parentAss : Association | aClass.getParentAssociations())] + Page<[aClass.getEntityClassName()/]> findBy[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]([aClass.getParentClass(parentAss).getEntityClassName()/] parentEntity, Pageable pageable); +[/for] + + [if(aClass.isReportEnabled(aModel))] + public byte['[]'/] printPdfReport(String objectKey) throws BusinessException; + [/if] + + [genFindOtherParentByParentService(aClass)/] + + [getEntityClassName(aClass)/] bulkUpdate([getEntityClassName(aClass)/] [getEntityClassName(aClass).toLowerFirst()/]); + +} +[/template] + +[template public genFindOtherParentByParentService(aClass : Class){parentAssociations : Collection(OclAny) = aClass.getParentAssociations();}] +[if(parentAssociations -> size() > 1)] +[for(parentAss : Association | parentAssociations)] +[for(otherParentAss : Association | aClass.getParentAssociationsExcluding(parentAss))] + /** + * Return a list of [aClass.getParentClass(parentAss).getEntityClassName()/] from all [aClass.getEntityClassName()/] with given [getTheParentPropertyName(aClass, parentAss)/] + * + * @param [aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/] + * @param pageable + * @return list of [aClass.getParentClass(parentAss).getEntityClassName()/] from all [aClass.getEntityClassName()/] with given [getTheParentPropertyName(aClass, parentAss).toUpperFirst()/] + */ + Page<[aClass.getParentClass(parentAss).getEntityClassName()/]> find[aClass.getParentClass(parentAss).getEntityClassName()/]By[getTheParentPropertyName(aClass, otherParentAss).toUpperFirst()/]([aClass.getParentClass(otherParentAss).getEntityClassName()/] [aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/], Pageable pageable); +[/for] +[/for] +[/if] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/serviceImpl.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/serviceImpl.mtl new file mode 100644 index 0000000000000000000000000000000000000000..444d4bc3b785565db72b33aaa24d0fd9e5abd182 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/entity/serviceImpl.mtl @@ -0,0 +1,95 @@ +[comment encoding = UTF-8 /] + +[comment] + +ServiceImpl Java Class Template + +@author Vittorio Niespolo + +[/comment] + +[module serviceImpl('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::serviceImplUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] + + +[template public genServiceImplFile(aClass : Class, aModel : Model, isMs : Boolean) post(writeAndFormat(aClass.getServiceImplFileName()))] +package [getServicePackage(aClass)/]; +[genServiceImplImports(aClass, aModel,isMs)/] +[if(isMs)] +[genServiceImplImportsAsMs(aClass)/] +[/if] +@RequiredArgsConstructor +@Service +@Transactional +public class [getServiceImplClassName(aClass)/] extends BaseServiceImpl implements [getServiceClassName(aClass)/] { + + private final [getRepositoryClassName(aClass)/] [getRepositoryClassName(aClass).toString().toLowerFirst()/]; + private final [getFilterServiceClassName(aClass)/] filterService; + + [if(isInSecurityUserRole(aClass) or aClass.generalizeSecurityUserRole())] + private final PasswordEncoder passwordEncoder; + private final RoleService roleService; + [/if] +[comment] //ENTITY SERVICE TO HANDLE SELF REF + [if(isMs)] + [for(childAss : Association | aClass.getChildAssociations())] + [if(isSelfRelation(childAss))] + private final [getServiceClassName(aClass)/] [getServiceClassName(aClass).toString().toLowerFirst()/]; + [/if] + [/for] + [/if][/comment] + + + // CHILD SERVICES + [genChildServices(aClass)/] + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger([aClass.getServiceImplClassName()/].class); + +[comment] [genConstructor(aClass)/][/comment] + + [genFindAll(aClass)/] + + [genFindAllListed(aClass)/] + + [genFindByCriteriaPaged(aClass)/] + + [genFindByCriteria(aClass)/] + + [genFindById(aClass)/] + + [genExists(aClass, aModel)/] + + [genInsert(aClass, aModel)/] + + [genUpdate(aClass, aModel)/] + + [genDelete(aClass)/] + + [genDeleteById(aClass, aModel)/] + + [genDeleteByIdIn(aClass, aModel)/] + + [genFindByObjectKey(aClass,isMs)/] + + [genFindByParentId(aClass, aModel)/] + + [genCreateSpecification(aClass)/] + + [genPrintPdfReport(aClass, aModel)/] + + [genFindOtherParentByParentServiceImpl(aClass)/] + + [genBulkUpdate(aClass)/] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailController.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailController.mtl new file mode 100644 index 0000000000000000000000000000000000000000..403fdd5c90b117b60265432bc5c3de17a359b313 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailController.mtl @@ -0,0 +1,40 @@ +[module mailController('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] + + +[template public genMailController(aModel: Model) post(writeAndFormat(getMailControllerFileName()))] +package [getControllerPackage()/]; + +import javax.validation.Valid; + +[genMailControllerImports()/] + +@RestController +@RequestMapping(value = "/email", produces = MediaType.APPLICATION_JSON_VALUE) +public class MailController { + + @Autowired + MailManagerService mailManagerService; + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger(MailController.class); + + + @PostMapping("/sendEmailTemplate") + public ResponseEntity sendEmailTemplate(@Valid @RequestBody BaseRequest request) throws BusinessException{ + try { + mailManagerService.getMailManager().sendEmailByTemplate(request.getData().getIdTemplate(),request.getData().getObjectMap(),request.getData().getAllegati()); + return new ResponseEntity<>(null, HttpStatus.OK); + } catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(""); + } + } + +} + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailDto.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailDto.mtl new file mode 100644 index 0000000000000000000000000000000000000000..6674dbd1edd41f9cfa51f2331acb94127837e481 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailDto.mtl @@ -0,0 +1,30 @@ +[comment encoding = UTF-8 /] +[module mailDto('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] + +[template public genMailDto(aClass : Class)] +package [getEntityDtoPackage()/]; +package it.micegroup.asd.notification.dto; + +[genMailDtoImports()/] + +@Data +@EqualsAndHashCode(callSuper = false) +public class MailDto { + + @JsonProperty + private String idTemplate; + + @JsonProperty + private Map objectMap; + + @JsonProperty + private Map allegati; + + +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailGeneration.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailGeneration.mtl new file mode 100644 index 0000000000000000000000000000000000000000..477ed72dd67f377f0ee32b1c26dfcb24c6d2d43d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailGeneration.mtl @@ -0,0 +1,21 @@ +[module mailGeneration('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::springjpa::templates::mail::mailManagerService/] +[import it::micegroup::voila2::cartridge::springjpa::templates::mail::mailManagerServiceImpl/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] +[import it::micegroup::voila2::cartridge::springjpa::templates::mail::mailController/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::dataTransfer::mailWriteDto/] + +[template public genMailFiles(aModel: Model)] +[if(isEmailEnabled(aModel) and isNotificationMicroservice())] + [consoleMessage(getInfoSeverity(), 'Email Services Generation') /] + [genServiceMail()/] + [genServiceMailImpl()/] + [genMailController()/] + [genMailWriteDto()/] +[/if] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailManagerService.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailManagerService.mtl new file mode 100644 index 0000000000000000000000000000000000000000..c897333a61410ee37e446a5321ac8d5c567919a3 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailManagerService.mtl @@ -0,0 +1,30 @@ +[comment encoding = UTF-8 /] +[module mailManagerService('http://www.eclipse.org/uml2/5.0.0/UML')] + +[comment] + +Service Mail File Template + +@author Luca Barone + +[/comment] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] + +[** + * Generete MailManagerService.java + * @author Luca Barone +*/] +[template public genServiceMail(oclAny : OclAny) post(writeAndFormat(getServiceMailName()))] +package [getServicePackage()/]; + +[genMailServiceImports()/] + +public interface MailManagerService extends InitializingBean{ + + public MailManager getMailManager(); +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailManagerServiceImpl.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailManagerServiceImpl.mtl new file mode 100644 index 0000000000000000000000000000000000000000..1cabe5ab89e8e732bdf3811f5f8698073a66676d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mail/mailManagerServiceImpl.mtl @@ -0,0 +1,59 @@ +[comment encoding = UTF-8 /] +[module mailManagerServiceImpl('http://www.eclipse.org/uml2/5.0.0/UML')] + +[comment] + +ServiceMailImpl File Template + +@author Luca Barone + +[/comment] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::mailManagerServiceImplUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] +[** + * Generate file MailManagerServiceImpl.java + * @author Luca Barone +*/] +[template public genServiceMailImpl(oclAny : OclAny) post(writeAndFormat(getServiceImplMailName()))] +package [getServicePackage()/]; + +[genMailServiceImplImports()/] + +@Service +@DependsOn("liquibase") +public class MailManagerServiceImpl implements MailManagerService{ + + private static final Log LOGGER = LogFactory.getLog(MailManagerServiceImpl.class); + /* + This class is thinked in way to load the mail configuration from db. + If necessary, change the repository. + */ + + @Autowired + private [genMailConfigRepositoryAttribute()/] + + @Autowired + private [genMailTemplateRepositoryAttribute()/] + + @Autowired + private [genMailStyleRepositoryAttribute()/] + + [genMailServiceImplAttributedMap()/] + + + @Override + [genGetMailManagerMail()/] + + @Override + [genAfterPropertiesSetMail()/] + + [genAttributeMailManager()/] + +} +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainClass.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainClass.mtl new file mode 100644 index 0000000000000000000000000000000000000000..cd3b9554d96bc4bc88ba9afbc0b66d6a14d8e9f0 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainClass.mtl @@ -0,0 +1,38 @@ +[comment encoding = UTF-8 /] + +[comment] + +Main Java Class for SpringBoot Template + +@author Vittorio Niespolo + +[/comment] + +[module mainClass('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::runtimeUtils /] +[import it::micegroup::voila2::cartridge::library::properties/] + + +[template public genMainClass(aModel : Model) post (writeAndFormat(getMainClassFileName()))] +package [getGenericPackage()/]; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; + +@SpringBootApplication +@ComponentScan({ "[getGroupName().concat('.').concat(getRootArtifactId())/]","[getRuntimePackage()/]" }) +public class [getMainClassNameAsMs()/] { + + public static void main(String['['/]] args) { + SpringApplication.run([getMainClassNameAsMs()/].class, args); + } +} +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainSpringJpa.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainSpringJpa.mtl new file mode 100644 index 0000000000000000000000000000000000000000..85f39a6f28020f308cc054ae96f72d7078c3164c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainSpringJpa.mtl @@ -0,0 +1,68 @@ +[comment encoding = UTF-8 /] +[module mainSpringJpa('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::springjpa::templates::mainClass/] + +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] + +[import it::micegroup::voila2::cartridge::springjpa::templates::utilsGeneration/] + +[import it::micegroup::voila2::cartridge::springjpa::templates::settings/] + +[import it::micegroup::voila2::cartridge::springjpa::templates::entity::entityGeneration/] +[import it::micegroup::voila2::cartridge::springjpa::templates::msWeb/] + +[import it::micegroup::voila2::cartridge::springjpa::templates::mainStaticResources/] + +[comment]POM[/comment] +[import it::micegroup::voila2::cartridge::springjpa::templates::pom::pomGeneration/] + +[comment]PROPERTIES[/comment] +[import it::micegroup::voila2::cartridge::springjpa::templates::applicationResources/] + +[comment]MAIL[/comment] +[import it::micegroup::voila2::cartridge::springjpa::templates::mail::mailGeneration/] + +[comment]SECURITY PERMISSIONS[/comment] +[import it::micegroup::voila2::cartridge::springjpa::templates::security::permission/] +[import it::micegroup::voila2::cartridge::springjpa::templates::security::sqlPermissionsScript/] + + +[template public genSpringJpaMain(aModel : Model){isMicroservizio: Boolean = aModel.isMainMs();}] +[comment]MAIN CLASS[/comment] +[consoleMessage(getInfoSeverity(), 'Springboot main class Generation')/] +[genMainClass(aModel)/] + +[comment]settings[/comment] +[consoleMessage(getInfoSeverity(), '.settings Generation')/] +[genMsSettings()/] + +[comment]ENTITY[/comment] +[genEntitySpecificFiles(aModel, isMicroservizio)/] + +[comment]POPOLAMENTO PROJ MS-[/comment] +[comment]MS WEB POC CONTENT GENERATION[/comment] +[genWebModuleContent(aModel)/] + +[comment]POM[/comment] +[consoleMessage(getInfoSeverity(), 'Pom Generation')/] +[genModulesPoms(aModel,isMicroservizio)/] + +[comment]PROPERTIES[/comment] +[consoleMessage(getInfoSeverity(), 'ApplicationResourcesGeneration')/] +[genApplicationResources()/] + +[comment]MAIL[/comment] +[genMailFiles(aModel)/] + +[comment]SECURITY[/comment] +[genPermissionFile(aModel) /] +[genSQLPermissionsScript(aModel)/] + +[comment]Static Resources[/comment] +[genMainStaticResources()/] +[/template] + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainStaticResources.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainStaticResources.mtl new file mode 100644 index 0000000000000000000000000000000000000000..9bfba1a7fc3723cc896e200a24eca5977170d9de --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/mainStaticResources.mtl @@ -0,0 +1,24 @@ +[comment encoding = UTF-8 /] +[module mainStaticResources('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::mvnWrapper/] +[import it::micegroup::voila2::cartridge::library::h2/] + +[template public genMainStaticResources(oclAny: OclAny)] +[genMvnWrapper()/] +[genH2(antFilterList(), tokenValuePairs())/] +[/template] + + +[template private antFilterList(dummy : OclAny)] +['SpringFoxConfig.java,.h2.server.properties'/] +[/template] + +[template private tokenValuePairs(dummy : OclAny)] +['PACKAGE=package ' + getGenericPackage()/].utilities; +[',APPNAME=' + getArtifact()/] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/msWeb.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/msWeb.mtl new file mode 100644 index 0000000000000000000000000000000000000000..72b0bb312223d1bd20f6601f0929cc0a388d2055 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/msWeb.mtl @@ -0,0 +1,53 @@ +[module msWeb('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::db::genMsDBScript/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::globalExceptionHandler/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::mapperConfig/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::applicationYML/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::msInterceptor/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::msProperties/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::msConfig/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::liquibaseConfigurationBean/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::customSpringLiquibase/] + +[template public genWebModuleContent(aModel : Model)] +[genAdvicesContent()/] +[genConfigContent(aModel)/] +[genMsWebApplicationYML(aModel)/] +[genMsWebResourcesContent()/] +[genDBScript()/] +[genMsInterceptor(aModel)/] +[genMsConfig(aModel)/] +[genMsProperties()/] +[/template] + +[template public genAdvicesContent(oclAny : OclAny)] + [genGlobalExceptionHandler()/] +[/template] + +[template public genConfigContent(aModel : Model)] + [genMapperConfig(aModel)/] + [genLiquibaseConfigurationBean()/] + [genCustomSpringLiquibase()/] +[comment] [genSecurityConfig(aModel)/][/comment] +[/template] + + +[template public genMsWebResourcesContent(oclany : OclAny)] +[comment]COPY FOLDER PER LA GENERAZIONE DEL CONTENUTO DELLA CARTELLA RESOURCES[/comment] +[copyFolder('/resources/msWebResources', getWebResourceFolderName(), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[/template] + + + + + + + + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomCoreModule.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomCoreModule.mtl new file mode 100644 index 0000000000000000000000000000000000000000..fae2936cde4f6a8ef78513e6e1fe3defa2234776 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomCoreModule.mtl @@ -0,0 +1,49 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom Core Module XML Template + +@author Vittorio Niespolo + +[/comment] + + +[module pomCoreModule('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::pomUtils/] + +[template public genPomCoreModule(isMs : Boolean) post(writeAndFormat(getCorePomFileName()))] + + + 4.0.0 + + + [getCoreModuleName()/] + [getCoreModuleNaturalLangName()/] + [getUrl()/] + + + [genParentTag()/] + + jar + + + + [if(isMs)._not()] + [genVoila2RuntimeCoreDependency()/] + [genVoila2RuntimeMailCoreDependency()/] + [genVoila2RuntimeBusinessIntelligenceCoreDependency()/] + [else] + [genJPAModelDependency()/] + [genCoreLibsDependency()/] + [/if] + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomGeneration.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomGeneration.mtl new file mode 100644 index 0000000000000000000000000000000000000000..6b255340fd4cee8e5c893b84c47d714faf27fdd5 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomGeneration.mtl @@ -0,0 +1,11 @@ +[module pomGeneration('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::springjpa::templates::pom::pomCoreModule/] +[import it::micegroup::voila2::cartridge::springjpa::templates::pom::pomImplModule/] +[import it::micegroup::voila2::cartridge::springjpa::templates::pom::pomWebModule/] + +[template public genModulesPoms(aModel : Model , isMs : Boolean)] +[genPomCoreModule(isMs)/] +[genPomWebModule(isMs)/] +[genPomImplModule(isMs)/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomImplModule.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomImplModule.mtl new file mode 100644 index 0000000000000000000000000000000000000000..ee535c22bf7ab049087630b31087dea5f418ca2f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomImplModule.mtl @@ -0,0 +1,46 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom Impl Module XML Template + +@author Vittorio Niespolo + +[/comment] + +[module pomImplModule('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] + +[template public genPomImplModule(isMs : Boolean) post(writeAndFormat(getImplPomFileName()))] + + + 4.0.0 + + + [getImplModuleName()/] + [getImplModuleNaturalLangName()/] + [getUrl()/] + + + [genParentTag()/] + + jar + + + + [genCoreDependency()/] + [if(isMs)._not()] + [genVoila2RuntimeImplDependency()/] + [genVoila2RuntimeMailImplDependency()/] + [genVoila2RuntimeBusinessIntelligenceImplDependency()/] + [/if] + [genImplLibsDependency()/] + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomParentModule.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomParentModule.mtl new file mode 100644 index 0000000000000000000000000000000000000000..3b694c3c98b9fb59bca6bec2a93541ee85112766 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomParentModule.mtl @@ -0,0 +1,74 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom Parent Module XML Template + +@author Vittorio Niespolo + +[/comment] + +[module pomParentModule('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] + +[template public genPomParentModule(oclAny : OclAny) post(writeAndFormat(getParentPomFileName()))] + + + 4.0.0 + + + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + + + [genParentCompleteInfo()/] + pom + + + + + modules/[getModelModuleName()/] + modules/[getCoreModuleName()/] + modules/[getImplModuleName()/] + modules/[getWebModuleName()/] + + + + + 1.8 + 1.1-SNAPSHOT + true + ISO-8859-1 + + 0.9.1 + 1.8 + 1.8 + 1.0.10.RELEASE + 2.3.5.RELEASE + UTF-8 + UTF-8 + UTF-8 + + + + + + javax.servlet + javax.servlet-api + 4.0.1 + + + + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomWebModule.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomWebModule.mtl new file mode 100644 index 0000000000000000000000000000000000000000..942ce6227f4f5f808e8d9ccc04f74b48ea95d64b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/pom/pomWebModule.mtl @@ -0,0 +1,118 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom for Web Module XML Template + +@author Vittorio Niespolo + +[/comment] + +[module pomWebModule('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::pomUtils/] + +[template public genPomWebModule(isMs : Boolean) post(writeAndFormat(getWebPomFileName()))] + + + 4.0.0 + + + [getWebModuleName()/] + [getWebModuleNaturalLangName()/] + [getUrl()/] + + + [genParentTag()/] + + [if(isMs)._not()] + war + [/if] + + + + [genImplDependency()/] + [if(isMs)._not()] +[comment] [genVoila2RuntimeAttachmentWebDependency()/] [/comment] + [genTomcatWebDependency()/] + [genJasperReportsFontWebDependency()/] + [else] + [genLibsWebDependency()/] + [genH2Dependency()/] + [genLiquidBaseDependency()/] + [getSpringHateoasDependency()/] + [getSpringActuatorDependency()/] + [getJMXMicrometerDependency()/] + [getPrometheusMicrometerDependency()/] + [/if] + + + + + spring-boot:run + [getArtifact()/] + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.5.RELEASE + + [getGenericPackage()/].[getMainClassNameAsMs()/] + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + + + + + + + dev + + true + + + + com.h2database + h2 + + + + + dev + + + + prod + + + prod + + + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/security/permission.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/security/permission.mtl new file mode 100644 index 0000000000000000000000000000000000000000..895559b980e9efce160dfbb709181adab8974272 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/security/permission.mtl @@ -0,0 +1,40 @@ +[module permission('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] + + +[template public genPermissionFile(aModel: Model) post (writeAndFormat(getPermissionFileName())) ] +package [getSecurityPackage()/]; + +import org.springframework.stereotype.Component; + +@Component("permissionHolder") +public final class Permission { + [for(aClass : Class | aModel.getEntities())] + /// [getEntityClassName(aClass)/] + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_PAGINATED = [getPortNumber()/][i/]00; + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_BY_ID = [getPortNumber()/][i/]01; + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_CREATE = [getPortNumber()/][i/]02; + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_UPDATE = [getPortNumber()/][i/]03; + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_DELETE = [getPortNumber()/][i/]04; + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_PDF_REPORT = [getPortNumber()/][i/]05; + + [genParentPermission(aClass, i, 5)/] + +[comment][for(parentAss: Association | getParentAssociations(aClass))] + public static final int [camelToUnderscore(getEntityClassName(aClass)).toUpperCase()/]_FIND_BY_[camelToUnderscore(aClass.getParentPropertyName(parentAss)).toUpperCase()/] = [getPortNumber()/][i/]05; + [/for][/comment] + [/for] +} + +[/template] + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/security/sqlPermissionsScript.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/security/sqlPermissionsScript.mtl new file mode 100644 index 0000000000000000000000000000000000000000..bd25a21b479e3a05ed8083bc5bca255632e26346 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/security/sqlPermissionsScript.mtl @@ -0,0 +1,93 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom Core Module XML Template + +@author Vittorio Niespolo + +[/comment] + + +[module sqlPermissionsScript('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::pomUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] + +[template public genSQLPermissionsScript(aModel: Model) post (writeAndFormat(getPermissionsFileName()))] +-- phpMyAdmin SQL Dump +-- version 5.1.1 +-- https://www.phpmyadmin.net/ +-- +-- Host: 127.0.0.1 +-- Creato il: Lug 26, 2021 alle 11:56 +-- Versione del server: 10.4.19-MariaDB +-- Versione PHP: 8.0.7 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `keycloak` +-- +USE keycloak; +-- -------------------------------------------------------- + +-- +-- Dump dei dati per la tabella `keycloak_role` +-- + +[for(aClass : Class | aModel.getEntities())] +INSERT INTO `keycloak_role` (`ID`, `CLIENT_REALM_CONSTRAINT`, `CLIENT_ROLE`, `DESCRIPTION`, `NAME`, `REALM_ID`, `CLIENT`, `REALM`) VALUES +('[getPortNumber()/][i/]00', '[getRootArtifactId()/]', b'0', NULL, '[getPortNumber()/][i/]00', '[getRootArtifactId()/]', NULL, NULL), +('[getPortNumber()/][i/]01', '[getRootArtifactId()/]', b'0', NULL, '[getPortNumber()/][i/]01', '[getRootArtifactId()/]', NULL, NULL), +('[getPortNumber()/][i/]02', '[getRootArtifactId()/]', b'0', NULL, '[getPortNumber()/][i/]02', '[getRootArtifactId()/]', NULL, NULL), +('[getPortNumber()/][i/]03', '[getRootArtifactId()/]', b'0', NULL, '[getPortNumber()/][i/]03', '[getRootArtifactId()/]', NULL, NULL), +('[getPortNumber()/][i/]04', '[getRootArtifactId()/]', b'0', NULL, '[getPortNumber()/][i/]04', '[getRootArtifactId()/]', NULL, NULL), +('[getPortNumber()/][i/]05', '[getRootArtifactId()/]', b'0', NULL, '[getPortNumber()/][i/]05', '[getRootArtifactId()/]', NULL, NULL); + +INSERT INTO `group_role_mapping` (`ROLE_ID`, `GROUP_ID`) VALUES +('[getPortNumber()/][i/]00', 'a0e054dc-ff85-4c6a-8c09-56c651ce1d2a'), +('[getPortNumber()/][i/]01', 'a0e054dc-ff85-4c6a-8c09-56c651ce1d2a'), +('[getPortNumber()/][i/]02', 'a0e054dc-ff85-4c6a-8c09-56c651ce1d2a'), +('[getPortNumber()/][i/]03', 'a0e054dc-ff85-4c6a-8c09-56c651ce1d2a'), +('[getPortNumber()/][i/]04', 'a0e054dc-ff85-4c6a-8c09-56c651ce1d2a'), +('[getPortNumber()/][i/]05', 'a0e054dc-ff85-4c6a-8c09-56c651ce1d2a'); +[genParentPermission(aClass, i, 5)/] +[/for] + +COMMIT; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +[/template] + +[template public genParentPermission(aClass : Class, index: Integer, offset: Integer)] +[for(parentAss: Association | getParentAssociations(aClass))] +INSERT INTO `keycloak_role` (`ID`, `CLIENT_REALM_CONSTRAINT`, `CLIENT_ROLE`, `DESCRIPTION`, `NAME`, `REALM_ID`, `CLIENT`, `REALM`) VALUES +('[getPortNumber()/][index/]0[offset + i/]', '[getRootArtifactId()/]', b'0', NULL, '[getPortNumber()/][index/]0[offset + i/]', '[getRootArtifactId()/]', NULL, NULL); + +INSERT INTO `group_role_mapping` (`ROLE_ID`, `GROUP_ID`) VALUES ('[getPortNumber()/][index/]0[offset + i/]', 'a0e054dc-ff85-4c6a-8c09-56c651ce1d2a'); + +[/for] +[for(childAss : Association | getChildAssociations(aClass))] +INSERT INTO `keycloak_role` (`ID`, `CLIENT_REALM_CONSTRAINT`, `CLIENT_ROLE`, `DESCRIPTION`, `NAME`, `REALM_ID`, `CLIENT`, `REALM`) VALUES +('[getPortNumber()/][index/]0[offset + aClass.getParentAssociations()->size()+ i/]', '[getRootArtifactId()/]', b'0', NULL, '[getPortNumber()/][index/]0[offset + aClass.getParentAssociations()->size()+ i/]', '[getRootArtifactId()/]', NULL, NULL); + +INSERT INTO `group_role_mapping` (`ROLE_ID`, `GROUP_ID`) VALUES ('[getPortNumber()/][index/]0[offset + aClass.getParentAssociations()->size()+ i/]', 'a0e054dc-ff85-4c6a-8c09-56c651ce1d2a'); + +[/for] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/settings.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/settings.mtl new file mode 100644 index 0000000000000000000000000000000000000000..0900847d5bab357a155e936c7e3b0d04f7f0485e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/settings.mtl @@ -0,0 +1,43 @@ +[module settings('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + + +[template public genMsSettings(oclAny : OclAny)] +[genRootSettings()/] +[genCoreSettings()/] +[genImplSettings()/] +[genWebSettings()/] +[/template] + +[template public genRootSettings(oclAny:OclAny)] +[copyFolder('resources/settings/msSettings/.settings',getRootDotSettingsFolderName(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] +[/template] + +[template public genCoreSettings(oclAny:OclAny)] +[copyFolder('resources/settings/msSettings/.settings',getCoreDotSettingsFolderName(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] +[/template] + +[template public genImplSettings(oclAny:OclAny)] +[copyFolder('resources/settings/msSettings/.settings',getImplDotSettingsFolderName(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] +[/template] + +[template public genWebSettings(oclAny:OclAny)] +[copyFolder('resources/settings/msSettings/.settings',getWebDotSettingsFolderName(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] +[/template] + + + +[template private antFilterList(dummy : OclAny)] +['*.json,*.project,*.properties,*.oaw,*.MF,*.uml,*.notation,*.xml,*.gitignore,*.mtl,*.java,*.classpath'/] +[/template] + +[template private tokenValuePairs(dummy : OclAny)] +['PROJECT_ID=' + getArtifact()/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/utilsGeneration.mtl b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/utilsGeneration.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b73d7858e0271ab1853c479b793e649c2a8e8642 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springjpa/src/it/micegroup/voila2/cartridge/springjpa/templates/utilsGeneration.mtl @@ -0,0 +1,14 @@ +[module utilsGeneration('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::constants/] +[import it::micegroup::voila2::cartridge::library::springboot::cacheConfig /] +[import it::micegroup::voila2::cartridge::library::springboot::auditable/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] + +[template public genApplicationUtils(aModel: Model)] +[genConstants(false)/] +[genAuditable(false)/] +[if(isCachingEnabled(aModel))] +[genCacheConfig(false)/] +[/if] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/.classpath b/plugin-version/it.micegroup.voila2.cartridge.springmongo/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..235668af85754180af07a170b664b795bf20ee5e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/.project b/plugin-version/it.micegroup.voila2.cartridge.springmongo/.project new file mode 100644 index 0000000000000000000000000000000000000000..c467913c100ed2edbcd6db1559fcd59e0f076e35 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/.project @@ -0,0 +1,50 @@ + + + it.micegroup.voila2.cartridge.springmongo + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.acceleo.ide.ui.acceleoBuilder + + + compilation.kind + compilation.absolute.path + + + compliance + pragmatic + + + resource.kind + xmi + + + trim-position + false + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.acceleo.ide.ui.acceleoNature + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/.settings/org.eclipse.jdt.core.prefs b/plugin-version/it.micegroup.voila2.cartridge.springmongo/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..c05cfdd98a13aa17c7feaff848b8d1bb9716c9bd --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=15 +org.eclipse.jdt.core.compiler.compliance=15 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=15 diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/META-INF/MANIFEST.MF b/plugin-version/it.micegroup.voila2.cartridge.springmongo/META-INF/MANIFEST.MF new file mode 100644 index 0000000000000000000000000000000000000000..e4606fe2946d5fdafe72e3a1056f3f9f68dd56ac --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/META-INF/MANIFEST.MF @@ -0,0 +1,24 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SpringBoot-Mongo +Bundle-SymbolicName: it.micegroup.voila2.cartridge.springmongo;singleton:=true +Bundle-Version: 1.0.0.qualifier +Automatic-Module-Name: it.micegroup.voila2.cartridge.springmongo +Bundle-RequiredExecutionEnvironment: JavaSE-11 +Export-Package: it.micegroup.voila2.cartridge.springmongo.templates +Require-Bundle: org.eclipse.emf.common;bundle-version="2.22.0", + org.eclipse.emf.transaction;bundle-version="1.9.1", + org.eclipse.uml2.uml;bundle-version="5.5.0", + org.apache.log4j;bundle-version="1.2.15", + org.apache.commons.lang3;bundle-version="3.1.0", + org.apache.commons.io;bundle-version="2.6.0", + org.eclipse.ui;bundle-version="3.118.100", + org.eclipse.ui.console;bundle-version="3.10.0", + org.eclipse.emf.mwe.core;bundle-version="1.6.0", + org.eclipse.jdt.core;bundle-version="3.24.0", + org.eclipse.jface.text;bundle-version="3.16.500", + org.eclipse.uml2.uml;visibility:=reexport, + it.micegroup.voila2.cartridge.library, + org.eclipse.acceleo.engine;bundle-version="3.7.11";visibility:=reexport +Bundle-ActivationPolicy: lazy +Bundle-Activator: it.micegroup.voila2.cartridge.springmongo.Activator diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/build.properties b/plugin-version/it.micegroup.voila2.cartridge.springmongo/build.properties new file mode 100644 index 0000000000000000000000000000000000000000..34d2e4d2dad529ceaeb953bfcdb63c51d69ffed2 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/Activator.java b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/Activator.java new file mode 100644 index 0000000000000000000000000000000000000000..faf8834e7420fcc213629eb920836d5b9432b363 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/Activator.java @@ -0,0 +1,67 @@ + +/******************************************************************************* + * Copyright (c) 2008, 2011 Obeo. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package it.micegroup.voila2.cartridge.springmongo; + +import org.eclipse.core.runtime.Plugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle. + */ +public class Activator extends Plugin { + + /** + * The plug-in ID. + */ + public static final String PLUGIN_ID = "it.micegroup.voila2.cartridge.springmongo"; + + /** + * The shared instance. + */ + private static Activator plugin; + + /** + * The constructor. + */ + public Activator() { + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance. + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/applicationResources.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/applicationResources.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e81709cfb8a492b34c3050377d6d1ff633708dbc --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/applicationResources.mtl @@ -0,0 +1,101 @@ +[comment encoding = UTF-8 /] +[module applicationResources('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] + +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] + +[import it::micegroup::voila2::cartridge::library::properties /] + +[template public genApplicationResources(aModel : Model)] +[genApplicationResourcesContent(aModel, '')/] +[genApplicationResourcesContent(aModel, '_it')/] +[genApplicationResourcesContent(aModel, '_en')/] +[/template] + +[template public genApplicationResourcesContent(aModel : Model, lang : String){classes : Collection(OclAny) = aModel.getEntities();}] +[file(getApplicationResourcesFileName(lang), false, 'UTF-8')] +## Login +login.login=Accedi +login.button=Accedi +login.validation.username=Username è obbligatorio +login.validation.password=La password è obbligatoria +login.label=Effettua l'accesso + +## Pagination +pagination.Showing=Mostra +pagination.ElementsOf=Elementi di +pagination.All=Tutti" + +## Buttons +buttons.new=Nuovo +buttons.save=Salva +buttons.edit=Modifica +buttons.delete=Cancella +buttons.goBack=Indietro +buttons.search=Cerca +buttons.next=Avanti +buttons.export.pdf=Crea PDF + +## Panel +[for(classe : Class | classes)] +[classe.getEntityClassName().toLowerFirst()/].panelTitle.new=Inserisci [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].panelTitle.edit=Modifica [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].panelTitle.view=Dettaglio [splitCamel(classe.getEntityClassName())/] +[classe.getEntityClassName().toLowerFirst()/].panelTitle.delete=Cancella [splitCamel(classe.getEntityClassName())/] +[/for] + +## Detail +[for(classe : Class | classes)] +[classe.getEntityClassName().toLowerFirst()/].label=[classe.getEntityLabel()/] +[classe.getEntityClassName().toLowerFirst()/].tooltip=[classe.getEntityTooltip()/] +[classe.getEntityClassName().toLowerFirst()/].insert=Inserisci [classe.getEntityClassName()/] +[classe.getEntityClassName().toLowerFirst()/].detail=Dettaglio [classe.getEntityClassName()/] +[classe.getEntityClassName().toLowerFirst()/].edit=Modifica [classe.getEntityClassName()/] +[classe.getEntityClassName().toLowerFirst()/].delete=Cancella [classe.getEntityClassName()/] +[classe.getEntityClassName().toLowerFirst()/].objectTitle=[classe.getEntityClassName()/] +[classe.getEntityClassName().toLowerFirst()/].objectKey=ID [classe.getEntityClassName()/] +[classe.getEntityClassName().toLowerFirst()/].jasperReports.title=[classe.getEntityClassName()/] Report +[classe.getEntityClassName().toLowerFirst()/].jasperReports.subTitle=[getProjectName().toUpperFirst()/], v[getVersion()/] +[classe.getEntityClassName().toLowerFirst()/].jasperReports.tableHeader=Dettaglio [classe.getEntityClassName()/] +[for(attributo : Property | classe.getCompleteAttributeList()) separator(',\n')] +[if(attributo.isBoolean())] +[classe.getEntityClassName().toLowerFirst()/].[attributo.name/].true=Si +[classe.getEntityClassName().toLowerFirst()/].[attributo.name/].false=No +[/if] +[classe.getEntityClassName().toLowerFirst()/].[attributo.name/]=[attributo.getAttributeLabel()/] +[classe.getEntityClassName().toLowerFirst()/].tooltip.[attributo.name/]=[attributo.getTooltip()/] +[classe.getEntityClassName().toLowerFirst()/].validation.required.[attributo.name/]=[attributo.getNaturalLanguageName()/] è obbligatorio"[/for][if(classe.hasParents())][/if] +[if(classe.hasParents())] +[for(parentAss: Association | classe.getParentAssociations()) separator(',\n') after ('\n')] +[classe.getEntityClassName().toLowerFirst()/].[classe.getTheParentPropertyName(parentAss)/]=[splitCamel(classe.getParentClass(parentAss).getEntityClassName())/][if(not classe.getParentEnd(parentAss).oclIsUndefined() and not classe.getParentEnd(parentAss).name.oclIsUndefined())] [splitCamel(classe.getParentEnd(parentAss).name)/][/if] +[classe.getEntityClassName().toLowerFirst()/].validation.required.[classe.getTheParentPropertyName(parentAss)/]=[splitCamel(classe.getParentClass(parentAss).getEntityClassName())/] è obbligatorio[/for] +[/if] +[/for] + +## App +[for(classe : Class | classes)] +app.[classe.getEntityClassName().toLowerFirst()/].new=Inserisci [splitCamel(classe.getEntityClassName())/] +app.[classe.getEntityClassName().toLowerFirst()/].list=Lista [splitCamel(classe.getEntityClassName())/] +app.[classe.getEntityClassName().toLowerFirst()/].edit=Modifica [splitCamel(classe.getEntityClassName())/] +app.[classe.getEntityClassName().toLowerFirst()/].view=Dettaglio [splitCamel(classe.getEntityClassName())/] +app.[classe.getEntityClassName().toLowerFirst()/].delete=Cancella [splitCamel(classe.getEntityClassName())/] +[/for] + +## JasperReports +jasperReports.logo=mice.png +jasperReports.date.format=dd/MM/yyyy +jasperReports.datetime.format=dd/MM/yyyy HH:mm:ss +jasperReports.pageNumber.label=Pag. +jasperReports.pageNumber.separator=di +jasperReports.footer.text=Copyright \u00a9 2020 MICE srl. Tutti i diritti riservati. + +[/file] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/cacheConfig.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/cacheConfig.mtl new file mode 100644 index 0000000000000000000000000000000000000000..327fe6790b5d29fdba4905ef7b56abc992710c2e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/cacheConfig.mtl @@ -0,0 +1,45 @@ +[comment encoding = UTF-8 /] + +[comment] + +Controller Java Class Template + +@author Vittorio Niespolo + +[/comment] + +[module cacheConfig('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] + +[template public genCacheConfig(isMs : Boolean) post(writeAndFormat(isMs.getCacheConfigFileName()))] +[if(isMs)] +package [getLibsUtilitiesPackage()/]; +[else] +package [getUtilitiesPackage() /]; +[/if] +import java.util.Arrays; + +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.concurrent.ConcurrentMapCache; +import org.springframework.cache.support.SimpleCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean + public CacheManager cacheManager() { + SimpleCacheManager cacheManager = new SimpleCacheManager(); + cacheManager.setCaches(Arrays.asList( + new ConcurrentMapCache("PrivilegePerRole") + )); + return cacheManager; + } +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/constants.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/constants.mtl new file mode 100644 index 0000000000000000000000000000000000000000..bdc3ffb6e929ea9d1864fbdbb6214e14d90fcf97 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/constants.mtl @@ -0,0 +1,57 @@ +[comment encoding = UTF-8 /] + +[comment] + +Controller Java Class Template + +@author Vittorio Niespolo + +[/comment] + +[module constants('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] + +[template public genConstants(isMs : Boolean) post(writeAndFormat(isMs.getConstantsFileName()))] +[if(isMs)] +package [getLibsUtilitiesPackage()/]; + +public class Constants{ + private Constants() { + throw new IllegalStateException("Utility class"); + } + public static final String ROWIDFIELDDELIMITER = "~"; + public static final String CORRELATION_KEY = "X-Correlation-ID"; +} +[else] +package [getUtilitiesPackage() /]; + + +public class Constants{ + private Constants() { + throw new IllegalStateException("Utility class"); + } + + public static final String ROWIDFIELDDELIMITER = "_727_"; + private static final String title1="\n\nVVVVVVVV VVVVVVVV iiii llllll a :: a 222222222222222\n"; + private static final String title2="V::::::V V::::::V i::::i l::::l a :: a 2:::::::::::::::22\n"; + private static final String title3="V::::::V V::::::V iiii l::::l a :: a 2::::::222222:::::2\n"; + private static final String title4="V::::::V V::::::V l::::l 2222222 2:::::2\n"; + private static final String title5=" V:::::V V:::::V ooooooooooo iiiiiii l::::l aaaaaaaaaaaaa 2:::::2\n"; + private static final String title6=" V:::::V V:::::Voo:::::::::::oo i:::::i l::::l a::::::::::::a 2:::::2\n"; + private static final String title7=" V:::::V V:::::Vo:::::::::::::::o i::::i l::::l aaaaaaaaa:::::a 2222::::2\n"; + private static final String title8=" V:::::V V:::::V o:::::ooooo:::::o i::::i l::::l a::::a 22222::::::22\n"; + private static final String title9=" V:::::V V:::::V o::::o o::::o i::::i l::::l aaaaaaa:::::a 22::::::::222\n"; + private static final String title10=" V:::::V V:::::V o::::o o::::o i::::i l::::l aa::::::::::::a 2:::::22222\n"; + private static final String title11=" V:::::V:::::V o::::o o::::o i::::i l::::l a::::aaaa::::::a 2:::::2\n"; + private static final String title12=" V:::::::::V o::::o o::::o i::::i l::::l a::::a a:::::a 2:::::2\n"; + private static final String title13=" V:::::::V o:::::ooooo:::::oi::::::il::::::la::::a a:::::a 2:::::2 222222 M\n"; + private static final String title14=" V:::::V o:::::::::::::::oi::::::il::::::la:::::aaaa::::::a 2::::::2222222:::::2 I\n"; + private static final String title15=" V:::V oo:::::::::::oo i::::::il::::::l a::::::::::aa:::a2::::::::::::::::::2 C\n"; + private static final String title16=" VVV ooooooooooo iiiiiiiillllllll aaaaaaaaaa aaaa22222222222222222222 E\n\n"; + public static final String LOG_TITLE= title1+title2+title3+title4+title5+title6+title7+title8+title9+title10+title11+title12+title13+title14+title15+title16; +} +[/if] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/controller.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/controller.mtl new file mode 100644 index 0000000000000000000000000000000000000000..eed32dd886916cf95c9ed7ab31b42b3cf65257b4 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/controller.mtl @@ -0,0 +1,97 @@ +[comment encoding = UTF-8 /] + +[comment] + +Controller Java Class Template + +@author Simone Punzo + +[/comment] + + +[module controller('http://www.eclipse.org/uml2/5.0.0/UML')] + + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] +[import it::micegroup::voila2::cartridge::library::microservice::controllerMsUtils/] +[import it::micegroup::voila2::cartridge::springmongo::templates::utilities::controllerUtilsMongo/] + +[template public genControllerFileMs(aClass : Class, aModel: Model) post(writeAndFormat(aClass.getControllerFileName()))] +package [getControllerPackage(aClass)/]; + +[genControllerImportsAsMs(aClass)/] + +@RestController +@RequestMapping(value = "/[camelToDash(aClass.name)/]", produces = MediaType.APPLICATION_JSON_VALUE) +public class [getControllerClassName(aClass)/] extends BaseController>{ + + /// ENTITY SERVICE + + @Autowired + private [getServiceClassName(aClass)/] [getServiceClassName(aClass).toString().toLowerFirst()/]; + + @Autowired + private [getAssemblerClassName(aClass)/] [getAssemblerClassName(aClass).toString().toLowerFirst()/]; + + @Autowired + private PagedResourcesAssembler<[getEntityClassName(aClass)/]> pagedResourcesAssembler; + + @Autowired + private ModelMapper modelMapper; + + // CONSTRUCTOR + [genConstructor(aClass)/] + + // CHILD SERVICES + [genChildServices(aClass)/] + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger([aClass.getControllerClassName()/].class); + [comment]private static final String ENTITY_NAME = "[aClass.getEntityClassName().toLowerFirst()/]";[/comment] + + // API + + [genGetAllPaginated(aClass, aModel)/] + + [comment][genGetByCriteria(aClass)/][/comment] + + [genGetById(aClass, aModel)/] + + [genUpdate(aClass, aModel)/] + + [genCreate(aClass, aModel)/] + + [genDeleteByID(aClass, aModel)/] + +[comment] [genMassDelete(aClass)/] + + [genMassUpdate(aClass)/] + + [genMassInsert(aClass)/][/comment] + + [genGetByParentId(aClass, aModel)/] + +[comment] [if(isInPrivilegePerRoleRole(aClass))] + [genGetPrivilegesByRoles()/] + [/if][/comment] + + [genPrintPdfReport(aClass, aModel)/] + + [genGetChildByObjectKey(aClass, aModel)/] + +[comment] [genFindOtherParentByParent(aClass)/][/comment] + + [genToResponseEntity(aClass)/] + + [genToResponseEntityPaged(aClass)/] + + [genDtoToEntity(aClass)/] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/criteria.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/criteria.mtl new file mode 100644 index 0000000000000000000000000000000000000000..bfad84fc58130af5f802ac161dc3585379a2563e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/criteria.mtl @@ -0,0 +1,61 @@ +[comment encoding = UTF-8 /] + +[comment] + +Criteria Java File Template + +@author Vittorio Niespolo + +[/comment] + +[module criteria('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::generalUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] + +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::filterUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] + +[template public genCriteriaFile(aClass : Class,isMs : Boolean) post(writeAndFormat(aClass.getCriteriaFileName()))] +package [getCriteriaPackage(aClass)/]; + +[genCriteriaImports(aClass)/] + +public class [getCriteriaClassName(aClass)/][if(aClass.hasGeneralClass())] extends [aClass.getGeneralClass().getCriteriaClassName()/][/if] implements Serializable { + + // SERIAL UID + [genSerialUID(aClass)/] + + // FILTER ATTRIBUTES + [genFilterProperties(aClass)/] + + // FILTER FATHER + [genFilterPropertiesFather(aClass)/] + + [if(isMs)] + //FILTER IMPORTED FATHER + [genFilterPropertiesImportedFather(aClass)/] + [/if] + // GETTER/SETTER + [genFilterGetterSetter(aClass)/] + + // GETTER/SETTER FATHER + [genFilterFatherGetterSetter(aClass)/] + + [if(isMs)] + //GETTER/SETTER IMPORTED FATHER + [genFilterImportedFatherGetterSetter(aClass)/] + [/if] + + // GEN COMPOSITE FILTER + [genFatherCompositeFilter(aClass)/] + +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/entityDto.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/entityDto.mtl new file mode 100644 index 0000000000000000000000000000000000000000..f241c4f0e24ca179c38663daae7fad540e8fa112 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/entityDto.mtl @@ -0,0 +1,31 @@ +[module entityDto('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::dtoUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] + + +[template public genDtoClassSpecificFile(aClass : Class, aModel : Model) post(writeAndFormat(aClass.getEntityDtoFileName()))] +package [getEntityDtoPackage()/]; + +[genEntityDtoImports(aClass)/] +[genImportsForPropertyDto(aClass)/] +[genBaseDtoImport()/] + +@Data +@EqualsAndHashCode(callSuper = false) +public class [getEntityDtoClassName(aClass)/] extends BaseDto { + + [genSerialUID(aClass)/] + + [genDtoAttributes(aClass)/] + [genAttributesFromParent(aClass)/] + [genChildrenDto(aClass)/] +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/entityWriteDto.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/entityWriteDto.mtl new file mode 100644 index 0000000000000000000000000000000000000000..8e7b634c19de9c2150c69dd34e8faee76743ab8b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/entityWriteDto.mtl @@ -0,0 +1,23 @@ +[module entityWriteDto('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::dtoUtils/] + +[template public genDtoEntityWriteFile(aClass : Class , aModel : Model) post(writeAndFormat(aClass.getDtoWriteFileName()))] +package [getEntityDtoPackage()/]; + +[genEntityDtoImports()/] +[genImportsForPropertyDto(aClass)/] +[genGenericDtoImport()/] + +@Data +@EqualsAndHashCode(callSuper = false) +public class [getEntityWriteDtoClassName(aClass)/] extends GenericDto{ + + [genWriteDtoAttributes(aClass)/] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/mailWriteDto.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/mailWriteDto.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b19c42316909c55b23914ec2a4552fb26813bc63 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/dataTransfer/mailWriteDto.mtl @@ -0,0 +1,40 @@ +[module mailWriteDto('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] + + +[template public genMailWriteDto(aModel : Model) post(writeAndFormat(getMailWriteDtoFileName()))] +package [getEntityDtoPackage()/]; + +[genMailRequestDtoImports()/] + +@Data +@EqualsAndHashCode(callSuper = false) +public class MailRequestDto { + + private static final long serialVersionUID = 260627236L; + + @NotNull + @JsonProperty("template") + private String idTemplate; + + @JsonProperty("objectMap") + private Map objectMap; + + @JsonProperty("allegati") + private Map allegati; + + @Override + public String toString() { + return "MailDto{" + + "idTemplate=" + idTemplate + + ",allegati =" + allegati + + '}'; + } + + +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/entity.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/entity.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b24908444ae2b588ca4ad6561d9c8361cfafddf0 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/entity.mtl @@ -0,0 +1,148 @@ +[comment encoding = UTF-8 /] + +[comment] + +Entity Java File Template + +@author Vittorio Niespolo + +[/comment] + +[module entity('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] + +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] + +[import it::micegroup::voila2::cartridge::springmongo::templates::utilities::entityUtilsMongo /] +[import it::micegroup::voila2::cartridge::library::springboot::entityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::entityKey/] + + +[template public genEntityFile(aClass : Class, aModel: Model, isMainMs: Boolean) post(writeAndFormat(aClass.getEntityFileName()))] +package [getEntityPackage(aClass)/]; + +[genEntityImports(aClass)/] + +[if(aClass.hasDefinition())] +/** +[getEntityDefinition(aClass)/] +*/ +[/if] +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +[comment]@AllArgsConstructor[/comment] +@Document(collection = "[getPhysicalTableName(aClass)/]") +[if(isClassExtended(aClass))] +@Inheritance(strategy = InheritanceType.JOINED) +[/if] +public class [getEntityClassName(aClass)/] extends +[if(aClass.hasGeneralClass())] [aClass.getGeneralClass().getEntityClassName()/] +[elseif(aClass.isAuditable())] Auditable +[else]BaseEntity +[/if] +implements Serializable{ + + [comment] Generate serial versione uid as Serializable class resquests [/comment] + [genSerialUID(aClass)/] + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger([aClass.getEntityClassName()/].class); + + // ATTRIBUTES + [genAttributesMongo(aClass)/] + + // IMPORTED PARENTS + [genImportedParentProperty(aClass)/] + + // CONSTRUCTORS + [genConstructor(aClass, isMainMs)/] + + // CHILDREN + [genChildCollections(aClass)/] + + // PARENTS + + [if(hasCompositeKey(aClass))._not()] + [genParentProperty(aClass)/] + [/if] + + // GETTER/SETTER + [genGetterSetter(aClass)/] + + [genImportedParentGetterSetter(aClass)/] + + // CHILD GETTER/SETTER + [genChildGetterSetter(aClass)/] + + /// ADD CHILD + [genAddChild(aClass)/] + + // PARENT GETTER/SETTER + [if(hasCompositeKey(aClass))._not()] + [genParentGetterSetter(aClass)/] + [else] + [comment]Se ha CK devi creare questi getter tramite la key[/comment] + [genCKParentGetterSetter(aClass)/] + [/if] + + // PARENT ID GETTER/SETTER + [if(hasCompositeKey(aClass))._not()] + + [genParentIdGetter(aClass)/] + [genParentIdSetter(aClass)/] + [/if] + + // PARENT OBJECT TITLE + + [genParentObjectTitleGetter(aClass)/] + + // PARENT OBJECT KEY + [for(a : Association | aClass.getParentAssociations())] + [genParentObjectKeyGetter(aClass, a, false, false)/] + [/for] + [for(a : Association | aClass.getParentAssociations())] + [genParentObjectKeySetter(aClass, a, false)/] + [/for] + + /// IMPORTED PARENT OBJECT KEY + [genImportedParentObjectKeyGetter(aClass)/] + [genImportedParentObjectKeySetter(aClass)/] + + // OPERATIONS + + [genOperations(aClass)/] + + // OBJECT KEY + + [genGetObjectKey(aClass)/] + [genSetObjectKey(aClass)/] + + // OBJECT TITLE + [genGetObjectTitle(aClass)/] + + [if(hasCompositeKey(aClass))] + + // COMPOSITE PRIMARY KEY + [genCompositeKeyProperty(aClass)/] + + // GETTER/SETTER CK + [genGetterByPropNameNType(getClassIdName(aClass), getClassIdType(aClass))/] + [genSetterByPropNameNType(getClassIdName(aClass), getClassIdType(aClass))/] + + // COMPOSITE KEY CLASS + [genCompositeKeyFile(aClass,aModel)/] + [/if] + + [genPrePersist(aClass, aModel)/] + [genPreUpdate(aClass, aModel)/] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/entityKey.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/entityKey.mtl new file mode 100644 index 0000000000000000000000000000000000000000..8dd8b7225cf5a5e1b02e77db50b6bb2b774755ad --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/entityKey.mtl @@ -0,0 +1,42 @@ +[module entityKey('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::entityKeyUtils /] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] + + +[template public genCompositeKeyFile(aClass : Class , aModel : Model) post(writeAndFormat(aClass.getEntityCKFileName()))] +package [getEntityPackage(aClass)/]; + +[genEntityKeyImports(aClass)/] + +@Data +@Embeddable +@NoArgsConstructor +public class [getEntityCKClassName(aClass)/] implements Serializable { + + [genSerialUID(aClass)/] + + /// ATTRIBUTES + [genCKAttributes(aClass)/] + + /// GETTER/SETTER + [genCKGetterSetter(aClass)/] + + /// FIELD CONSTRUCTOR + [genCKConstructor(aClass)/] + + /// OF CONSTRUCTOR + [genOFConstructorForCK(aClass)/] + + [genCKEquals(aClass)/] + + [genCKHashCode(aClass)/] + + +} +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/modelAssembler.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/modelAssembler.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e2de8e20986592001fab77b44891458c425151ca --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/modelAssembler.mtl @@ -0,0 +1,31 @@ +[module modelAssembler('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::modelAssemblerUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] + +[template public genAssemblerFile(aClass : Class) post(writeAndFormat(aClass.getAssemblerFileName()))] +package [getAssemblerPackage()/]; + +[genAssemblerImports(aClass)/] + +@Component +public class [getAssemblerClassName(aClass)/] extends BaseModelAssembler<[getEntityClassName(aClass)/] , [getDtoClassName(aClass)/],[aClass.getControllerClassName()/]> { + + + [genToModel(aClass)/] + + [genToCollectionModel(aClass)/] + + + + } + + +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/repository.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/repository.mtl new file mode 100644 index 0000000000000000000000000000000000000000..be1a92e929844b84428102e4828249d450cbf269 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/repository.mtl @@ -0,0 +1,53 @@ +[comment encoding = UTF-8 /] + +[comment] + +Repository Java FileTemplate + +@author Vittorio Niespolo + +[/comment] + +[module repository('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] +[import it::micegroup::voila2::cartridge::springmongo::templates::utilities::repositoryUtilsMongo/] + +[template public genRepositoryFile(aClass : Class,isMs : Boolean) post(writeAndFormat(aClass.getRepositoryFileName()))] +package [getRepositoryPackage(aClass)/]; + +[genRepositoryImports(aClass)/] + +@Repository +@EnableMongoRepositories(basePackageClasses = [getRepositoryClassName(aClass)/].class) +public interface [getRepositoryClassName(aClass)/] extends MongoRepository<[getEntityClassName(aClass)/], [getClassIdType(aClass)/]>{ + + [genEntityGraph(aClass)/] + Optional<[aClass.getEntityClassName()/]> findBy[aClass.getClassIdName().toUpperFirst()/]([aClass.getClassIdType()/] id); + + [for (a : Association | aClass.getParentAssociations()) separator('\n')] + [genEntityGraph(aClass)/] + [if(aClass.hasCompositeKey())] + Page<[aClass.getEntityClassName()/]> findBy[aClass.getClassIdName().toUpperFirst()/][aClass.getTheParentPropertyName(a).toUpperFirst()/]([aClass.getParentClass(a).getEntityClassName()/] parentEntity, Pageable pageable); + [else] + Page<[aClass.getEntityClassName()/]> findBy[aClass.getTheParentPropertyName(a).toUpperFirst()/]([aClass.getParentClass(a).getEntityClassName()/] parentEntity, Pageable pageable); + [/if] + + [/for] + + void deleteByIdIn(Collection<[aClass.getClassIdType()/]> ids); +} +[/template] + +[template public genEntityGraph(aClass : Class)] +[if(aClass.hasParents())] +@EntityGraph(attributePaths = {[for (a2 : Association | aClass.getParentAssociations()) separator(', ')]"[if(aClass.hasCompositeKey())][aClass.getClassIdType().toLowerFirst()/].[/if][aClass.getTheParentPropertyName(a2)/]"[/for]}, type = EntityGraphType.FETCH) +[/if] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/resource.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/resource.mtl new file mode 100644 index 0000000000000000000000000000000000000000..eca5c66a32074b0bd67da67247d81be3f3ea90b7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/resource.mtl @@ -0,0 +1,55 @@ +[comment encoding = UTF-8 /] + +[comment] + +Resource for Java Entity File Template + +@author Vittorio Niespolo + +[/comment] + +[module resource('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] + + +[template public genResourceFile(aClass : Class) post(writeAndFormat(aClass.getResourceFileName()))] +package [getResourcePackage(aClass)/]; + +[genResourceImports(aClass)/] + +/** +* Resource class for [aClass.getEntityClassName()/] +*/ + +public class [aClass.getEntityClassName()/]Resource extends Resource<[aClass.getEntityClassName()/]>{ + + public [aClass.getEntityClassName()/]Resource([aClass.getEntityClassName()/] [aClass.getEntityClassName().toLowerFirst()/]) { + + super([aClass.getEntityClassName().toLowerFirst()/]); + + //SELF LINK + add( + [genSelfLink(aClass)/] + ); + [if(aClass.hasChilds())] + //CHILDS LINKS + add( + [genChildLinks(aClass)/] + ); + [/if] + [if(aClass.hasParents())] + //PARENTS LINKS + add( + [genParentLinks(aClass)/] + ); + [/if] + } +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/service.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/service.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e4923bb5d31aec772ec2580268e899d39fb35214 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/service.mtl @@ -0,0 +1,61 @@ +[comment encoding = UTF-8 /] + +[comment] + +Service Java Class Template + +@author Vittorio Niespolo + +[/comment] + +[module service('http://www.eclipse.org/uml2/5.0.0/UML')/] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::common::idUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::common::associationUtils/] +[import it::micegroup::voila2::cartridge::springmongo::templates::utilities::serviceUtilsMongo/] + +[template public genServiceFile(aClass : Class,isMs : Boolean) post(writeAndFormat(aClass.getServiceFileName()))] +package [getServicePackage(aClass)/]; + +[genServiceImports(aClass)/] + + +public interface [aClass.getServiceClassName()/] extends BaseEntityServiceMongo<[aClass.getEntityClassName()/], [aClass.getClassIdType()/]>{ + + //PARENT-SPECIFIC SERVICES +[for(parentAss : Association | aClass.getParentAssociations())] + Page<[aClass.getEntityClassName()/]> findBy[aClass.getTheParentPropertyName(parentAss).toUpperFirst()/]([aClass.getParentClass(parentAss).getEntityClassName()/] parentEntity, Pageable pageable); +[/for] + + public byte['[]'/] printPdfReport(String objectKey) throws BusinessException; + + [genFindOtherParentByParentService(aClass)/] + + [if(isMs)] + [getEntityClassName(aClass)/] bulkUpdate([getEntityClassName(aClass)/] [getEntityClassName(aClass).toLowerFirst()/]); + [/if] + +} +[/template] + +[template public genFindOtherParentByParentService(aClass : Class){parentAssociations : Collection(OclAny) = aClass.getParentAssociations();}] +[if(parentAssociations -> size() > 1)] +[for(parentAss : Association | parentAssociations)] +[for(otherParentAss : Association | aClass.getParentAssociationsExcluding(parentAss))] + /** + * Return a list of [aClass.getParentClass(parentAss).getEntityClassName()/] from all [aClass.getEntityClassName()/] with given [getTheParentPropertyName(aClass, parentAss)/] + * + * @param [aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/] + * @param pageable + * @return list of [aClass.getParentClass(parentAss).getEntityClassName()/] from all [aClass.getEntityClassName()/] with given [getTheParentPropertyName(aClass, parentAss).toUpperFirst()/] + */ + Page<[aClass.getParentClass(parentAss).getEntityClassName()/]> find[aClass.getParentClass(parentAss).getEntityClassName()/]By[getTheParentPropertyName(aClass, otherParentAss).toUpperFirst()/]([aClass.getParentClass(otherParentAss).getEntityClassName()/] [aClass.getParentClass(otherParentAss).getEntityClassName().toLowerFirst()/], Pageable pageable); +[/for] +[/for] +[/if] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/serviceImpl.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/serviceImpl.mtl new file mode 100644 index 0000000000000000000000000000000000000000..b4481694327ac1064969fc5d3623ab092b150c9c --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entity/serviceImpl.mtl @@ -0,0 +1,96 @@ +[comment encoding = UTF-8 /] + +[comment] + +ServiceImpl Java Class Template + +@author Vittorio Niespolo + +[/comment] + +[module serviceImpl('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::serviceImplUtils/] +[import it::micegroup::voila2::cartridge::springmongo::templates::utilities::serviceImplUtilsMongo /] +[import it::micegroup::voila2::cartridge::library::springboot::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils /] + +[template public genServiceImplFile(aClass : Class, aModel : Model, isMs : Boolean) post(writeAndFormat(aClass.getServiceImplFileName()))] +package [getServicePackage(aClass)/]; + +[genServiceImplImports(aClass, aModel)/] + +@Service +@Transactional +public class [getServiceImplClassName(aClass)/] extends BaseServiceImpl implements [getServiceClassName(aClass)/] { + + @Autowired + [getRepositoryClassName(aClass)/] [getRepositoryClassName(aClass).toString().toLowerFirst()/]; + + @Autowired + [getFilterServiceClassName(aClass)/] filterService; + + [if(isInSecurityUserRole(aClass) or aClass.generalizeSecurityUserRole())] + @Autowired + PasswordEncoder passwordEncoder; + + @Autowired + RoleService roleService; + [/if] + //ENTITY SERVICE TO HANDLE SELF REF + [if(isMs)] + [for(childAss : Association | aClass.getChildAssociations())] + [if(isSelfRelation(childAss))] + @Autowired + [getServiceClassName(aClass)/] [getServiceClassName(aClass).toString().toLowerFirst()/]; + [/if] + [/for] + [/if] + + + // CHILD SERVICES + [genChildServices(aClass)/] + + @SuppressWarnings("unused") + private static final Logger LOGGER = LogManager.getLogger([aClass.getServiceImplClassName()/].class); + +[comment] [genFindAll(aClass)/][/comment] + + [genFindAllListed(aClass)/] + +[comment] [genFindByCriteriaPaged(aClass)/][/comment] + +[comment] [genFindByCriteria(aClass)/][/comment] + + [genFindById(aClass)/] + + [genExists(aClass, aModel)/] + + [genInsert(aClass, aModel)/] + + [genUpdate(aClass, aModel)/] + + [genDelete(aClass)/] + + [genDeleteById(aClass, aModel)/] + + [genDeleteByIdIn(aClass, aModel)/] + + [genFindByObjectKey(aClass,isMs)/] + + [genFindByParentId(aClass, aModel)/] + + [genPrintPdfReport(aClass, aModel)/] + + [genFindOtherParentByParentServiceImpl(aClass)/] + + [genBulkUpdate(aClass)/] +} +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entitySpecificFiles.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entitySpecificFiles.mtl new file mode 100644 index 0000000000000000000000000000000000000000..7d4500f70d8bd622a9e5528fb1583e41f724f205 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/entitySpecificFiles.mtl @@ -0,0 +1,37 @@ +[module entitySpecificFiles('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::entity/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::service/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::serviceImpl/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::controller/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::criteria/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::resource/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::repository/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::modelAssembler/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::dataTransfer::entityDto/] +[import it::micegroup::voila2::cartridge::springmongo::templates::entity::dataTransfer::entityWriteDto/] + +[template public genEntitySpecificFiles(aModel : Model , isMs : Boolean)] +[for(aClass : Class | aModel.getEntities())] + [consoleMessage(getInfoSeverity(), 'Code Generation for the Entity: ' + aClass.name)/] + [if (not aClass.hasDefinition())] + [consoleMessage(getWarnSeverity(), 'Entity ' + aClass.name + ' has no definition')/] + [/if] + [genEntityFile(aClass, aModel,isMs)/] + [genServiceFile(aClass,isMs)/] + [genServiceImplFile(aClass, aModel,isMs)/] + [aClass.genControllerFileMs(aModel)/] + [genAssemblerFile(aClass)/] + [genDtoEntityWriteFile(aClass, aModel)/] + [genCriteriaFile(aClass,isMs)/] + [if(isMs)._not()] + [genResourceFile(aClass)/] + [/if] + [genRepositoryFile(aClass,isMs)/] + [genDtoClassSpecificFile(aClass, aModel)/] +[/for] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/mainClass.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/mainClass.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e16a40f874216cd1db223a4625e0c095c167e26d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/mainClass.mtl @@ -0,0 +1,41 @@ +[comment encoding = UTF-8 /] + +[comment] + +Main Java Class for SpringBoot Template + +@author Vittorio Niespolo + +[/comment] + +[module mainClass('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils /] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::runtimeUtils /] +[import it::micegroup::voila2::cartridge::library::properties/] + + +[template public genMainClass(aModel : Model) post (writeAndFormat(getMainClassFileName()))] +package [getGenericPackage()/]; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; + +@SpringBootApplication +@ComponentScan({ "[getGroupName().concat('.').concat(getRootArtifactId())/]","[getRuntimePackage()/]" }) +public class [getMainClassNameAsMs()/] { + + public static void main(String['['/]] args) { + SpringApplication.run([getMainClassNameAsMs()/].class, args); + } +} +[/template] + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/mainSpringMongo.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/mainSpringMongo.mtl new file mode 100644 index 0000000000000000000000000000000000000000..d784535d3f6fde485936157deb32db3766ab0d04 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/mainSpringMongo.mtl @@ -0,0 +1,71 @@ +[comment encoding = UTF-8 /] +[module mainSpringMongo('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::springmongo::templates::mainClass/] + +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] + +[import it::micegroup::voila2::cartridge::springmongo::templates::utilsGeneration/] + +[import it::micegroup::voila2::cartridge::springmongo::templates::settings/] + +[comment]Generazione file specifici di ogni entità[/comment] +[import it::micegroup::voila2::cartridge::springmongo::templates::entitySpecificFiles/] + +[import it::micegroup::voila2::cartridge::springmongo::templates::ms-web::msWeb/] + +[import it::micegroup::voila2::cartridge::springmongo::templates::staticResources/] + +[comment]POM[/comment] +[import it::micegroup::voila2::cartridge::springmongo::templates::pom::pomGeneration/] + +[comment]PROPERTIES[/comment] +[import it::micegroup::voila2::cartridge::springmongo::templates::applicationResources/] + +[comment]MAIL[/comment] +[comment][import it::mice::voila2::acceleogenerator::core::springboot::mail::mailGeneration/][/comment] + +[comment]SECURITY PERMISSIONS[/comment] +[comment][import it::mice::voila2::acceleogenerator::core::springboot::security::permission/] +[import it::mice::voila2::acceleogenerator::core::springboot::microservice::sqlPermissionsScript/][/comment] + + +[template public genSpringMongoMain(aModel : Model){isMicroservizio: Boolean = aModel.isMainMs();}] +[comment]MAIN CLASS[/comment] +[consoleMessage(getInfoSeverity(), 'SpringMongo main class Generation')/] +[genMainClass(aModel)/] + +[comment]settings[/comment] +[consoleMessage(getInfoSeverity(), '.settings Generation')/] +[genMsSettings()/] + +[comment]Generazione file specifici di ogni entità[/comment] +[genEntitySpecificFiles(aModel,isMicroservizio)/] + +[comment]POPOLAMENTO PROJ MS-[/comment] +[comment]MS WEB POC CONTENT GENERATION[/comment] +[genWebModuleContent(aModel)/] + +[comment]POM[/comment] +[consoleMessage(getInfoSeverity(), 'Pom Generation')/] +[genModulesPoms(aModel,isMicroservizio)/] + +[comment]PROPERTIES[/comment] +[consoleMessage(getInfoSeverity(), 'ApplicationResourcesGeneration')/] +[genApplicationResources()/] + +[comment]MAIL[/comment] +[comment][genMailFiles(aModel,isMicroservizio)/][/comment] + +[comment]SECURITY[/comment] +[comment][genPermissionFile(aModel) /] +[genSQLPermissionsScript(aModel)/][/comment] + +[comment]Static Resources[/comment] +[genstaticResources()/] +[/template] + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/ms-web/applicationYML.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/ms-web/applicationYML.mtl new file mode 100644 index 0000000000000000000000000000000000000000..c5fc3510c5673886796ec07daa61654cecb9158d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/ms-web/applicationYML.mtl @@ -0,0 +1,73 @@ +[module applicationYML('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::modelUtils/] + +[template public genMsWebApplicationYML(aModel : Model) post(writeAndFormat(getMsWebApplicationYMLName()))] +server: + port: ${PORT:[getPortNumber()/]} + servlet: + context-path: /[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/] + +spring: + application: + name: [getRootArtifactId()/]-[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/]-service + liquibase: + enabled: false + security: + oauth2: + resourceserver: + jwt: + issuer-uri: http://${KK_URL:localhost}:${KK_PORT:8282}/auth/realms/[getRootArtifactId()/] + jwk-set-uri: http://${KK_URL:localhost}:${KK_PORT:8282}/auth/realms/[getRootArtifactId()/]/protocol/openid-connect/certs + +# data: +# rest: +# basePath: /[getArtifact().substituteFirst(getRootArtifactId().concat('-ms-'), '')/] + + data: + mongodb: + user: + password: + uri: + + h2: + console: + enabled: true + path: /h2-console + [if(isSecurityMicroservice())] + datasource: + url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:keycloak}?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false + username: ${USER_NAME:keycloak} + password: ${USER_PASSWORD:keycloak} + [/if] + devtools: + livereload: + port: 35830 + +logging: + level: + root: INFO + org.hibernate.SQL: TRACE + org.springframework: DEBUG + +gateway: +[comment] Scommentare quando il FE sarà in container baseuri: http://[aModel.getGateway().name.toLower()/]:8090[/comment] + baseuri: http://localhost:8090 + +jasperreports: + dir: reports + debug: true + +management: + endpoints: + web: + exposure: + include: "*" + endpoint: + health: + show-details: always +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/ms-web/msWeb.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/ms-web/msWeb.mtl new file mode 100644 index 0000000000000000000000000000000000000000..f81bf9be100e01f5a3379d4012b982783bbd32a6 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/ms-web/msWeb.mtl @@ -0,0 +1,53 @@ +[module msWeb('http://www.eclipse.org/uml2/5.0.0/UML')] + +[comment]ApplicationYML specifico per mongo[/comment] +[import it::micegroup::voila2::cartridge::springmongo::templates::ms-web::applicationYML/] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::db::genMsDBScript/] +[import it::micegroup::voila2::cartridge::library::microservice::microserviceUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::globalExceptionHandler/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::mapperConfig/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::msInterceptor/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::msProperties/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::msConfig/] +[import it::micegroup::voila2::cartridge::library::springboot::ms-web::liquibaseConfigurationBean/] + +[template public genWebModuleContent(aModel : Model)] +[genAdvicesContent()/] +[genConfigContent(aModel)/] +[genMsWebApplicationYML(aModel)/] +[genMsWebResourcesContent()/] +[genDBScript()/] +[genMsInterceptor(aModel)/] +[genMsConfig(aModel)/] +[genMsProperties()/] +[/template] + +[template public genAdvicesContent(oclAny : OclAny)] + [genGlobalExceptionHandler()/] +[/template] + +[template public genConfigContent(aModel : Model)] + [genMapperConfig(aModel)/] + [genLiquibaseConfigurationBean()/] +[comment] [genSecurityConfig(aModel)/][/comment] +[/template] + + +[template public genMsWebResourcesContent(oclany : OclAny)] +[comment]COPY FOLDER PER LA GENERAZIONE DEL CONTENUTO DELLA CARTELLA RESOURCES[/comment] +[copyFolder('/resources/msWebResources', getWebResourceFolderName(), 'it.mice.voila2.acceleogenerator', null, null, null, null, null, null, null, null)/] +[/template] + + + + + + + + + + diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomCoreModule.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomCoreModule.mtl new file mode 100644 index 0000000000000000000000000000000000000000..a0fe5ecbe07f3cd46f8a4ed3a2ff5be6e8ca7f7d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomCoreModule.mtl @@ -0,0 +1,68 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom Core Module XML Template + +@author Vittorio Niespolo + +[/comment] + + +[module pomCoreModule('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::pomUtils/] + +[template public genPomCoreModule(isMs : Boolean) post(writeAndFormat(getCorePomFileName()))] + + + 4.0.0 + + + [getCoreModuleName()/] + [getCoreModuleNaturalLangName()/] + [getUrl()/] + + + [genParentTag()/] + + jar + + + + [if(isMs)._not()] + [genVoila2RuntimeCoreDependency()/] + [genVoila2RuntimeMailCoreDependency()/] + [genVoila2RuntimeBusinessIntelligenceCoreDependency()/] + [else] + [genJPAModelDependency()/] + [genCoreLibsDependency()/] + [/if] + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.boot + spring-boot-starter-security + + + + org.springframework.boot + spring-boot-starter-web + + + + io.jsonwebtoken + jjwt + 0.9.1 + + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomGeneration.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomGeneration.mtl new file mode 100644 index 0000000000000000000000000000000000000000..5fd98aad0bc4ddede8380294ea431073d407d930 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomGeneration.mtl @@ -0,0 +1,11 @@ +[module pomGeneration('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::springmongo::templates::pom::pomCoreModule/] +[import it::micegroup::voila2::cartridge::springmongo::templates::pom::pomImplModule/] +[import it::micegroup::voila2::cartridge::springmongo::templates::pom::pomWebModule/] + +[template public genModulesPoms(aModel : Model , isMs : Boolean)] +[genPomCoreModule(isMs)/] +[genPomWebModule(isMs)/] +[genPomImplModule(isMs)/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomImplModule.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomImplModule.mtl new file mode 100644 index 0000000000000000000000000000000000000000..ee535c22bf7ab049087630b31087dea5f418ca2f --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomImplModule.mtl @@ -0,0 +1,46 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom Impl Module XML Template + +@author Vittorio Niespolo + +[/comment] + +[module pomImplModule('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] + +[template public genPomImplModule(isMs : Boolean) post(writeAndFormat(getImplPomFileName()))] + + + 4.0.0 + + + [getImplModuleName()/] + [getImplModuleNaturalLangName()/] + [getUrl()/] + + + [genParentTag()/] + + jar + + + + [genCoreDependency()/] + [if(isMs)._not()] + [genVoila2RuntimeImplDependency()/] + [genVoila2RuntimeMailImplDependency()/] + [genVoila2RuntimeBusinessIntelligenceImplDependency()/] + [/if] + [genImplLibsDependency()/] + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomParentModule.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomParentModule.mtl new file mode 100644 index 0000000000000000000000000000000000000000..3b694c3c98b9fb59bca6bec2a93541ee85112766 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomParentModule.mtl @@ -0,0 +1,74 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom Parent Module XML Template + +@author Vittorio Niespolo + +[/comment] + +[module pomParentModule('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] + +[template public genPomParentModule(oclAny : OclAny) post(writeAndFormat(getParentPomFileName()))] + + + 4.0.0 + + + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + + + [genParentCompleteInfo()/] + pom + + + + + modules/[getModelModuleName()/] + modules/[getCoreModuleName()/] + modules/[getImplModuleName()/] + modules/[getWebModuleName()/] + + + + + 1.8 + 1.1-SNAPSHOT + true + ISO-8859-1 + + 0.9.1 + 1.8 + 1.8 + 1.0.10.RELEASE + 2.3.5.RELEASE + UTF-8 + UTF-8 + UTF-8 + + + + + + javax.servlet + javax.servlet-api + 4.0.1 + + + + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomWebModule.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomWebModule.mtl new file mode 100644 index 0000000000000000000000000000000000000000..18bdb6cb0f446a1c160bfe96cc8a86ced945285d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/pom/pomWebModule.mtl @@ -0,0 +1,108 @@ +[comment encoding = UTF-8 /] + +[comment] + +Pom for Web Module XML Template + +@author Vittorio Niespolo + +[/comment] + +[module pomWebModule('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::fileNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::pomUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] +[import it::micegroup::voila2::cartridge::library::microservice::pomUtils/] + +[template public genPomWebModule(oclAny: OclAny) post(writeAndFormat(getWebPomFileName()))] + + + 4.0.0 + + + [getWebModuleName()/] + [getWebModuleNaturalLangName()/] + [getUrl()/] + + + [genParentTag()/] + + + + [genImplDependency()/] + [genLibsWebDependency()/] + [genH2Dependency()/] + [genLiquidBaseDependency()/] + [getSpringHateoasDependency()/] + [getSpringActuatorDependency()/] + [getJMXMicrometerDependency()/] + [getPrometheusMicrometerDependency()/] + + + + + spring-boot:run + [getArtifact()/] + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.5.RELEASE + + [getGenericPackage()/].[getMainClassNameAsMs()/] + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + + + + + + + dev + + true + + + + com.h2database + h2 + + + + + dev + + + + prod + + + prod + + + + +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/settings.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/settings.mtl new file mode 100644 index 0000000000000000000000000000000000000000..0900847d5bab357a155e936c7e3b0d04f7f0485e --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/settings.mtl @@ -0,0 +1,43 @@ +[module settings('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] + + +[template public genMsSettings(oclAny : OclAny)] +[genRootSettings()/] +[genCoreSettings()/] +[genImplSettings()/] +[genWebSettings()/] +[/template] + +[template public genRootSettings(oclAny:OclAny)] +[copyFolder('resources/settings/msSettings/.settings',getRootDotSettingsFolderName(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] +[/template] + +[template public genCoreSettings(oclAny:OclAny)] +[copyFolder('resources/settings/msSettings/.settings',getCoreDotSettingsFolderName(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] +[/template] + +[template public genImplSettings(oclAny:OclAny)] +[copyFolder('resources/settings/msSettings/.settings',getImplDotSettingsFolderName(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] +[/template] + +[template public genWebSettings(oclAny:OclAny)] +[copyFolder('resources/settings/msSettings/.settings',getWebDotSettingsFolderName(),'it.mice.voila2.acceleogenerator',null,null,null, +antFilterList(),false,tokenValuePairs(), null,null)/] +[/template] + + + +[template private antFilterList(dummy : OclAny)] +['*.json,*.project,*.properties,*.oaw,*.MF,*.uml,*.notation,*.xml,*.gitignore,*.mtl,*.java,*.classpath'/] +[/template] + +[template private tokenValuePairs(dummy : OclAny)] +['PROJECT_ID=' + getArtifact()/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/staticResources.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/staticResources.mtl new file mode 100644 index 0000000000000000000000000000000000000000..7d2ee69bcfdf30b514c7aa7c07d5760d74cbde89 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/staticResources.mtl @@ -0,0 +1,24 @@ +[comment encoding = UTF-8 /] +[module staticResources('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::copyFolderUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::folderUtils/] +[import it::micegroup::voila2::cartridge::library::properties/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::mvnWrapper/] +[import it::micegroup::voila2::cartridge::library::h2/] + +[template public genstaticResources(oclAny: OclAny)] +[genMvnWrapper()/] +[genH2(antFilterList(), tokenValuePairs())/] +[/template] + + +[template private antFilterList(dummy : OclAny)] +['SpringFoxConfig.java,.h2.server.properties'/] +[/template] + +[template private tokenValuePairs(dummy : OclAny)] +['PACKAGE=package ' + getGenericPackage()/].utilities; +[',APPNAME=' + getArtifact()/] +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/test.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/test.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e33a8b783b30ba9287a28328a28665c28f630d89 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/test.mtl @@ -0,0 +1,14 @@ +[comment encoding = UTF-8 /] + +[comment] +test +[/comment] + +[module test('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::logger::consoleUtils/] +[import it::micegroup::voila2::cartridge::library::logger::severityLevel/] + +[template public test(oclAny: OclAny)] +[consoleMessage('test')/] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/controllerUtilsMongo.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/controllerUtilsMongo.mtl new file mode 100644 index 0000000000000000000000000000000000000000..c863d8033d5c3c9d99a8a458c0dbfb12a9888705 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/controllerUtilsMongo.mtl @@ -0,0 +1 @@ +[module controllerUtilsMongo('http://www.eclipse.org/uml2/5.0.0/UML')] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/entityUtilsMongo.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/entityUtilsMongo.mtl new file mode 100644 index 0000000000000000000000000000000000000000..8764d74b814c44aa863683504d5fcb01b384837d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/entityUtilsMongo.mtl @@ -0,0 +1,192 @@ +[comment encoding = UTF-8 /] + +[comment] + +Entity Utilities Templates + +[/comment] + +[module entityUtilsMongo('http://www.eclipse.org/uml2/5.0.0/UML')] + + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::generalUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::stringUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::typeUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::propertyUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::securityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fullyQualifiedNamesUtils/] + +[import it::micegroup::voila2::cartridge::library::common::associationUtils /] +[import it::micegroup::voila2::cartridge::library::common::idUtils /] + +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils /] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] + +[template public genAddChild(aClass : Class){childAssociations : Collection(OclAny) = aClass.getChildAssociations();}] +[for(childAss : Association | childAssociations)] +public void add[aClass.getChildClass(childAss).name/]([aClass.getChildClass(childAss).name/] [aClass.getChildClass(childAss).name.toLowerFirst()/]){ + [aClass.getTheChildPropertyName(childAss).toLowerFirst()/].add([aClass.getChildClass(childAss).name.toLowerFirst()/]); +} +[/for] +[/template] + +[template public genConstructor(aClass : Class, isMs : Boolean){attributes : Collection(Property) = aClass.attribute;}] +public [aClass.getEntityClassName()/](String objectKey) +{ + super(); + setObjectKey(objectKey); +[comment] [if(aClass.hasGeneralClass())] + set[aClass.getClassIdName().toUpperFirst()/]([aClass.getClassIdName()/]); + [else] + this.[aClass.getClassIdName()/] = [aClass.getClassIdName()/]; + [/if] + [if(aClass.hasExternalPK())] + [for(a : Association | aClass.getParentAssociations())] + this.[aClass.getTheParentPropertyName(a)/] = new [aClass.getParentClass(a).name.toUpperFirst()/](); + [for(parentId:Property | aClass.getParentClass(a).getClassIDs())] + this.[aClass.getTheParentPropertyName(a)/].set[parentId.name.toUpperFirst()/](this.[aClass.getClassIdName()/].get[parentId.name.toUpperFirst()/]()); + [/for] + [/for] + [/if][/comment] +} +[if(aClass.getAttributesWithoutIDs()->size() >= 1 or (aClass.getAttributesWithoutIDs()->size() = 1 and aClass.getStringProperties()->size() = 0))] +public [aClass.getEntityClassName()/]([if(aClass.hasCompositeKey())][aClass.getKeyClassName()/] [aClass.getKeyClassName().toLowerFirst()/], [/if] +[for( p: Property | attributes)separator(', ')] +[p.type.getJavaType()/] [p.name/][/for]) +{ + super(); + [if(aClass.hasCompositeKey())] + this.[aClass.getKeyClassName().toLowerFirst()/] = [aClass.getKeyClassName().toLowerFirst()/]; + [/if] + [for(attribute:Property | attributes)] + this.[attribute.name/] = [attribute.name/]; + [/for] +} +[/if] +[/template] + +[** + * Generate annoted attributes for a Class + * @author: Vittorio Niespolo +*/] +[template public genAttributesMongo(aClass : Class)] +[for ( p: Property | aClass.ownedAttribute)] +[if(getDefinition(p).oclIsUndefined()._not() and getDefinition(p).toString().size() <> 0)] +/** + [getDefinition(p)/] +*/ +[/if] +[genAnnotatedProperty(p, aClass)/] +[/for] +[/template] + +[** + * Generate annoted Properties for a Class + * @author: Vittorio Niespolo +*/] +[template public genAnnotatedProperty(aProperty: Property, aClass : Class) post(trim())] +[genAnnotation(aProperty, aClass)/] +private [aProperty.type.getJavaType()/] [aProperty.name/]; +[/template] + +[** + * Generate annotations for a Property of a Class + * @author: Vittorio Niespolo +*/] +[template public genAnnotation(aProperty : Property, aClass : Class) post(trim()) {definition : String = aProperty.getColumnDefinition(aClass); length : Integer = aProperty.getPhysicalColumnLenght();}] +[if(aProperty.isID and aClass.hasCompositeKey()._not())]@Id +[if(aClass.hasAutogeneratedId())]@GeneratedValue(strategy = GenerationType.IDENTITY)[/if] +[elseif(aProperty.isRequired())]@NotNull +[/if] +[if(aProperty.isID and aClass.hasCompositeKey()._not() and aClass.hasDefinition() and aClass.hasAutogeneratedId())]//WARNING For some RDBMS this syntax may not work. Manually delete COMMENT if you are not using Mysql.[/if] +@Field(value = "[if(aProperty.isID)]_id[else][camelToUnderscore(aProperty.getPhysicalColumnName())/][/if]", targetType=[if(aProperty.isID)]FieldType.OBJECT_ID[else][aProperty.type.getFieldType()/][/if]) +[if(aProperty.isDateTime())]@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")[/if] +[/template] + +[template public genEntityImports(aClass: Class)] + +import [getLibsEntityPackageAsMs()/].BaseEntity; +import java.io.Serializable; + +[for(imp: String | aClass.getImportsForProperty())] +[imp/] +[/for] +[comment]import javax.persistence.Column;[/comment] +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; +[if(aClass.hasCompositeKey())] +import javax.persistence.EmbeddedId; +[if(aClass.isInPrivilegePerRoleRole())] +import javax.persistence.PreRemove; +import org.springframework.cache.annotation.CacheEvict; +[/if] +[else] +[if(isClassExtended(aClass))] +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +[/if] +import javax.persistence.Id; +[if(aClass.hasAutogeneratedId())] +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +[/if] +[/if] + +[if(aClass.hasParents() or (aClass.hasParents()._not() and aClass.hasOneToOneRelation() and aClass.hasNavigableParents()))] +import javax.persistence.JoinColumn; +[/if] +[if(aClass.hasManyToOneRelation() or aClass.hasOneToOneRelation())] +import javax.persistence.FetchType; +[/if] +[if(aClass.hasChilds())] +import java.util.Collection; +import java.util.ArrayList; +import javax.persistence.OneToMany; +import javax.persistence.CascadeType; +import com.fasterxml.jackson.annotation.JsonManagedReference; +[/if] + +[if(aClass.hasParents() or aClass.hasChilds())] +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +[/if] + +[if(aClass.hasParents())] +[if(aClass.hasCompositeKey()._not())] +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.annotation.JsonBackReference; +[/if] +[if(aClass.hasOneToOneRelation())] +import javax.persistence.OneToOne; +[/if] +[if(aClass.hasOneToOneRelation() or aClass.hasManyToOneRelation())] +[if(aClass.hasCompositeKey()._not())] +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; +[/if][/if] +[/if] + +import lombok.NoArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +[comment]import lombok.AllArgsConstructor;[/comment] + +import org.apache.commons.lang3.StringUtils; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +[for(aClass : Class | aClass.getParentClasses())] +[if(aClass.hasCompositeKey())] +import [getEntityCKTypeFullyQualified(aClass)/]; +[/if] +[/for] + +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; +import org.springframework.data.mongodb.core.mapping.FieldType; +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/repositoryUtilsMongo.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/repositoryUtilsMongo.mtl new file mode 100644 index 0000000000000000000000000000000000000000..a7c783f06669836f3f7966216631bcbc12ec7b51 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/repositoryUtilsMongo.mtl @@ -0,0 +1,40 @@ +[comment encoding = UTF-8 /] + +[comment] + +Repository Utility's Templates +This library contains all the methods needed for repositories + +[/comment] +[module repositoryUtilsMongo('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fullyQualifiedNamesUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] + +[template public genRepositoryImports(aClass : Class) post(trim())] +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.Collection; + +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; +[if(aClass.hasParents())] +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +[/if] +import [getEntityTypeFullyQualified(aClass)/]; +[if(aClass.hasCompositeKey())] +import [getEntityCKTypeFullyQualified(aClass)/]; +[/if] +[genParentEntityImport(aClass)/] +[for(aClass : Class | aClass.getParentClasses())] +[if(aClass.hasCompositeKey() )] +import [getEntityCKTypeFullyQualified(aClass)/]; +[/if] +[/for] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/serviceImplUtilsMongo.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/serviceImplUtilsMongo.mtl new file mode 100644 index 0000000000000000000000000000000000000000..773892f3cbe54183d5f0c7f22913f892e296b7fc --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/serviceImplUtilsMongo.mtl @@ -0,0 +1,97 @@ +[comment encoding = UTF-8 /] + +[comment] +In questo modulo vengono inseriti tutti i templates relativi specificatamente alle utilities per la generazione della classe serviceImpl per SPRING + MONGO +Fare riferimento alla library per tutti gli altri templates condivisi. + +Author: Vittorio Niespolo + +[/comment] +[module serviceImplUtilsMongo('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::fullyQualifiedNamesUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::common::utilities/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::runtimeUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::classNameUtils/] + +[template public genServiceImplImports(aClass : Class, aModel : Model) post(trim())] +import java.util.Map; +import java.util.List; +import java.util.Locale; +import java.util.HashMap; +import java.util.Optional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ResourceBundle; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; + +[comment]import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable;[/comment] + +import org.springframework.context.i18n.LocaleContextHolder; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.sf.jasperreports.engine.JRParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.JasperReport; +import net.sf.jasperreports.engine.JasperFillManager; +import net.sf.jasperreports.engine.JasperExportManager; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +[comment][for(type : String | getAttributeJavaTypesNoDuplicates(getParentIdAttributesAsSequence(aClass)))] +import [getRuntimePackage().concat('.filter.')/][type/]; +[/for][/comment] + +import [getEntityTypeFullyQualified(aClass)/]; + +[if(aClass.hasCompositeKey())] +[genCKImports(aClass)/] +[genParentCKImports(aClass)/] +[/if] +[genParentEntityImport(aClass)/] +[comment]import [getEntity_TypeFullyQualified(aClass)/];[/comment] +[comment]import [getCriteriaTypeFullyQualified(aClass)/];[/comment] +import [getRepositoryTypeFullyQualified(aClass)/]; +import [getFilterServiceFullyQualified(aClass)/]; + + +[comment][for(parentAss: Association | getParentAssociations(aClass))] +[if(parentAss.isIdentifying() and aClass.getParentClass(parentAss) <> aClass)] +import [getEntityPackage()/].[aClass.getParentClass(parentAss).name/]_; +[/if] +[/for][/comment] + +[if(getParentClasses(aClass) -> size() > 1)] +import org.springframework.data.domain.PageImpl; +[if(not aClass.hasChilds())] +import java.util.stream.Collectors; +[/if][/if] +import [getServiceLibsPackageAsMs()/].BaseServiceImpl; +[comment][if(aClass.hasCompositeKey())] +import [getEntityPackage()/].[aClass.getClassIdName().toUpperFirst()/]_; +[/if][/comment] + +[if(aClass.hasChilds())] +import java.util.stream.Collectors; +[for(childAss : Association | aClass.getChildAssociations())] +[if(aClass.getChildClass(childAss) <> aClass)] +import [getEntityPackage()/].[getEntityClassName(getChildClass(aClass,childAss))/]; +[/if] +[/for] +import [getRuntimeGenericEntityFullyQualified()/]; +[/if] +import [getRuntimeExceptionPackage()/].BusinessException; +import net.sf.jasperreports.engine.JRException; +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/serviceUtilsMongo.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/serviceUtilsMongo.mtl new file mode 100644 index 0000000000000000000000000000000000000000..3aafb6a742a8e22e1ad11dde57e288c93c0c54e7 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilities/serviceUtilsMongo.mtl @@ -0,0 +1,26 @@ +[comment encoding = UTF-8 /] +[module serviceUtilsMongo('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::importUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::associationUtils/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::entityUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::fullyQualifiedNamesUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::packageUtils/] +[import it::micegroup::voila2::cartridge::library::springboot::runtimeUtils/] + +[template public genServiceImports(aClass: Class) post(trim())] +import [getEntityTypeFullyQualified(aClass)/]; +import [getCriteriaTypeFullyQualified(aClass)/]; + +[if(aClass.hasParents())] +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +[/if] +[if(aClass.hasCompositeKey())] +[genCKImports(aClass)/] +[/if] +[genParentEntityImport(aClass)/] +[genParentCKImports(aClass)/] +import [getServiceLibsPackageAsMs()/].BaseEntityServiceMongo; +import [getRuntimeExceptionPackage()/].BusinessException; +[/template] diff --git a/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilsGeneration.mtl b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilsGeneration.mtl new file mode 100644 index 0000000000000000000000000000000000000000..e25fd74d31d2a455a2d3a6154eeaf3efb2ef729a --- /dev/null +++ b/plugin-version/it.micegroup.voila2.cartridge.springmongo/src/it/micegroup/voila2/cartridge/springmongo/templates/utilsGeneration.mtl @@ -0,0 +1,14 @@ +[module utilsGeneration('http://www.eclipse.org/uml2/5.0.0/UML')] + +[import it::micegroup::voila2::cartridge::library::springboot::constants/] +[import it::micegroup::voila2::cartridge::library::springboot::cacheConfig/] +[import it::micegroup::voila2::cartridge::library::springboot::auditable/] +[import it::micegroup::voila2::cartridge::library::javaservice::wrapper::featureUtils/] + +[template public genApplicationUtils(aModel: Model)] +[genConstants(false)/] +[genAuditable(false)/] +[if(isCachingEnabled(aModel))] +[genCacheConfig(false)/] +[/if] +[/template] \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.toolbox/.classpath b/plugin-version/it.micegroup.voila2.toolbox/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..042d5759c0bba172f28717d011076cbe43a68c17 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.toolbox/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugin-version/it.micegroup.voila2.toolbox/.project b/plugin-version/it.micegroup.voila2.toolbox/.project new file mode 100644 index 0000000000000000000000000000000000000000..a17a321e9ec7d02977dd61109c5d58f8ed30b293 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.toolbox/.project @@ -0,0 +1,28 @@ + + + it.micegroup.voila2.toolbox + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/plugin-version/it.micegroup.voila2.toolbox/.settings/org.eclipse.jdt.core.prefs b/plugin-version/it.micegroup.voila2.toolbox/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..229876b18adb6d2c456e0f6cc03654d8d420d84b --- /dev/null +++ b/plugin-version/it.micegroup.voila2.toolbox/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,10 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=15 +org.eclipse.jdt.core.compiler.compliance=15 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=15 diff --git a/plugin-version/it.micegroup.voila2.toolbox/META-INF/MANIFEST.MF b/plugin-version/it.micegroup.voila2.toolbox/META-INF/MANIFEST.MF new file mode 100644 index 0000000000000000000000000000000000000000..2044c64db94728663986e2393f83de89450ee1df --- /dev/null +++ b/plugin-version/it.micegroup.voila2.toolbox/META-INF/MANIFEST.MF @@ -0,0 +1,18 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Toolbox +Bundle-SymbolicName: it.micegroup.voila2.toolbox;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: Micegroup +Require-Bundle: javax.inject, + org.eclipse.osgi, + org.eclipse.jface, + org.eclipse.e4.ui.services, + org.eclipse.e4.core.di.annotations, + org.eclipse.ui, + org.eclipse.core.resources;bundle-version="3.13.900", + org.eclipse.core.runtime;bundle-version="3.20.0", + it.mice.voila2.plugin;bundle-version="1.0.0" +Bundle-RequiredExecutionEnvironment: JavaSE-15 +Import-Package: javax.annotation;version="1.2.0" +Automatic-Module-Name: it.micegroup.voila2.toolbox diff --git a/plugin-version/it.micegroup.voila2.toolbox/build.properties b/plugin-version/it.micegroup.voila2.toolbox/build.properties new file mode 100644 index 0000000000000000000000000000000000000000..eade967131e04f32729272b3f6f79d4a30093ec8 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.toolbox/build.properties @@ -0,0 +1,6 @@ +source.. = src/ +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + icons/ \ No newline at end of file diff --git a/plugin-version/it.micegroup.voila2.toolbox/icons/commit.png b/plugin-version/it.micegroup.voila2.toolbox/icons/commit.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d86ea01afb91a4691d006994b07682ffa020fe Binary files /dev/null and b/plugin-version/it.micegroup.voila2.toolbox/icons/commit.png differ diff --git a/plugin-version/it.micegroup.voila2.toolbox/icons/magicHat.png b/plugin-version/it.micegroup.voila2.toolbox/icons/magicHat.png new file mode 100644 index 0000000000000000000000000000000000000000..47decfd36cfeeb3418799f97790cbcdf08575d60 Binary files /dev/null and b/plugin-version/it.micegroup.voila2.toolbox/icons/magicHat.png differ diff --git a/plugin-version/it.micegroup.voila2.toolbox/icons/magicHat@2x.png b/plugin-version/it.micegroup.voila2.toolbox/icons/magicHat@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..23df426f98f8f3381bd9da22071bbffce019d3f1 Binary files /dev/null and b/plugin-version/it.micegroup.voila2.toolbox/icons/magicHat@2x.png differ diff --git a/plugin-version/it.micegroup.voila2.toolbox/icons/sample.png b/plugin-version/it.micegroup.voila2.toolbox/icons/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..02c4b79e10986d56bda97051eb0da2e9119c97f5 Binary files /dev/null and b/plugin-version/it.micegroup.voila2.toolbox/icons/sample.png differ diff --git a/plugin-version/it.micegroup.voila2.toolbox/icons/sample@2x.png b/plugin-version/it.micegroup.voila2.toolbox/icons/sample@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c1224d1fce3debb7eb66e63ac948fcd6d33d2999 Binary files /dev/null and b/plugin-version/it.micegroup.voila2.toolbox/icons/sample@2x.png differ diff --git a/plugin-version/it.micegroup.voila2.toolbox/icons/voila2Icon.png b/plugin-version/it.micegroup.voila2.toolbox/icons/voila2Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0c9b898006125b34d905756fdf7e4e9cce5e2614 Binary files /dev/null and b/plugin-version/it.micegroup.voila2.toolbox/icons/voila2Icon.png differ diff --git a/plugin-version/it.micegroup.voila2.toolbox/plugin.xml b/plugin-version/it.micegroup.voila2.toolbox/plugin.xml new file mode 100644 index 0000000000000000000000000000000000000000..8316c916964a68c0ab0372048ad44ddb5ff3549d --- /dev/null +++ b/plugin-version/it.micegroup.voila2.toolbox/plugin.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugin-version/it.micegroup.voila2.toolbox/src/it/micegroup/voila2/toolbox/handlers/CommitSyncAction.java b/plugin-version/it.micegroup.voila2.toolbox/src/it/micegroup/voila2/toolbox/handlers/CommitSyncAction.java new file mode 100644 index 0000000000000000000000000000000000000000..3a44844aebcc27f4c086595dc751277014ac32d5 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.toolbox/src/it/micegroup/voila2/toolbox/handlers/CommitSyncAction.java @@ -0,0 +1,77 @@ +package it.micegroup.voila2.toolbox.handlers; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.resources.FileInfoMatcherDescription; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.handlers.HandlerUtil; + +public class CommitSyncAction implements IRunnableWithProgress { + + private ExecutionEvent event; + + public CommitSyncAction(ExecutionEvent event) { + this.event = event; + } + + @Override + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + addFilters(monitor); + } + + private void addFilters(IProgressMonitor monitor) { +// if (StaticResources.getProjectsToFilter().isEmpty()) { + try { + for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) { +// project.refreshLocal(IResource.DEPTH_INFINITE, monitor); + project.createFilter(26, new FileInfoMatcherDescription("org.eclipse.ui.ide.multiFilter", + "1.0-name-matches-false-false-modules"), IResource.BACKGROUND_REFRESH, monitor); + project.createFilter(26, new FileInfoMatcherDescription("org.eclipse.ui.ide.multiFilter", + "1.0-name-matches-false-false-.syncFolder"), IResource.BACKGROUND_REFRESH, monitor); + project.createFilter(26, new FileInfoMatcherDescription("org.eclipse.ui.ide.multiFilter", + "1.0-name-matches-false-false-.target"), IResource.BACKGROUND_REFRESH, monitor); + } + } catch (CoreException e) { + e.printStackTrace(); + } +// } else { +// for (IProject project : StaticResources.getProjectsToFilter()) { +// try { +// project.refreshLocal(IResource.DEPTH_INFINITE, monitor); +// project.createFilter(26, +// new FileInfoMatcherDescription("org.eclipse.ui.ide.multiFilter", +// "1.0-name-matches-false-false-modules"), +// IResource.BACKGROUND_REFRESH, monitor); +// project.createFilter(26, +// new FileInfoMatcherDescription("org.eclipse.ui.ide.multiFilter", +// "1.0-name-matches-false-false-.syncFolder"), +// IResource.BACKGROUND_REFRESH, monitor); +// project.createFilter(26, +// new FileInfoMatcherDescription("org.eclipse.ui.ide.multiFilter", +// "1.0-name-matches-false-false-.target"), +// IResource.BACKGROUND_REFRESH, monitor); +// } catch (CoreException e) { +// e.printStackTrace(); +// } +// } +// } + try { + IWorkbenchWindow window; + window = HandlerUtil.getActiveWorkbenchWindowChecked(event); + MessageDialog.openInformation(window.getShell(), "Success!", "La sincronizzazione è stata ultimata"); + } catch ( + + ExecutionException e) { + e.printStackTrace(); + } + } +} diff --git a/plugin-version/it.micegroup.voila2.toolbox/src/it/micegroup/voila2/toolbox/handlers/CommitSyncHandler.java b/plugin-version/it.micegroup.voila2.toolbox/src/it/micegroup/voila2/toolbox/handlers/CommitSyncHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..52ade65bcf955a17a3153e33516bbc34efeb8523 --- /dev/null +++ b/plugin-version/it.micegroup.voila2.toolbox/src/it/micegroup/voila2/toolbox/handlers/CommitSyncHandler.java @@ -0,0 +1,37 @@ +package it.micegroup.voila2.toolbox.handlers; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.handlers.HandlerUtil; +import org.eclipse.ui.progress.IProgressService; + +/** + * Handler che viene attivato dal pulsante che sancisce la fine della + * generazione + * + * @author Vittorio Niespolo + * + */ +public class CommitSyncHandler extends AbstractHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + IWorkbench wb = PlatformUI.getWorkbench(); + IProgressService ps = wb.getProgressService(); + try { + ps.runInUI(new ProgressMonitorDialog(org.eclipse.swt.widgets.Display.getCurrent().getActiveShell()), + new CommitSyncAction(event), null); + } catch (InvocationTargetException | InterruptedException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/plugin-version/properties/ui/MultipleAttribute.xwt b/plugin-version/properties/ui/MultipleAttribute.xwt new file mode 100644 index 0000000000000000000000000000000000000000..e79966b4b4b770149fe1367b905cffdcbe3ef528 --- /dev/null +++ b/plugin-version/properties/ui/MultipleAttribute.xwt @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/plugin-version/properties/ui/MultipleEntity.xwt b/plugin-version/properties/ui/MultipleEntity.xwt new file mode 100644 index 0000000000000000000000000000000000000000..e29bdbb85422335396c2463a94f7c846b040ae43 --- /dev/null +++ b/plugin-version/properties/ui/MultipleEntity.xwt @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/plugin-version/properties/ui/MultipleManyToOneRelation.xwt b/plugin-version/properties/ui/MultipleManyToOneRelation.xwt new file mode 100644 index 0000000000000000000000000000000000000000..1e962a1ad43d99b7852824a9c6fab5c7fd0017a9 --- /dev/null +++ b/plugin-version/properties/ui/MultipleManyToOneRelation.xwt @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/plugin-version/properties/ui/MultipleNamedElement.xwt b/plugin-version/properties/ui/MultipleNamedElement.xwt new file mode 100644 index 0000000000000000000000000000000000000000..e29bdbb85422335396c2463a94f7c846b040ae43 --- /dev/null +++ b/plugin-version/properties/ui/MultipleNamedElement.xwt @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/plugin-version/properties/ui/SingleAttribute.xwt b/plugin-version/properties/ui/SingleAttribute.xwt new file mode 100644 index 0000000000000000000000000000000000000000..4468d46decf3b3f5c96ff41dd0dd299c8ea32cf7 --- /dev/null +++ b/plugin-version/properties/ui/SingleAttribute.xwt @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugin-version/properties/ui/SingleEntity.xwt b/plugin-version/properties/ui/SingleEntity.xwt new file mode 100644 index 0000000000000000000000000000000000000000..35ea2740720b138812a60bd35af1c4f47742228b --- /dev/null +++ b/plugin-version/properties/ui/SingleEntity.xwt @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugin-version/properties/ui/SingleManyToOneRelation.xwt b/plugin-version/properties/ui/SingleManyToOneRelation.xwt new file mode 100644 index 0000000000000000000000000000000000000000..6b32d42fa46ece2846b9820504c0c8ee3ae7986b --- /dev/null +++ b/plugin-version/properties/ui/SingleManyToOneRelation.xwt @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugin-version/properties/ui/SingleNamedElement.xwt b/plugin-version/properties/ui/SingleNamedElement.xwt new file mode 100644 index 0000000000000000000000000000000000000000..998a580499d4a183b1394dd4ccdc4d5fa8d80888 --- /dev/null +++ b/plugin-version/properties/ui/SingleNamedElement.xwt @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file