[DEV] extarct maximul from karauth and karusic
This commit is contained in:
parent
4040a42e63
commit
09ff403d9a
27
.classpath
Normal file
27
.classpath
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" output="out/maven/classes" path="src">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" output="out/maven/test-classes" path="test/src">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
<attribute name="test" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="output" path="out/maven/classes"/>
|
||||||
|
</classpath>
|
23
.project
Normal file
23
.project
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>achi-data</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
66
CheckStyle.xml
Executable file
66
CheckStyle.xml
Executable file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Check Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This configuration file was written by the eclipse-cs plugin configuration editor
|
||||||
|
-->
|
||||||
|
<!--
|
||||||
|
Checkstyle-Configuration: Marc Checks
|
||||||
|
Description:
|
||||||
|
Checkstyle configuration that checks the sun coding conventions.
|
||||||
|
-->
|
||||||
|
<module name="Checker">
|
||||||
|
<property name="severity" value="error"/>
|
||||||
|
<property name="fileExtensions" value="java, properties, xml"/>
|
||||||
|
<module name="TreeWalker">
|
||||||
|
<module name="ConstantName"/>
|
||||||
|
<module name="LocalFinalVariableName"/>
|
||||||
|
<module name="LocalVariableName"/>
|
||||||
|
<module name="MemberName"/>
|
||||||
|
<module name="MethodName"/>
|
||||||
|
<module name="PackageName"/>
|
||||||
|
<module name="ParameterName"/>
|
||||||
|
<module name="StaticVariableName"/>
|
||||||
|
<module name="TypeName"/>
|
||||||
|
<module name="AvoidStarImport"/>
|
||||||
|
<module name="IllegalImport"/>
|
||||||
|
<module name="RedundantImport"/>
|
||||||
|
<module name="UnusedImports">
|
||||||
|
<property name="processJavadoc" value="false"/>
|
||||||
|
</module>
|
||||||
|
<module name="ModifierOrder"/>
|
||||||
|
<module name="EmptyStatement"/>
|
||||||
|
<module name="EqualsHashCode"/>
|
||||||
|
<module name="IllegalInstantiation"/>
|
||||||
|
<module name="MissingSwitchDefault"/>
|
||||||
|
<module name="SimplifyBooleanExpression"/>
|
||||||
|
<module name="SimplifyBooleanReturn"/>
|
||||||
|
<module name="HideUtilityClassConstructor"/>
|
||||||
|
<module name="InterfaceIsType"/>
|
||||||
|
<module name="ArrayTypeStyle"/>
|
||||||
|
<module name="TodoComment"/>
|
||||||
|
<module name="UpperEll"/>
|
||||||
|
<module name="AnnotationUseStyle"/>
|
||||||
|
<module name="MissingDeprecated"/>
|
||||||
|
<module name="MissingOverride"/>
|
||||||
|
<module name="PackageAnnotation"/>
|
||||||
|
<module name="SuppressWarnings"/>
|
||||||
|
<module name="AnnotationLocation"/>
|
||||||
|
<module name="ClassTypeParameterName"/>
|
||||||
|
<module name="MethodTypeParameterName"/>
|
||||||
|
<module name="InterfaceTypeParameterName"/>
|
||||||
|
<module name="CatchParameterName"/>
|
||||||
|
<module name="LambdaParameterName"/>
|
||||||
|
<module name="Regexp"/>
|
||||||
|
<module name="RegexpSinglelineJava"/>
|
||||||
|
</module>
|
||||||
|
<module name="BeforeExecutionExclusionFileFilter">
|
||||||
|
<property name="fileNamePattern" value="module\-info\.java$"/>
|
||||||
|
</module>
|
||||||
|
<module name="Translation"/>
|
||||||
|
<module name="Header"/>
|
||||||
|
<module name="RegexpHeader"/>
|
||||||
|
<module name="RegexpMultiline"/>
|
||||||
|
<module name="RegexpOnFilename"/>
|
||||||
|
<module name="RegexpSingleline"/>
|
||||||
|
</module>
|
66
CleanUp.xml
Normal file
66
CleanUp.xml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE xml>
|
||||||
|
<profiles version="2">
|
||||||
|
<profile kind="CleanUpProfile" name="Scenarium" version="2">
|
||||||
|
<setting id="cleanup.use_autoboxing" value="false"/>
|
||||||
|
<setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/>
|
||||||
|
<setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/>
|
||||||
|
<setting id="cleanup.organize_imports" value="true"/>
|
||||||
|
<setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/>
|
||||||
|
<setting id="cleanup.format_source_code_changes_only" value="false"/>
|
||||||
|
<setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/>
|
||||||
|
<setting id="cleanup.add_generated_serial_version_id" value="false"/>
|
||||||
|
<setting id="cleanup.remove_redundant_semicolons" value="false"/>
|
||||||
|
<setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="true"/>
|
||||||
|
<setting id="cleanup.remove_redundant_type_arguments" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unused_imports" value="true"/>
|
||||||
|
<setting id="cleanup.insert_inferred_type_arguments" value="false"/>
|
||||||
|
<setting id="cleanup.make_private_fields_final" value="true"/>
|
||||||
|
<setting id="cleanup.use_lambda" value="true"/>
|
||||||
|
<setting id="cleanup.always_use_blocks" value="false"/>
|
||||||
|
<setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="false"/>
|
||||||
|
<setting id="cleanup.sort_members_all" value="false"/>
|
||||||
|
<setting id="cleanup.remove_trailing_whitespaces_all" value="true"/>
|
||||||
|
<setting id="cleanup.add_missing_annotations" value="true"/>
|
||||||
|
<setting id="cleanup.always_use_this_for_non_static_field_access" value="true"/>
|
||||||
|
<setting id="cleanup.make_parameters_final" value="false"/>
|
||||||
|
<setting id="cleanup.sort_members" value="false"/>
|
||||||
|
<setting id="cleanup.remove_private_constructors" value="true"/>
|
||||||
|
<setting id="cleanup.always_use_parentheses_in_expressions" value="false"/>
|
||||||
|
<setting id="cleanup.remove_unused_local_variables" value="false"/>
|
||||||
|
<setting id="cleanup.convert_to_enhanced_for_loop" value="false"/>
|
||||||
|
<setting id="cleanup.remove_unused_private_fields" value="true"/>
|
||||||
|
<setting id="cleanup.remove_redundant_modifiers" value="false"/>
|
||||||
|
<setting id="cleanup.never_use_blocks" value="true"/>
|
||||||
|
<setting id="cleanup.add_missing_deprecated_annotations" value="true"/>
|
||||||
|
<setting id="cleanup.use_this_for_non_static_field_access" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unnecessary_nls_tags" value="true"/>
|
||||||
|
<setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="true"/>
|
||||||
|
<setting id="cleanup.add_missing_nls_tags" value="false"/>
|
||||||
|
<setting id="cleanup.remove_unnecessary_casts" value="true"/>
|
||||||
|
<setting id="cleanup.use_unboxing" value="false"/>
|
||||||
|
<setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/>
|
||||||
|
<setting id="cleanup.format_source_code" value="true"/>
|
||||||
|
<setting id="cleanup.convert_functional_interfaces" value="true"/>
|
||||||
|
<setting id="cleanup.add_default_serial_version_id" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unused_private_methods" value="true"/>
|
||||||
|
<setting id="cleanup.remove_trailing_whitespaces" value="true"/>
|
||||||
|
<setting id="cleanup.make_type_abstract_if_missing_method" value="false"/>
|
||||||
|
<setting id="cleanup.add_serial_version_id" value="true"/>
|
||||||
|
<setting id="cleanup.use_this_for_non_static_method_access" value="false"/>
|
||||||
|
<setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="true"/>
|
||||||
|
<setting id="cleanup.use_anonymous_class_creation" value="false"/>
|
||||||
|
<setting id="cleanup.add_missing_override_annotations_interface_methods" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unused_private_members" value="false"/>
|
||||||
|
<setting id="cleanup.make_local_variable_final" value="false"/>
|
||||||
|
<setting id="cleanup.add_missing_methods" value="false"/>
|
||||||
|
<setting id="cleanup.never_use_parentheses_in_expressions" value="true"/>
|
||||||
|
<setting id="cleanup.qualify_static_member_accesses_with_declaring_class" value="true"/>
|
||||||
|
<setting id="cleanup.use_parentheses_in_expressions" value="true"/>
|
||||||
|
<setting id="cleanup.add_missing_override_annotations" value="true"/>
|
||||||
|
<setting id="cleanup.use_blocks" value="true"/>
|
||||||
|
<setting id="cleanup.make_variable_declarations_final" value="true"/>
|
||||||
|
<setting id="cleanup.correct_indentation" value="true"/>
|
||||||
|
<setting id="cleanup.remove_unused_private_types" value="true"/>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
366
Formatter.xml
Normal file
366
Formatter.xml
Normal file
@ -0,0 +1,366 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE xml>
|
||||||
|
<profiles version="18">
|
||||||
|
<profile kind="CodeFormatterProfile" name="Scenarium" version="18">
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="200"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_if_empty"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="0"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="200"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
6
LICENSE
Normal file
6
LICENSE
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
PROPIETARY licence
|
||||||
|
==================
|
||||||
|
|
||||||
|
Copyright at Edouard DUPIN
|
||||||
|
|
||||||
|
you have no right
|
177
pom.xml
Normal file
177
pom.xml
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>kar</groupId>
|
||||||
|
<artifactId>archidata</artifactId>
|
||||||
|
<version>0.1.0</version>
|
||||||
|
<properties>
|
||||||
|
<jaxrs.version>2.1</jaxrs.version>
|
||||||
|
<jersey.version>2.32</jersey.version>
|
||||||
|
<jaxb.version>2.3.1</jaxb.version>
|
||||||
|
<istack.version>3.0.7</istack.version>
|
||||||
|
|
||||||
|
<maven.compiler.version>3.1</maven.compiler.version>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
|
||||||
|
<maven.dependency.version>3.1.1</maven.dependency.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey</groupId>
|
||||||
|
<artifactId>jersey-bom</artifactId>
|
||||||
|
<version>${jersey.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey.media</groupId>
|
||||||
|
<artifactId>jersey-media-multipart</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey.inject</groupId>
|
||||||
|
<artifactId>jersey-hk2</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey.containers</groupId>
|
||||||
|
<artifactId>jersey-container-grizzly2-http</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml.bind</groupId>
|
||||||
|
<artifactId>jaxb-api</artifactId>
|
||||||
|
<version>${jaxb.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.ws.rs</groupId>
|
||||||
|
<artifactId>javax.ws.rs-api</artifactId>
|
||||||
|
<version>2.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.sun.xml.bind</groupId>
|
||||||
|
<artifactId>jaxb-impl</artifactId>
|
||||||
|
<version>${jaxb.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.sun.istack</groupId>
|
||||||
|
<artifactId>istack-commons-runtime</artifactId>
|
||||||
|
<version>${istack.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
|
||||||
|
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<version>8.0.30</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish.jersey.media</groupId>
|
||||||
|
<artifactId>jersey-media-json-jackson</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
<version>2.8.10</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>javax.servlet-api</artifactId>
|
||||||
|
<version>3.0.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jetbrains</groupId>
|
||||||
|
<artifactId>annotations</artifactId>
|
||||||
|
<version>RELEASE</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.nimbusds</groupId>
|
||||||
|
<artifactId>nimbus-jose-jwt</artifactId>
|
||||||
|
<version>9.22</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<sourceDirectory>src</sourceDirectory>
|
||||||
|
<testSourceDirectory>test/src</testSourceDirectory>
|
||||||
|
<directory>${project.basedir}/out/maven/</directory>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>${maven.compiler.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
<!--<encoding>${project.build.sourceEncoding}</encoding>-->
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<!-- Create the source bundle -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-source-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-sources</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<!-- junit results -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>3.0.0-M5</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>fully.qualified.MainClass</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
<descriptorRefs>
|
||||||
|
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||||
|
</descriptorRefs>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<!-- Java-doc generation for stand-alone site -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>3.2.0</version>
|
||||||
|
<configuration>
|
||||||
|
<show>private</show>
|
||||||
|
<nohelp>true</nohelp>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<!-- Generate Java-docs As Part Of Project Reports -->
|
||||||
|
<reporting>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>3.2.0</version>
|
||||||
|
<configuration>
|
||||||
|
<show>public</show>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</reporting>
|
||||||
|
|
||||||
|
</project>
|
16
src/org/kar/archidata/GlobalConfiguration.java
Normal file
16
src/org/kar/archidata/GlobalConfiguration.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package org.kar.archidata;
|
||||||
|
|
||||||
|
import org.kar.archidata.db.DBConfig;
|
||||||
|
import org.kar.archidata.util.ConfigBaseVariable;
|
||||||
|
|
||||||
|
public class GlobalConfiguration {
|
||||||
|
public static DBConfig dbConfig = null;;
|
||||||
|
|
||||||
|
static {
|
||||||
|
dbConfig = new DBConfig(ConfigBaseVariable.getDBHost(),
|
||||||
|
Integer.parseInt(ConfigBaseVariable.getDBPort()),
|
||||||
|
ConfigBaseVariable.getDBLogin(),
|
||||||
|
ConfigBaseVariable.getDBPassword(),
|
||||||
|
ConfigBaseVariable.getDBName());
|
||||||
|
}
|
||||||
|
}
|
1205
src/org/kar/archidata/SqlWrapper.java
Normal file
1205
src/org/kar/archidata/SqlWrapper.java
Normal file
File diff suppressed because it is too large
Load Diff
34
src/org/kar/archidata/UpdateJwtPublicKey.java
Normal file
34
src/org/kar/archidata/UpdateJwtPublicKey.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package org.kar.archidata;
|
||||||
|
|
||||||
|
import org.kar.archidata.util.ConfigBaseVariable;
|
||||||
|
import org.kar.archidata.util.JWTWrapper;
|
||||||
|
|
||||||
|
public class UpdateJwtPublicKey extends Thread {
|
||||||
|
boolean kill = false;
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000*20, 0);
|
||||||
|
} catch (InterruptedException e2) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e2.printStackTrace();
|
||||||
|
}
|
||||||
|
while (this.kill == false) {
|
||||||
|
// need to uppgrade when server call us...
|
||||||
|
try {
|
||||||
|
JWTWrapper.initLocalTokenRemote(ConfigBaseVariable.getSSOAddress(), "archidata");
|
||||||
|
} catch (Exception e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
System.out.println("Can not retreive the basic tocken");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000*60*5, 0);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void kill() {
|
||||||
|
this.kill = true;
|
||||||
|
}
|
||||||
|
}
|
133
src/org/kar/archidata/UserDB.java
Executable file
133
src/org/kar/archidata/UserDB.java
Executable file
@ -0,0 +1,133 @@
|
|||||||
|
package org.kar.archidata;
|
||||||
|
|
||||||
|
import org.kar.archidata.db.DBEntry;
|
||||||
|
import org.kar.archidata.model.User;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class UserDB {
|
||||||
|
|
||||||
|
public UserDB() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static User getUsers(long userId) throws Exception {
|
||||||
|
return SqlWrapper.get(User.class, userId);
|
||||||
|
/*
|
||||||
|
DBEntry entry = new DBEntry(WebLauncher.dbConfig);
|
||||||
|
String query = "SELECT * FROM user WHERE id = ?";
|
||||||
|
try {
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(query);
|
||||||
|
ps.setLong(1, userId);
|
||||||
|
ResultSet rs = ps.executeQuery();
|
||||||
|
if (rs.next()) {
|
||||||
|
User out = new User(rs);
|
||||||
|
entry.disconnect();
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
entry.disconnect();
|
||||||
|
return null;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static User getUserOrCreate(long userId, String userLogin) throws Exception {
|
||||||
|
User user = getUsers(userId);
|
||||||
|
if (user != null) {
|
||||||
|
/*
|
||||||
|
boolean blocked = false;
|
||||||
|
boolean removed = false;
|
||||||
|
if (user.email != userOAuth.email || user.login != userOAuth.login || user.blocked != blocked || user.removed != removed) {
|
||||||
|
updateUsersInfoFromOAuth(userOAuth.id, userOAuth.email, userOAuth.login, blocked, removed);
|
||||||
|
} else {
|
||||||
|
updateUsersConnectionTime(userOAuth.id);
|
||||||
|
}
|
||||||
|
return getUsers(userOAuth.id);
|
||||||
|
*/
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
createUsersInfoFromOAuth(userId, userLogin);
|
||||||
|
return getUsers(userId);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
private static void updateUsersConnectionTime(long userId) {
|
||||||
|
DBEntry entry = new DBEntry(WebLauncher.dbConfig);
|
||||||
|
String query = "UPDATE `user` SET `lastConnection`=now(3) WHERE `id` = ?";
|
||||||
|
try {
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(query);
|
||||||
|
ps.setLong(1, userId);
|
||||||
|
ps.executeUpdate();
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
entry.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateUsersInfoFromOAuth(long userId, String email, String login, boolean blocked, boolean removed) {
|
||||||
|
DBEntry entry = new DBEntry(WebLauncher.dbConfig);
|
||||||
|
String query = "UPDATE `user` SET `login`=?, `email`=?, `lastConnection`=now(3), `blocked`=?, `removed`=? WHERE id = ?";
|
||||||
|
try {
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(query);
|
||||||
|
ps.setString(1, login);
|
||||||
|
ps.setString(2, email);
|
||||||
|
ps.setString(3, blocked ? "TRUE" : "FALSE");
|
||||||
|
ps.setString(4, removed ? "TRUE" : "FALSE");
|
||||||
|
ps.setLong(5, userId);
|
||||||
|
ps.executeUpdate();
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
entry.disconnect();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static void createUsersInfoFromOAuth(long userId, String login) {
|
||||||
|
DBEntry entry = new DBEntry(GlobalConfiguration.dbConfig);
|
||||||
|
String query = "INSERT INTO `user` (`id`, `login`, `lastConnection`, `admin`, `blocked`, `removed`) VALUE (?,?,now(3),'0','0','0')";
|
||||||
|
try {
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(query);
|
||||||
|
ps.setLong(1, userId);
|
||||||
|
ps.setString(2, login);
|
||||||
|
ps.executeUpdate();
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
entry.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
15
src/org/kar/archidata/annotation/PermitTokenInURI.java
Normal file
15
src/org/kar/archidata/annotation/PermitTokenInURI.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import javax.ws.rs.NameBinding;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
import static java.lang.annotation.ElementType.METHOD;
|
||||||
|
import static java.lang.annotation.ElementType.TYPE;
|
||||||
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
|
|
||||||
|
@NameBinding
|
||||||
|
@Retention(RUNTIME)
|
||||||
|
@Target({METHOD})
|
||||||
|
public @interface PermitTokenInURI {
|
||||||
|
}
|
12
src/org/kar/archidata/annotation/SQLAutoIncrement.java
Normal file
12
src/org/kar/archidata/annotation/SQLAutoIncrement.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLAutoIncrement {
|
||||||
|
|
||||||
|
}
|
14
src/org/kar/archidata/annotation/SQLComment.java
Normal file
14
src/org/kar/archidata/annotation/SQLComment.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target({ ElementType.TYPE, ElementType.FIELD })
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLComment {
|
||||||
|
|
||||||
|
String value();
|
||||||
|
|
||||||
|
}
|
12
src/org/kar/archidata/annotation/SQLCreateTime.java
Normal file
12
src/org/kar/archidata/annotation/SQLCreateTime.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLCreateTime {
|
||||||
|
|
||||||
|
}
|
14
src/org/kar/archidata/annotation/SQLDefault.java
Normal file
14
src/org/kar/archidata/annotation/SQLDefault.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target({ ElementType.TYPE, ElementType.FIELD })
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLDefault {
|
||||||
|
|
||||||
|
String value();
|
||||||
|
|
||||||
|
}
|
12
src/org/kar/archidata/annotation/SQLIfNotExists.java
Normal file
12
src/org/kar/archidata/annotation/SQLIfNotExists.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLIfNotExists {
|
||||||
|
|
||||||
|
}
|
12
src/org/kar/archidata/annotation/SQLLimitSize.java
Normal file
12
src/org/kar/archidata/annotation/SQLLimitSize.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLLimitSize {
|
||||||
|
int value();
|
||||||
|
}
|
12
src/org/kar/archidata/annotation/SQLNotNull.java
Normal file
12
src/org/kar/archidata/annotation/SQLNotNull.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLNotNull {
|
||||||
|
|
||||||
|
}
|
12
src/org/kar/archidata/annotation/SQLNotRead.java
Normal file
12
src/org/kar/archidata/annotation/SQLNotRead.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLNotRead {
|
||||||
|
|
||||||
|
}
|
12
src/org/kar/archidata/annotation/SQLPrimaryKey.java
Normal file
12
src/org/kar/archidata/annotation/SQLPrimaryKey.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLPrimaryKey {
|
||||||
|
|
||||||
|
}
|
20
src/org/kar/archidata/annotation/SQLTableLinkGeneric.java
Normal file
20
src/org/kar/archidata/annotation/SQLTableLinkGeneric.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLTableLinkGeneric {
|
||||||
|
public enum ModelLink {
|
||||||
|
NONE,
|
||||||
|
INTERNAL,
|
||||||
|
EXTERNAL
|
||||||
|
};
|
||||||
|
ModelLink value() default ModelLink.EXTERNAL;
|
||||||
|
}
|
14
src/org/kar/archidata/annotation/SQLTableName.java
Normal file
14
src/org/kar/archidata/annotation/SQLTableName.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLTableName {
|
||||||
|
|
||||||
|
String value();
|
||||||
|
|
||||||
|
}
|
12
src/org/kar/archidata/annotation/SQLUpdateTime.java
Normal file
12
src/org/kar/archidata/annotation/SQLUpdateTime.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface SQLUpdateTime {
|
||||||
|
|
||||||
|
}
|
104
src/org/kar/archidata/api/FrontGeneric.java
Normal file
104
src/org/kar/archidata/api/FrontGeneric.java
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
package org.kar.archidata.api;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.security.PermitAll;
|
||||||
|
import javax.ws.rs.*;
|
||||||
|
import javax.ws.rs.core.CacheControl;
|
||||||
|
import javax.ws.rs.core.PathSegment;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import javax.ws.rs.core.Response.ResponseBuilder;
|
||||||
|
|
||||||
|
|
||||||
|
public class FrontGeneric {
|
||||||
|
|
||||||
|
protected String baseFrontFolder = "/data/front";
|
||||||
|
|
||||||
|
private String getExtension(String filename) {
|
||||||
|
if (filename.contains(".")) {
|
||||||
|
return filename.substring(filename.lastIndexOf(".") + 1);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
private Response retrive(String fileName) throws Exception {
|
||||||
|
String filePathName = baseFrontFolder + File.separator + fileName;
|
||||||
|
String extention = getExtension(filePathName);
|
||||||
|
String mineType = null;
|
||||||
|
System.out.println("try retrive : '" + filePathName + "' '" + extention + "'");
|
||||||
|
if (extention.length() !=0 && extention.length() <= 5) {
|
||||||
|
if (extention.equalsIgnoreCase("jpg") || extention.equalsIgnoreCase("jpeg")) {
|
||||||
|
mineType = "image/jpeg";
|
||||||
|
} else if (extention.equalsIgnoreCase("gif")) {
|
||||||
|
mineType = "image/gif";
|
||||||
|
} else if (extention.equalsIgnoreCase("png")) {
|
||||||
|
mineType = "image/png";
|
||||||
|
} else if (extention.equalsIgnoreCase("svg")) {
|
||||||
|
mineType = "image/svg+xml";
|
||||||
|
} else if (extention.equalsIgnoreCase("webp")) {
|
||||||
|
mineType = "image/webp";
|
||||||
|
} else if (extention.equalsIgnoreCase("js")) {
|
||||||
|
mineType = "application/javascript";
|
||||||
|
} else if (extention.equalsIgnoreCase("json")) {
|
||||||
|
mineType = "application/json";
|
||||||
|
} else if (extention.equalsIgnoreCase("ico")) {
|
||||||
|
mineType = "image/x-icon";
|
||||||
|
} else if (extention.equalsIgnoreCase("html")) {
|
||||||
|
mineType = "text/html";
|
||||||
|
} else if (extention.equalsIgnoreCase("css")) {
|
||||||
|
mineType = "text/css";
|
||||||
|
} else {
|
||||||
|
return Response.status(403).
|
||||||
|
entity("Not supported model: '" + fileName + "'").
|
||||||
|
type("text/plain").
|
||||||
|
build();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mineType = "text/html";
|
||||||
|
filePathName = baseFrontFolder + File.separator + "index.html";
|
||||||
|
}
|
||||||
|
System.out.println(" ==> '" + filePathName + "'");
|
||||||
|
// reads input image
|
||||||
|
File download = new File(filePathName);
|
||||||
|
if (!download.exists()) {
|
||||||
|
return Response.status(404).
|
||||||
|
entity("Not Found: '" + fileName + "' extension='" + extention + "'").
|
||||||
|
type("text/plain").
|
||||||
|
build();
|
||||||
|
}
|
||||||
|
ResponseBuilder response = Response.ok((Object)download);
|
||||||
|
// use this if I want to download the file:
|
||||||
|
//response.header("Content-Disposition", "attachment; filename=" + fileName);
|
||||||
|
CacheControl cc = new CacheControl();
|
||||||
|
cc.setMaxAge(60);
|
||||||
|
cc.setNoCache(false);
|
||||||
|
response.cacheControl(cc);
|
||||||
|
response.type(mineType);
|
||||||
|
|
||||||
|
return response.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@PermitAll()
|
||||||
|
//@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||||
|
//@CacheMaxAge(time = 1, unit = TimeUnit.DAYS)
|
||||||
|
public Response retrive0() throws Exception {
|
||||||
|
return retrive("index.html");
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("{any: .*}")
|
||||||
|
@PermitAll()
|
||||||
|
//@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||||
|
//@CacheMaxAge(time = 10, unit = TimeUnit.DAYS)
|
||||||
|
public Response retrive1(@PathParam("any") List<PathSegment> segments) throws Exception {
|
||||||
|
String filename = "";
|
||||||
|
for (PathSegment elem: segments) {
|
||||||
|
if (!filename.isEmpty()) {
|
||||||
|
filename += File.separator;
|
||||||
|
}
|
||||||
|
filename += elem.getPath();
|
||||||
|
}
|
||||||
|
return retrive(filename);
|
||||||
|
}
|
||||||
|
}
|
60
src/org/kar/archidata/db/DBConfig.java
Normal file
60
src/org/kar/archidata/db/DBConfig.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package org.kar.archidata.db;
|
||||||
|
|
||||||
|
public class DBConfig {
|
||||||
|
private final String hostname;
|
||||||
|
private final int port;
|
||||||
|
private final String login;
|
||||||
|
private final String password;
|
||||||
|
private final String dbName;
|
||||||
|
|
||||||
|
public DBConfig(String hostname, Integer port, String login, String password, String dbName) {
|
||||||
|
if (hostname == null) {
|
||||||
|
this.hostname = "localhost";
|
||||||
|
} else {
|
||||||
|
this.hostname = hostname;
|
||||||
|
}
|
||||||
|
if (port == null) {
|
||||||
|
this.port = 3306;
|
||||||
|
} else {
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
this.login = login;
|
||||||
|
this.password = password;
|
||||||
|
this.dbName = dbName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "DBConfig{" +
|
||||||
|
"hostname='" + hostname + '\'' +
|
||||||
|
", port=" + port +
|
||||||
|
", login='" + login + '\'' +
|
||||||
|
", password='" + password + '\'' +
|
||||||
|
", dbName='" + dbName + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHostname() {
|
||||||
|
return hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPort() {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLogin() {
|
||||||
|
return login;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDbName() {
|
||||||
|
return dbName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return "jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.dbName + "?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC";
|
||||||
|
}
|
||||||
|
}
|
45
src/org/kar/archidata/db/DBEntry.java
Normal file
45
src/org/kar/archidata/db/DBEntry.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package org.kar.archidata.db;
|
||||||
|
|
||||||
|
import org.kar.archidata.model.User;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
public class DBEntry {
|
||||||
|
public DBConfig config;
|
||||||
|
public Connection connection;
|
||||||
|
|
||||||
|
public DBEntry(DBConfig config) {
|
||||||
|
this.config = config;
|
||||||
|
connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void connect() {
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(config.getUrl(), config.getLogin(), config.getPassword());
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disconnect() {
|
||||||
|
try {
|
||||||
|
//connection.commit();
|
||||||
|
connection.close();
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
public void test() throws SQLException {
|
||||||
|
String query = "SELECT * FROM user";
|
||||||
|
Statement st = connection.createStatement();
|
||||||
|
ResultSet rs = st.executeQuery(query);
|
||||||
|
System.out.println("List of user:");
|
||||||
|
if (rs.next()) {
|
||||||
|
User user = new User(rs);
|
||||||
|
System.out.println(" - " + user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
198
src/org/kar/archidata/filter/AuthenticationFilter.java
Normal file
198
src/org/kar/archidata/filter/AuthenticationFilter.java
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
package org.kar.archidata.filter;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import javax.annotation.security.DenyAll;
|
||||||
|
import javax.annotation.security.PermitAll;
|
||||||
|
import javax.annotation.security.RolesAllowed;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.annotation.Priority;
|
||||||
|
import javax.ws.rs.Priorities;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
|
import javax.ws.rs.container.ContainerRequestFilter;
|
||||||
|
import javax.ws.rs.container.ResourceInfo;
|
||||||
|
import javax.ws.rs.core.Context;
|
||||||
|
import javax.ws.rs.core.HttpHeaders;
|
||||||
|
import javax.ws.rs.core.MultivaluedMap;
|
||||||
|
import javax.ws.rs.core.PathSegment;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
|
||||||
|
import org.kar.archidata.UserDB;
|
||||||
|
import org.kar.archidata.annotation.PermitTokenInURI;
|
||||||
|
import org.kar.archidata.model.User;
|
||||||
|
import org.kar.archidata.model.UserSmall;
|
||||||
|
import org.kar.archidata.util.JWTWrapper;
|
||||||
|
|
||||||
|
import com.nimbusds.jwt.JWTClaimsSet;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
// https://stackoverflow.com/questions/26777083/best-practice-for-rest-token-based-authentication-with-jax-rs-and-jersey
|
||||||
|
// https://stackoverflow.com/questions/26777083/best-practice-for-rest-token-based-authentication-with-jax-rs-and-jersey/45814178#45814178
|
||||||
|
// https://stackoverflow.com/questions/32817210/how-to-access-jersey-resource-secured-by-rolesallowed
|
||||||
|
|
||||||
|
//@PreMatching
|
||||||
|
@Provider
|
||||||
|
@Priority(Priorities.AUTHENTICATION)
|
||||||
|
public class AuthenticationFilter implements ContainerRequestFilter {
|
||||||
|
@Context
|
||||||
|
private ResourceInfo resourceInfo;
|
||||||
|
|
||||||
|
private static final String AUTHENTICATION_SCHEME = "Yota";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void filter(ContainerRequestContext requestContext) throws IOException {
|
||||||
|
/*
|
||||||
|
System.out.println("-----------------------------------------------------");
|
||||||
|
System.out.println("---- Check if have authorization ----");
|
||||||
|
System.out.println("-----------------------------------------------------");
|
||||||
|
System.out.println(" for:" + requestContext.getUriInfo().getPath());
|
||||||
|
*/
|
||||||
|
Method method = resourceInfo.getResourceMethod();
|
||||||
|
// Access denied for all
|
||||||
|
if(method.isAnnotationPresent(DenyAll.class)) {
|
||||||
|
System.out.println(" ==> deny all " + requestContext.getUriInfo().getPath());
|
||||||
|
requestContext.abortWith(Response.status(Response.Status.FORBIDDEN).entity("Access blocked !!!").build());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Access allowed for all
|
||||||
|
if( method.isAnnotationPresent(PermitAll.class)) {
|
||||||
|
System.out.println(" ==> permit all " + requestContext.getUriInfo().getPath());
|
||||||
|
// no control ...
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// this is a security guard, all the API must define their access level:
|
||||||
|
if(!method.isAnnotationPresent(RolesAllowed.class)) {
|
||||||
|
System.out.println(" ==> missin @RolesAllowed " + requestContext.getUriInfo().getPath());
|
||||||
|
requestContext.abortWith(Response.status(Response.Status.FORBIDDEN).entity("Access ILLEGAL !!!").build());
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the Authorization header from the request
|
||||||
|
String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
|
||||||
|
//System.out.println("authorizationHeader: " + authorizationHeader);
|
||||||
|
if(authorizationHeader == null && method.isAnnotationPresent(PermitTokenInURI.class)) {
|
||||||
|
MultivaluedMap<String, String> quaryparam = requestContext.getUriInfo().getQueryParameters();
|
||||||
|
for (Entry<String, List<String>> item: quaryparam.entrySet()) {
|
||||||
|
if (item.getKey().equals(HttpHeaders.AUTHORIZATION)) {
|
||||||
|
if (!item.getValue().isEmpty()) {
|
||||||
|
authorizationHeader = item.getValue().get(0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//System.out.println("authorizationHeader: " + authorizationHeader);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
System.out.println(" -------------------------------");
|
||||||
|
// this get the parameters inside the pre-parsed element in the request ex: @Path("thumbnail/{id}") generate a map with "id"
|
||||||
|
MultivaluedMap<String, String> pathparam = requestContext.getUriInfo().getPathParameters();
|
||||||
|
for (Entry<String, List<String>> item: pathparam.entrySet()) {
|
||||||
|
System.out.println(" param: " + item.getKey() + " ==>" + item.getValue());
|
||||||
|
}
|
||||||
|
System.out.println(" -------------------------------");
|
||||||
|
// need to add "@QueryParam("p") String token, " in the model
|
||||||
|
//MultivaluedMap<String, String> quaryparam = requestContext.getUriInfo().getQueryParameters();
|
||||||
|
for (Entry<String, List<String>> item: quaryparam.entrySet()) {
|
||||||
|
System.out.println(" query: " + item.getKey() + " ==>" + item.getValue());
|
||||||
|
}
|
||||||
|
System.out.println(" -------------------------------");
|
||||||
|
List<PathSegment> segments = requestContext.getUriInfo().getPathSegments();
|
||||||
|
for (final PathSegment item: segments) {
|
||||||
|
System.out.println(" query: " + item.getPath() + " ==>" + item.getMatrixParameters());
|
||||||
|
}
|
||||||
|
System.out.println(" -------------------------------");
|
||||||
|
MultivaluedMap<String, String> headers = requestContext.getHeaders();
|
||||||
|
for (Entry<String, List<String>> item: headers.entrySet()) {
|
||||||
|
System.out.println(" headers: " + item.getKey() + " ==>" + item.getValue());
|
||||||
|
}
|
||||||
|
System.out.println(" -------------------------------");
|
||||||
|
*/
|
||||||
|
// Validate the Authorization header data Model "Yota userId:token"
|
||||||
|
if (!isTokenBasedAuthentication(authorizationHeader)) {
|
||||||
|
System.out.println("REJECTED unauthorized: " + requestContext.getUriInfo().getPath());
|
||||||
|
abortWithUnauthorized(requestContext);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// check JWT token (basic:)
|
||||||
|
|
||||||
|
// Extract the token from the Authorization header (Remove "Yota ")
|
||||||
|
String token = authorizationHeader.substring(AUTHENTICATION_SCHEME.length()).trim();
|
||||||
|
System.out.println("token: " + token);
|
||||||
|
|
||||||
|
|
||||||
|
User user = null;
|
||||||
|
try {
|
||||||
|
user = validateToken(token);
|
||||||
|
} catch (Exception e) {
|
||||||
|
abortWithUnauthorized(requestContext);
|
||||||
|
}
|
||||||
|
if (user == null) {
|
||||||
|
abortWithUnauthorized(requestContext);
|
||||||
|
}
|
||||||
|
// create the security context model:
|
||||||
|
String scheme = requestContext.getUriInfo().getRequestUri().getScheme();
|
||||||
|
MySecurityContext userContext = new MySecurityContext(user, scheme);
|
||||||
|
// retrieve the allowed right:
|
||||||
|
RolesAllowed rolesAnnotation = method.getAnnotation(RolesAllowed.class);
|
||||||
|
List<String> roles = Arrays.asList(rolesAnnotation.value());
|
||||||
|
// check if the user have the right:
|
||||||
|
boolean haveRight = false;
|
||||||
|
for (String role : roles) {
|
||||||
|
if (userContext.isUserInRole(role)) {
|
||||||
|
haveRight = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Is user valid?
|
||||||
|
if( ! haveRight) {
|
||||||
|
System.out.println("REJECTED not enought right : " + requestContext.getUriInfo().getPath() + " require: " + roles);
|
||||||
|
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity("Not enought RIGHT !!!").build());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
requestContext.setSecurityContext(userContext);
|
||||||
|
System.out.println("Get local user : " + user);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isTokenBasedAuthentication(String authorizationHeader) {
|
||||||
|
// Check if the Authorization header is valid
|
||||||
|
// It must not be null and must be prefixed with "Bearer" plus a whitespace
|
||||||
|
// The authentication scheme comparison must be case-insensitive
|
||||||
|
return authorizationHeader != null && authorizationHeader.toLowerCase().startsWith(AUTHENTICATION_SCHEME.toLowerCase() + " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void abortWithUnauthorized(ContainerRequestContext requestContext) {
|
||||||
|
|
||||||
|
// Abort the filter chain with a 401 status code response
|
||||||
|
// The WWW-Authenticate header is sent along with the response
|
||||||
|
requestContext.abortWith(
|
||||||
|
Response.status(Response.Status.UNAUTHORIZED)
|
||||||
|
.header(HttpHeaders.WWW_AUTHENTICATE,
|
||||||
|
AUTHENTICATION_SCHEME + " base64(HEADER).base64(CONTENT).base64(KEY)")
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
private User validateToken(String authorization) throws Exception {
|
||||||
|
System.out.println(" validate token : " + authorization);
|
||||||
|
JWTClaimsSet ret = JWTWrapper.validateToken(authorization, "KarAuth");
|
||||||
|
// check the token is valid !!! (signed and coherent issuer...
|
||||||
|
if (ret == null) {
|
||||||
|
System.out.println("The token is not valid: '" + authorization + "'");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// check userID
|
||||||
|
String userUID = ret.getSubject();
|
||||||
|
long id = Long.parseLong(userUID);
|
||||||
|
System.out.println("request user: '" + userUID + "'");
|
||||||
|
return UserDB.getUserOrCreate(id, (String)ret.getClaim("login") );
|
||||||
|
}
|
||||||
|
}
|
25
src/org/kar/archidata/filter/CORSFilter.java
Normal file
25
src/org/kar/archidata/filter/CORSFilter.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package org.kar.archidata.filter;
|
||||||
|
|
||||||
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
|
import javax.ws.rs.container.ContainerResponseContext;
|
||||||
|
import javax.ws.rs.container.ContainerResponseFilter;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
||||||
|
@Provider
|
||||||
|
public class CORSFilter implements ContainerResponseFilter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void filter(ContainerRequestContext request,
|
||||||
|
ContainerResponseContext response) throws IOException {
|
||||||
|
//System.err.println("filter cors ..." + request.toString());
|
||||||
|
|
||||||
|
response.getHeaders().add("Access-Control-Allow-Origin", "*");
|
||||||
|
response.getHeaders().add("Access-Control-Allow-Headers", "*");
|
||||||
|
// "Origin, content-type, Content-type, Accept, authorization, mime-type, filename");
|
||||||
|
response.getHeaders().add("Access-Control-Allow-Credentials", "true");
|
||||||
|
response.getHeaders().add("Access-Control-Allow-Methods",
|
||||||
|
"GET, POST, PUT, DELETE, OPTIONS, HEAD");
|
||||||
|
}
|
||||||
|
}
|
22
src/org/kar/archidata/filter/GenericContext.java
Normal file
22
src/org/kar/archidata/filter/GenericContext.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package org.kar.archidata.filter;
|
||||||
|
|
||||||
|
import org.kar.archidata.model.User;
|
||||||
|
|
||||||
|
import java.security.Principal;
|
||||||
|
|
||||||
|
public class GenericContext implements Principal {
|
||||||
|
|
||||||
|
public User user;
|
||||||
|
|
||||||
|
public GenericContext(User user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
if (user == null) {
|
||||||
|
return "???";
|
||||||
|
}
|
||||||
|
return user.login;
|
||||||
|
}
|
||||||
|
}
|
47
src/org/kar/archidata/filter/MySecurityContext.java
Normal file
47
src/org/kar/archidata/filter/MySecurityContext.java
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package org.kar.archidata.filter;
|
||||||
|
|
||||||
|
|
||||||
|
import org.kar.archidata.model.User;
|
||||||
|
|
||||||
|
import javax.ws.rs.core.SecurityContext;
|
||||||
|
import java.security.Principal;
|
||||||
|
|
||||||
|
// https://simplapi.wordpress.com/2015/09/19/jersey-jax-rs-securitycontext-in-action/
|
||||||
|
class MySecurityContext implements SecurityContext {
|
||||||
|
|
||||||
|
private final GenericContext contextPrincipale;
|
||||||
|
private final String sheme;
|
||||||
|
|
||||||
|
public MySecurityContext(User user, String sheme) {
|
||||||
|
this.contextPrincipale = new GenericContext(user);
|
||||||
|
this.sheme = sheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Principal getUserPrincipal() {
|
||||||
|
return contextPrincipale;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isUserInRole(String role) {
|
||||||
|
if (role.contentEquals("ADMIN")) {
|
||||||
|
return contextPrincipale.user.admin == true;
|
||||||
|
}
|
||||||
|
if (role.contentEquals("USER")) {
|
||||||
|
// if not an admin, this is a user...
|
||||||
|
return true; //contextPrincipale.user.admin == false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSecure() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAuthenticationScheme() {
|
||||||
|
return "Yota";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
21
src/org/kar/archidata/filter/OptionFilter.java
Normal file
21
src/org/kar/archidata/filter/OptionFilter.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package org.kar.archidata.filter;
|
||||||
|
|
||||||
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
|
import javax.ws.rs.container.ContainerRequestFilter;
|
||||||
|
import javax.ws.rs.container.PreMatching;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Provider
|
||||||
|
@PreMatching
|
||||||
|
public class OptionFilter implements ContainerRequestFilter {
|
||||||
|
@Override
|
||||||
|
public void filter(ContainerRequestContext requestContext) throws IOException {
|
||||||
|
if (requestContext.getMethod().contentEquals("OPTIONS")) {
|
||||||
|
requestContext.abortWith(Response.status(Response.Status.NO_CONTENT).build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
60
src/org/kar/archidata/internal/Log.java
Normal file
60
src/org/kar/archidata/internal/Log.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package org.kar.archidata.internal;
|
||||||
|
|
||||||
|
//import io.scenarium.logger.LogLevel;
|
||||||
|
//import io.scenarium.logger.Logger;
|
||||||
|
|
||||||
|
public class Log {
|
||||||
|
// private static final String LIB_NAME = "logger";
|
||||||
|
// private static final String LIB_NAME_DRAW = Logger.getDrawableName(LIB_NAME);
|
||||||
|
// private static final boolean PRINT_CRITICAL = Logger.getNeedPrint(LIB_NAME, LogLevel.CRITICAL);
|
||||||
|
// private static final boolean PRINT_ERROR = Logger.getNeedPrint(LIB_NAME, LogLevel.ERROR);
|
||||||
|
// private static final boolean PRINT_WARNING = Logger.getNeedPrint(LIB_NAME, LogLevel.WARNING);
|
||||||
|
// private static final boolean PRINT_INFO = Logger.getNeedPrint(LIB_NAME, LogLevel.INFO);
|
||||||
|
// private static final boolean PRINT_DEBUG = Logger.getNeedPrint(LIB_NAME, LogLevel.DEBUG);
|
||||||
|
// private static final boolean PRINT_VERBOSE = Logger.getNeedPrint(LIB_NAME, LogLevel.VERBOSE);
|
||||||
|
// private static final boolean PRINT_TODO = Logger.getNeedPrint(LIB_NAME, LogLevel.TODO);
|
||||||
|
// private static final boolean PRINT_PRINT = Logger.getNeedPrint(LIB_NAME, LogLevel.PRINT);
|
||||||
|
//
|
||||||
|
// private Log() {}
|
||||||
|
//
|
||||||
|
// public static void print(String data) {
|
||||||
|
// if (PRINT_PRINT)
|
||||||
|
// Logger.print(LIB_NAME_DRAW, data);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void todo(String data) {
|
||||||
|
// if (PRINT_TODO)
|
||||||
|
// Logger.todo(LIB_NAME_DRAW, data);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void critical(String data) {
|
||||||
|
// if (PRINT_CRITICAL)
|
||||||
|
// Logger.critical(LIB_NAME_DRAW, data);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void error(String data) {
|
||||||
|
// if (PRINT_ERROR)
|
||||||
|
// Logger.error(LIB_NAME_DRAW, data);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void warning(String data) {
|
||||||
|
// if (PRINT_WARNING)
|
||||||
|
// Logger.warning(LIB_NAME_DRAW, data);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void info(String data) {
|
||||||
|
// if (PRINT_INFO)
|
||||||
|
// Logger.info(LIB_NAME_DRAW, data);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void debug(String data) {
|
||||||
|
// if (PRINT_DEBUG)
|
||||||
|
// Logger.debug(LIB_NAME_DRAW, data);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static void verbose(String data) {
|
||||||
|
// if (PRINT_VERBOSE)
|
||||||
|
// Logger.verbose(LIB_NAME_DRAW, data);
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
32
src/org/kar/archidata/model/Data.java
Normal file
32
src/org/kar/archidata/model/Data.java
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package org.kar.archidata.model;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class Data {
|
||||||
|
public Long id;
|
||||||
|
public boolean deleted;
|
||||||
|
public String sha512;
|
||||||
|
public String mimeType;
|
||||||
|
public Long size;
|
||||||
|
|
||||||
|
public Data() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Data(ResultSet rs) {
|
||||||
|
int iii = 1;
|
||||||
|
try {
|
||||||
|
this.id = rs.getLong(iii++);
|
||||||
|
this.deleted = rs.getBoolean(iii++);
|
||||||
|
this.sha512 = rs.getString(iii++);
|
||||||
|
this.mimeType = rs.getString(iii++);
|
||||||
|
this.size = rs.getLong(iii++);
|
||||||
|
if (rs.wasNull()) {
|
||||||
|
this.size = null;
|
||||||
|
}
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
src/org/kar/archidata/model/GenericTable.java
Normal file
35
src/org/kar/archidata/model/GenericTable.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package org.kar.archidata.model;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
|
import org.kar.archidata.annotation.SQLAutoIncrement;
|
||||||
|
import org.kar.archidata.annotation.SQLComment;
|
||||||
|
import org.kar.archidata.annotation.SQLCreateTime;
|
||||||
|
import org.kar.archidata.annotation.SQLDefault;
|
||||||
|
import org.kar.archidata.annotation.SQLNotNull;
|
||||||
|
import org.kar.archidata.annotation.SQLNotRead;
|
||||||
|
import org.kar.archidata.annotation.SQLPrimaryKey;
|
||||||
|
import org.kar.archidata.annotation.SQLUpdateTime;
|
||||||
|
|
||||||
|
public class GenericTable {
|
||||||
|
@SQLAutoIncrement // Add AUTO_INCREMENT modifier
|
||||||
|
@SQLPrimaryKey // Create a PRIMARY KEY based on this field
|
||||||
|
@SQLNotNull
|
||||||
|
@SQLComment("Primary key of the base")
|
||||||
|
public Long id = null;
|
||||||
|
@SQLNotRead
|
||||||
|
@SQLNotNull
|
||||||
|
@SQLDefault("'0'")
|
||||||
|
@SQLComment("When delete, they are not removed, they are just set in a deleted state")
|
||||||
|
public Boolean deleted = null;
|
||||||
|
@SQLNotRead
|
||||||
|
@SQLCreateTime
|
||||||
|
@SQLNotNull
|
||||||
|
@SQLComment("Create time of the object")
|
||||||
|
public Timestamp create_date = null;
|
||||||
|
@SQLNotRead
|
||||||
|
@SQLUpdateTime
|
||||||
|
@SQLNotNull
|
||||||
|
@SQLComment("When update the object")
|
||||||
|
public Timestamp modify_date = null;
|
||||||
|
}
|
12
src/org/kar/archidata/model/State.java
Normal file
12
src/org/kar/archidata/model/State.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package org.kar.archidata.model;
|
||||||
|
|
||||||
|
public enum State {
|
||||||
|
// User has remove his account
|
||||||
|
REMOVED,
|
||||||
|
// User has been blocked his account
|
||||||
|
BLOCKED,
|
||||||
|
// generic user
|
||||||
|
USER,
|
||||||
|
// Administrator
|
||||||
|
ADMIN
|
||||||
|
}
|
57
src/org/kar/archidata/model/Token.java
Normal file
57
src/org/kar/archidata/model/Token.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package org.kar.archidata.model;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
/*
|
||||||
|
CREATE TABLE `token` (
|
||||||
|
`id` bigint NOT NULL COMMENT 'Unique ID of the TOKEN' AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`userId` bigint NOT NULL COMMENT 'Unique ID of the user',
|
||||||
|
`token` varchar(128) COLLATE 'latin1_bin' NOT NULL COMMENT 'Token (can be not unique)',
|
||||||
|
`createTime` datetime NOT NULL COMMENT 'Time the token has been created',
|
||||||
|
`endValidityTime` datetime NOT NULL COMMENT 'Time of the token end validity'
|
||||||
|
) AUTO_INCREMENT=10;
|
||||||
|
|
||||||
|
*/
|
||||||
|
public class Token {
|
||||||
|
public Long id;
|
||||||
|
public Long userId;
|
||||||
|
public String token;
|
||||||
|
public String createTime;
|
||||||
|
public String endValidityTime;
|
||||||
|
|
||||||
|
public Token() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Token(long id, long userId, String token, String createTime, String endValidityTime) {
|
||||||
|
this.id = id;
|
||||||
|
this.userId = userId;
|
||||||
|
this.token = token;
|
||||||
|
this.createTime = createTime;
|
||||||
|
this.endValidityTime = endValidityTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Token(ResultSet rs) {
|
||||||
|
int iii = 1;
|
||||||
|
try {
|
||||||
|
this.id = rs.getLong(iii++);
|
||||||
|
this.userId = rs.getLong(iii++);
|
||||||
|
this.token = rs.getString(iii++);
|
||||||
|
this.createTime = rs.getString(iii++);
|
||||||
|
this.endValidityTime = rs.getString(iii++);
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Token{" +
|
||||||
|
"id=" + id +
|
||||||
|
", userId=" + userId +
|
||||||
|
", token='" + token + '\'' +
|
||||||
|
", createTime=" + createTime +
|
||||||
|
", endValidityTime=" + endValidityTime +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
53
src/org/kar/archidata/model/User.java
Normal file
53
src/org/kar/archidata/model/User.java
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
package org.kar.archidata.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`id` bigint NOT NULL COMMENT 'table ID' AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`login` varchar(128) COLLATE 'utf8_general_ci' NOT NULL COMMENT 'login of the user',
|
||||||
|
`email` varchar(512) COLLATE 'utf8_general_ci' NOT NULL COMMENT 'email of the user',
|
||||||
|
`lastConnection` datetime NOT NULL COMMENT 'last connection time',
|
||||||
|
`admin` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE',
|
||||||
|
`blocked` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE',
|
||||||
|
`removed` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE',
|
||||||
|
`avatar` bigint DEFAULT NULL,
|
||||||
|
) AUTO_INCREMENT=10;
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
|
import org.kar.archidata.annotation.SQLAutoIncrement;
|
||||||
|
import org.kar.archidata.annotation.SQLComment;
|
||||||
|
import org.kar.archidata.annotation.SQLDefault;
|
||||||
|
import org.kar.archidata.annotation.SQLIfNotExists;
|
||||||
|
import org.kar.archidata.annotation.SQLLimitSize;
|
||||||
|
import org.kar.archidata.annotation.SQLNotNull;
|
||||||
|
import org.kar.archidata.annotation.SQLPrimaryKey;
|
||||||
|
import org.kar.archidata.annotation.SQLTableName;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
|
|
||||||
|
@SQLTableName ("user")
|
||||||
|
@SQLIfNotExists
|
||||||
|
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
|
||||||
|
public class User {
|
||||||
|
@SQLAutoIncrement // Add AUTO_INCREMENT modifier
|
||||||
|
@SQLPrimaryKey // Create a PRIMARY KEY based on this field
|
||||||
|
@SQLNotNull
|
||||||
|
@SQLComment("Primary key of the base")
|
||||||
|
public Long id = null;
|
||||||
|
@SQLLimitSize(256)
|
||||||
|
public String login = null;
|
||||||
|
|
||||||
|
public Timestamp lastConnection = null;
|
||||||
|
@SQLDefault("'0'")
|
||||||
|
@SQLNotNull
|
||||||
|
public boolean admin = false;
|
||||||
|
@SQLDefault("'0'")
|
||||||
|
@SQLNotNull
|
||||||
|
public boolean blocked = false;
|
||||||
|
@SQLDefault("'0'")
|
||||||
|
@SQLNotNull
|
||||||
|
public boolean removed = false;
|
||||||
|
|
||||||
|
}
|
36
src/org/kar/archidata/model/UserExtern.java
Normal file
36
src/org/kar/archidata/model/UserExtern.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package org.kar.archidata.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`id` bigint NOT NULL COMMENT 'table ID' AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`login` varchar(128) COLLATE 'utf8_general_ci' NOT NULL COMMENT 'login of the user',
|
||||||
|
`email` varchar(512) COLLATE 'utf8_general_ci' NOT NULL COMMENT 'email of the user',
|
||||||
|
`lastConnection` datetime NOT NULL COMMENT 'last connection time',
|
||||||
|
`admin` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE',
|
||||||
|
`blocked` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE',
|
||||||
|
`removed` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE'
|
||||||
|
) AUTO_INCREMENT=10;
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public class UserExtern {
|
||||||
|
public Long id;
|
||||||
|
public String login;
|
||||||
|
public boolean admin;
|
||||||
|
|
||||||
|
public UserExtern(User other) {
|
||||||
|
this.id = other.id;
|
||||||
|
this.login = other.login;
|
||||||
|
this.admin = other.admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "User{" +
|
||||||
|
"id=" + id +
|
||||||
|
", login='" + login + '\'' +
|
||||||
|
", admin=" + admin +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
42
src/org/kar/archidata/model/UserPerso.java
Normal file
42
src/org/kar/archidata/model/UserPerso.java
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package org.kar.archidata.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`id` bigint NOT NULL COMMENT 'table ID' AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`login` varchar(128) COLLATE 'utf8_general_ci' NOT NULL COMMENT 'login of the user',
|
||||||
|
`email` varchar(512) COLLATE 'utf8_general_ci' NOT NULL COMMENT 'email of the user',
|
||||||
|
`lastConnection` datetime NOT NULL COMMENT 'last connection time',
|
||||||
|
`admin` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE',
|
||||||
|
`blocked` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE',
|
||||||
|
`removed` enum("TRUE", "FALSE") NOT NULL DEFAULT 'FALSE'
|
||||||
|
) AUTO_INCREMENT=10;
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public class UserPerso {
|
||||||
|
public Long id;
|
||||||
|
public String login;
|
||||||
|
public boolean admin;
|
||||||
|
public boolean blocked;
|
||||||
|
public boolean removed;
|
||||||
|
|
||||||
|
public UserPerso(User other) {
|
||||||
|
this.id = other.id;
|
||||||
|
this.login = other.login;
|
||||||
|
this.admin = other.admin;
|
||||||
|
this.blocked = other.blocked;
|
||||||
|
this.removed = other.removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "User{" +
|
||||||
|
"id=" + id +
|
||||||
|
", login='" + login + '\'' +
|
||||||
|
", admin=" + admin +
|
||||||
|
", blocked=" + blocked +
|
||||||
|
", removed=" + removed +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
73
src/org/kar/archidata/model/UserSmall.java
Normal file
73
src/org/kar/archidata/model/UserSmall.java
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package org.kar.archidata.model;
|
||||||
|
|
||||||
|
/*
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`id` bigint NOT NULL COMMENT 'table ID' AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`login` varchar(128) COLLATE 'utf8_general_ci' NOT NULL COMMENT 'login of the user',
|
||||||
|
`password` varchar(128) COLLATE 'latin1_bin' NOT NULL COMMENT 'password of the user hashed (sha512)',
|
||||||
|
`email` varchar(512) COLLATE 'utf8_general_ci' NOT NULL COMMENT 'email of the user',
|
||||||
|
`emailValidate` bigint COMMENT 'date of the email validation',
|
||||||
|
`newEmail` varchar(512) COLLATE 'utf8_general_ci' COMMENT 'email of the user if he want to change',
|
||||||
|
`authorisationLevel` enum("REMOVED", "USER", "ADMIN") NOT NULL COMMENT 'user level of authorization'
|
||||||
|
) AUTO_INCREMENT=10;
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class UserSmall {
|
||||||
|
public long id;
|
||||||
|
public String login;
|
||||||
|
public String email;
|
||||||
|
public State authorisationLevel;
|
||||||
|
|
||||||
|
public UserSmall() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserSmall(long id, String login, String email, State authorisationLevel) {
|
||||||
|
this.id = id;
|
||||||
|
this.login = login;
|
||||||
|
this.email = email;
|
||||||
|
this.authorisationLevel = authorisationLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserSmall(ResultSet rs) {
|
||||||
|
int iii = 1;
|
||||||
|
try {
|
||||||
|
this.id = rs.getLong(iii++);
|
||||||
|
this.login = rs.getString(iii++);
|
||||||
|
this.email = rs.getString(iii++);
|
||||||
|
this.authorisationLevel = State.valueOf(rs.getString(iii++));
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
public void serialize(ResultSet rs) {
|
||||||
|
int iii = 1;
|
||||||
|
try {
|
||||||
|
this.id = rs.getLong(iii++);
|
||||||
|
this.login = rs.getString(iii++);
|
||||||
|
this.password = rs.getString(iii++);
|
||||||
|
this.email = rs.getString(iii++);
|
||||||
|
this.emailValidate = rs.getLong(iii++);
|
||||||
|
this.newEmail = rs.getString(iii++);
|
||||||
|
this.authorisationLevel = State.valueOf(rs.getString(iii++));
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "UserSmall{" +
|
||||||
|
"id='" + id + '\'' +
|
||||||
|
", login='" + login + '\'' +
|
||||||
|
", email='" + email + '\'' +
|
||||||
|
", authorisationLevel=" + authorisationLevel +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
78
src/org/kar/archidata/util/ConfigBaseVariable.java
Normal file
78
src/org/kar/archidata/util/ConfigBaseVariable.java
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package org.kar.archidata.util;
|
||||||
|
|
||||||
|
public class ConfigBaseVariable {
|
||||||
|
|
||||||
|
public static String getTmpDataFolder() {
|
||||||
|
String out = System.getenv("DATA_TMP_FOLDER");
|
||||||
|
if (out == null) {
|
||||||
|
return "/application/data/tmp";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getMediaDataFolder() {
|
||||||
|
String out = System.getenv("DATA_FOLDER");
|
||||||
|
if (out == null) {
|
||||||
|
return "/application/data/media";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDBHost() {
|
||||||
|
String out = System.getenv("DB_HOST");
|
||||||
|
if (out == null) {
|
||||||
|
return "localhost";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDBPort() {
|
||||||
|
String out = System.getenv("DB_PORT");
|
||||||
|
if (out == null) {
|
||||||
|
return "80";
|
||||||
|
//return "17036";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDBLogin() {
|
||||||
|
String out = System.getenv("DB_USER");
|
||||||
|
if (out == null) {
|
||||||
|
return "root";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDBPassword() {
|
||||||
|
String out = System.getenv("DB_PASSWORD");
|
||||||
|
if (out == null) {
|
||||||
|
return "archidata_password";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDBName() {
|
||||||
|
String out = System.getenv("DB_DATABASE");
|
||||||
|
if (out == null) {
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getlocalAddress() {
|
||||||
|
String out = System.getenv("API_ADDRESS");
|
||||||
|
if (out == null) {
|
||||||
|
return "http://0.0.0.0:80/api/";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getSSOAddress() {
|
||||||
|
String out = System.getenv("SSO_ADDRESS");
|
||||||
|
if (out == null) {
|
||||||
|
return "http://sso_host/karauth/api/";
|
||||||
|
//return "http://192.168.1.156/karauth/api/";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
346
src/org/kar/archidata/util/DataTools.java
Normal file
346
src/org/kar/archidata/util/DataTools.java
Normal file
@ -0,0 +1,346 @@
|
|||||||
|
package org.kar.archidata.util;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
|
||||||
|
import org.kar.archidata.GlobalConfiguration;
|
||||||
|
import org.kar.archidata.SqlWrapper;
|
||||||
|
import org.kar.archidata.model.Data;
|
||||||
|
import org.kar.archidata.db.DBEntry;
|
||||||
|
|
||||||
|
public class DataTools {
|
||||||
|
|
||||||
|
public final static int CHUNK_SIZE = 1024 * 1024; // 1MB chunks
|
||||||
|
public final static int CHUNK_SIZE_IN = 50 * 1024 * 1024; // 1MB chunks
|
||||||
|
/**
|
||||||
|
* Upload some data
|
||||||
|
*/
|
||||||
|
private static long tmpFolderId = 1;
|
||||||
|
|
||||||
|
public static void createFolder(String path) throws IOException {
|
||||||
|
if (!Files.exists(java.nio.file.Path.of(path))) {
|
||||||
|
System.out.println("Create folder: " + path);
|
||||||
|
Files.createDirectories(java.nio.file.Path.of(path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long getTmpDataId() {
|
||||||
|
return tmpFolderId++;
|
||||||
|
}
|
||||||
|
public static String getTmpFileInData(long tmpFolderId) {
|
||||||
|
String filePath = ConfigBaseVariable.getTmpDataFolder() + File.separator + tmpFolderId;
|
||||||
|
try {
|
||||||
|
createFolder(ConfigBaseVariable.getTmpDataFolder() + File.separator);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getTmpFolder() {
|
||||||
|
String filePath = ConfigBaseVariable.getTmpDataFolder() + File.separator + tmpFolderId++;
|
||||||
|
try {
|
||||||
|
createFolder(ConfigBaseVariable.getTmpDataFolder() + File.separator);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getFileData(long tmpFolderId) {
|
||||||
|
String filePath = ConfigBaseVariable.getMediaDataFolder() + File.separator + tmpFolderId + File.separator + "data";
|
||||||
|
try {
|
||||||
|
createFolder(ConfigBaseVariable.getMediaDataFolder() + File.separator + tmpFolderId + File.separator);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Data getWithSha512(String sha512) {
|
||||||
|
System.out.println("find sha512 = " + sha512);
|
||||||
|
DBEntry entry = new DBEntry(GlobalConfiguration.dbConfig);
|
||||||
|
String query = "SELECT `id`, `deleted`, `sha512`, `mime_type`, `size` FROM `data` WHERE `sha512` = ?";
|
||||||
|
try {
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(query);
|
||||||
|
ps.setString(1, sha512);
|
||||||
|
ResultSet rs = ps.executeQuery();
|
||||||
|
if (rs.next()) {
|
||||||
|
Data out = new Data(rs);
|
||||||
|
entry.disconnect();
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
entry.disconnect();
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Data getWithId(long id) {
|
||||||
|
DBEntry entry = new DBEntry(GlobalConfiguration.dbConfig);
|
||||||
|
String query = "SELECT `id`, `deleted`, `sha512`, `mime_type`, `size` FROM `data` WHERE `deleted` = false AND `id` = ?";
|
||||||
|
try {
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(query);
|
||||||
|
ps.setLong(1, id);
|
||||||
|
ResultSet rs = ps.executeQuery();
|
||||||
|
if (rs.next()) {
|
||||||
|
Data out = new Data(rs);
|
||||||
|
entry.disconnect();
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
entry.disconnect();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Data createNewData(long tmpUID, String originalFileName, String sha512) throws IOException, SQLException {
|
||||||
|
// determine mime type:
|
||||||
|
String mimeType = "";
|
||||||
|
String extension = originalFileName.substring(originalFileName.lastIndexOf('.') + 1);
|
||||||
|
switch (extension.toLowerCase()) {
|
||||||
|
case "jpg":
|
||||||
|
case "jpeg":
|
||||||
|
mimeType = "image/jpeg";
|
||||||
|
break;
|
||||||
|
case "png":
|
||||||
|
mimeType = "image/png";
|
||||||
|
break;
|
||||||
|
case "webp":
|
||||||
|
mimeType = "image/webp";
|
||||||
|
break;
|
||||||
|
case "mka":
|
||||||
|
mimeType = "audio/x-matroska";
|
||||||
|
break;
|
||||||
|
case "mkv":
|
||||||
|
mimeType = "video/x-matroska";
|
||||||
|
break;
|
||||||
|
case "webm":
|
||||||
|
mimeType = "video/webm";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IOException("Can not find the mime type of data input: '" + extension + "'");
|
||||||
|
}
|
||||||
|
String tmpPath = getTmpFileInData(tmpUID);
|
||||||
|
long fileSize = Files.size(Paths.get(tmpPath));
|
||||||
|
DBEntry entry = new DBEntry(GlobalConfiguration.dbConfig);
|
||||||
|
long uniqueSQLID = -1;
|
||||||
|
try {
|
||||||
|
// prepare the request:
|
||||||
|
String query = "INSERT INTO `data` (`sha512`, `mime_type`, `size`, `original_name`) VALUES (?, ?, ?, ?)";
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(query,
|
||||||
|
Statement.RETURN_GENERATED_KEYS);
|
||||||
|
int iii = 1;
|
||||||
|
ps.setString(iii++, sha512);
|
||||||
|
ps.setString(iii++, mimeType);
|
||||||
|
ps.setLong(iii++, fileSize);
|
||||||
|
ps.setString(iii++, originalFileName);
|
||||||
|
// execute the request
|
||||||
|
int affectedRows = ps.executeUpdate();
|
||||||
|
if (affectedRows == 0) {
|
||||||
|
throw new SQLException("Creating data failed, no rows affected.");
|
||||||
|
}
|
||||||
|
// retreive uid inserted
|
||||||
|
try (ResultSet generatedKeys = ps.getGeneratedKeys()) {
|
||||||
|
if (generatedKeys.next()) {
|
||||||
|
uniqueSQLID = generatedKeys.getLong(1);
|
||||||
|
} else {
|
||||||
|
throw new SQLException("Creating user failed, no ID obtained (1).");
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.out.println("Can not get the UID key inserted ... ");
|
||||||
|
ex.printStackTrace();
|
||||||
|
throw new SQLException("Creating user failed, no ID obtained (2).");
|
||||||
|
}
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
entry.disconnect();
|
||||||
|
System.out.println("Add Data raw done. uid data=" + uniqueSQLID);
|
||||||
|
Data out = getWithId(uniqueSQLID);
|
||||||
|
|
||||||
|
String mediaPath = getFileData(out.id);
|
||||||
|
System.out.println("src = " + tmpPath);
|
||||||
|
System.out.println("dst = " + mediaPath);
|
||||||
|
Files.move(Paths.get(tmpPath), Paths.get(mediaPath), StandardCopyOption.ATOMIC_MOVE);
|
||||||
|
|
||||||
|
System.out.println("Move done");
|
||||||
|
// all is done the file is corectly installed...
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void undelete(Long id) {
|
||||||
|
DBEntry entry = new DBEntry(GlobalConfiguration.dbConfig);
|
||||||
|
String query = "UPDATE `data` SET `deleted` = false WHERE `id` = ?";
|
||||||
|
try {
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(query);
|
||||||
|
ps.setLong(1, id);
|
||||||
|
ps.execute();
|
||||||
|
} catch (SQLException throwables) {
|
||||||
|
throwables.printStackTrace();
|
||||||
|
}
|
||||||
|
entry.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String saveTemporaryFile(InputStream uploadedInputStream, long idData) {
|
||||||
|
return saveFile(uploadedInputStream, getTmpFileInData(idData));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeTemporaryFile(long idData) {
|
||||||
|
String filepath = getTmpFileInData(idData);
|
||||||
|
if (Files.exists(Paths.get(filepath))) {
|
||||||
|
try {
|
||||||
|
Files.delete(Paths.get(filepath));
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("can not delete temporary file : " + Paths.get(filepath));
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// save uploaded file to a defined location on the server
|
||||||
|
public static String saveFile(InputStream uploadedInputStream, String serverLocation) {
|
||||||
|
String out = "";
|
||||||
|
try {
|
||||||
|
OutputStream outpuStream = new FileOutputStream(new File(
|
||||||
|
serverLocation));
|
||||||
|
int read = 0;
|
||||||
|
byte[] bytes = new byte[CHUNK_SIZE_IN];
|
||||||
|
MessageDigest md = MessageDigest.getInstance("SHA-512");
|
||||||
|
|
||||||
|
outpuStream = new FileOutputStream(new File(serverLocation));
|
||||||
|
while ((read = uploadedInputStream.read(bytes)) != -1) {
|
||||||
|
//System.out.println("write " + read);
|
||||||
|
md.update(bytes, 0, read);
|
||||||
|
outpuStream.write(bytes, 0, read);
|
||||||
|
}
|
||||||
|
System.out.println("Flush input stream ... " + serverLocation);
|
||||||
|
System.out.flush();
|
||||||
|
outpuStream.flush();
|
||||||
|
outpuStream.close();
|
||||||
|
// create the end of sha512
|
||||||
|
byte[] sha512Digest = md.digest();
|
||||||
|
// convert in hexadecimal
|
||||||
|
out = bytesToHex(sha512Digest);
|
||||||
|
uploadedInputStream.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
System.out.println("Can not write in temporary file ... ");
|
||||||
|
ex.printStackTrace();
|
||||||
|
} catch (NoSuchAlgorithmException ex) {
|
||||||
|
System.out.println("Can not find sha512 algorithms");
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
// curl http://localhost:9993/api/users/3
|
||||||
|
//@Secured
|
||||||
|
/*
|
||||||
|
@GET
|
||||||
|
@Path("{id}")
|
||||||
|
//@RolesAllowed("GUEST")
|
||||||
|
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||||
|
public Response retriveData(@HeaderParam("Range") String range, @PathParam("id") Long id) throws Exception {
|
||||||
|
return retriveDataFull(range, id, "no-name");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static String bytesToHex(byte[] bytes) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (byte b : bytes) {
|
||||||
|
sb.append(String.format("%02x", b));
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String multipartCorrection(String data) {
|
||||||
|
if (data == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (data.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (data.contentEquals("null")) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Response uploadCover(Class<T> clazz,
|
||||||
|
Long id,
|
||||||
|
String fileName,
|
||||||
|
InputStream fileInputStream,
|
||||||
|
FormDataContentDisposition fileMetaData
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
// correct input string stream :
|
||||||
|
fileName = multipartCorrection(fileName);
|
||||||
|
|
||||||
|
//public NodeSmall uploadFile(final FormDataMultiPart form) {
|
||||||
|
System.out.println("Upload media file: " + fileMetaData);
|
||||||
|
System.out.println(" - id: " + id);
|
||||||
|
System.out.println(" - file_name: " + fileName);
|
||||||
|
System.out.println(" - fileInputStream: " + fileInputStream);
|
||||||
|
System.out.println(" - fileMetaData: " + fileMetaData);
|
||||||
|
System.out.flush();
|
||||||
|
T media = SqlWrapper.get(clazz, id);
|
||||||
|
if (media == null) {
|
||||||
|
return Response.notModified("Media Id does not exist or removed...").build();
|
||||||
|
}
|
||||||
|
|
||||||
|
long tmpUID = getTmpDataId();
|
||||||
|
String sha512 = saveTemporaryFile(fileInputStream, tmpUID);
|
||||||
|
Data data = getWithSha512(sha512);
|
||||||
|
if (data == null) {
|
||||||
|
System.out.println("Need to add the data in the BDD ... ");
|
||||||
|
System.out.flush();
|
||||||
|
try {
|
||||||
|
data = createNewData(tmpUID, fileName, sha512);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
removeTemporaryFile(tmpUID);
|
||||||
|
ex.printStackTrace();
|
||||||
|
return Response.notModified("can not create input media").build();
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
removeTemporaryFile(tmpUID);
|
||||||
|
return Response.notModified("Error in SQL insertion ...").build();
|
||||||
|
}
|
||||||
|
} else if (data.deleted == true) {
|
||||||
|
System.out.println("Data already exist but deleted");
|
||||||
|
System.out.flush();
|
||||||
|
undelete(data.id);
|
||||||
|
data.deleted = false;
|
||||||
|
} else {
|
||||||
|
System.out.println("Data already exist ... all good");
|
||||||
|
System.out.flush();
|
||||||
|
}
|
||||||
|
// Fist step: retrieve all the Id of each parents:...
|
||||||
|
System.out.println("Find typeNode");
|
||||||
|
SqlWrapper.addLink(clazz, id, "cover", data.id);
|
||||||
|
return Response.ok(SqlWrapper.get(clazz, id)).build();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.out.println("Cat ann unexpected error ... ");
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
return Response.serverError().build();
|
||||||
|
}
|
||||||
|
}
|
175
src/org/kar/archidata/util/JWTWrapper.java
Normal file
175
src/org/kar/archidata/util/JWTWrapper.java
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
package org.kar.archidata.util;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.nimbusds.jose.JOSEException;
|
||||||
|
import com.nimbusds.jose.JOSEObjectType;
|
||||||
|
import com.nimbusds.jose.JWSAlgorithm;
|
||||||
|
import com.nimbusds.jose.JWSHeader;
|
||||||
|
import com.nimbusds.jose.JWSSigner;
|
||||||
|
import com.nimbusds.jose.JWSVerifier;
|
||||||
|
import com.nimbusds.jose.crypto.RSASSASigner;
|
||||||
|
import com.nimbusds.jose.crypto.RSASSAVerifier;
|
||||||
|
import com.nimbusds.jose.jwk.RSAKey;
|
||||||
|
import com.nimbusds.jose.jwk.gen.RSAKeyGenerator;
|
||||||
|
import com.nimbusds.jwt.JWTClaimsSet;
|
||||||
|
import com.nimbusds.jwt.SignedJWT;
|
||||||
|
|
||||||
|
public class JWTWrapper {
|
||||||
|
private static RSAKey rsaJWK = null;;
|
||||||
|
private static RSAKey rsaPublicJWK = null;
|
||||||
|
|
||||||
|
public static class PublicKey {
|
||||||
|
public String key;
|
||||||
|
|
||||||
|
public PublicKey(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
public PublicKey() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void initLocalTokenRemote(String ssoUri, String application) throws IOException, ParseException {
|
||||||
|
// check Token:
|
||||||
|
URL obj = new URL(ssoUri + "public_key");
|
||||||
|
System.out.println("Request token from:" + obj);
|
||||||
|
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
|
||||||
|
con.setRequestMethod("GET");
|
||||||
|
con.setRequestProperty("User-Agent", application);
|
||||||
|
con.setRequestProperty("Cache-Control", "no-cache");
|
||||||
|
con.setRequestProperty("Content-Type", "application/json");
|
||||||
|
con.setRequestProperty("Accept", "application/json");
|
||||||
|
int responseCode = con.getResponseCode();
|
||||||
|
|
||||||
|
System.out.println("GET Response Code :: " + responseCode);
|
||||||
|
if (responseCode == HttpURLConnection.HTTP_OK) { // success
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
|
||||||
|
|
||||||
|
String inputLine;
|
||||||
|
StringBuffer response = new StringBuffer();
|
||||||
|
while ((inputLine = in.readLine()) != null) {
|
||||||
|
response.append(inputLine);
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
// print result
|
||||||
|
//System.out.println(response.toString());
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
PublicKey values = mapper.readValue(response.toString(), PublicKey.class);
|
||||||
|
rsaPublicJWK = RSAKey.parse(values.key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
System.out.println("GET JWT validator token not worked");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initLocalToken() throws Exception{
|
||||||
|
// RSA signatures require a public and private RSA key pair, the public key
|
||||||
|
// must be made known to the JWS recipient in order to verify the signatures
|
||||||
|
try {
|
||||||
|
String generatedStringForKey = UUID.randomUUID().toString();
|
||||||
|
rsaJWK = new RSAKeyGenerator(2048).keyID(generatedStringForKey).generate();
|
||||||
|
rsaPublicJWK = rsaJWK.toPublicJWK();
|
||||||
|
//System.out.println("RSA key (all): " + rsaJWK.toJSONString());
|
||||||
|
//System.out.println("RSA key (pub): " + rsaPublicJWK.toJSONString());
|
||||||
|
} catch (JOSEException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
System.out.println("Can not generate teh public abnd private keys ...");
|
||||||
|
rsaJWK = null;
|
||||||
|
rsaPublicJWK = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initValidateToken(String publicKey) {
|
||||||
|
try {
|
||||||
|
rsaPublicJWK = RSAKey.parse(publicKey);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.out.println("Can not retrieve public Key !!!!!!!! RSAKey='" + publicKey + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public static String getPublicKey() {
|
||||||
|
if (rsaPublicJWK == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return rsaPublicJWK.toJSONString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a token with the provided elements
|
||||||
|
* @param userID UniqueId of the USER (global unique ID)
|
||||||
|
* @param userLogin Login of the user (never change)
|
||||||
|
* @param isuer The one who provide the Token
|
||||||
|
* @param timeOutInMunites Expiration of the token.
|
||||||
|
* @return the encoded token
|
||||||
|
*/
|
||||||
|
public static String generateJWToken(long userID, String userLogin, String isuer, int timeOutInMunites) {
|
||||||
|
if (rsaJWK == null) {
|
||||||
|
System.out.println("JWT private key is not present !!!");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// Create RSA-signer with the private key
|
||||||
|
JWSSigner signer = new RSASSASigner(rsaJWK);
|
||||||
|
// Prepare JWT with claims set
|
||||||
|
JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
|
||||||
|
.subject(Long.toString(userID))
|
||||||
|
.claim("login", userLogin)
|
||||||
|
.issuer(isuer)
|
||||||
|
.issueTime(new Date())
|
||||||
|
.expirationTime(new Date(new Date().getTime() + 60 * timeOutInMunites * 1000 /* millisecond */))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SignedJWT signedJWT = new SignedJWT(new JWSHeader.Builder(JWSAlgorithm.RS256).type(JOSEObjectType.JWT)/*.keyID(rsaJWK.getKeyID())*/.build(), claimsSet);
|
||||||
|
|
||||||
|
// Compute the RSA signature
|
||||||
|
signedJWT.sign(signer);
|
||||||
|
// serialize the output...
|
||||||
|
return signedJWT.serialize();
|
||||||
|
} catch (JOSEException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JWTClaimsSet validateToken(String signedToken, String isuer) {
|
||||||
|
if (rsaPublicJWK == null) {
|
||||||
|
System.out.println("JWT public key is not present !!!");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// On the consumer side, parse the JWS and verify its RSA signature
|
||||||
|
SignedJWT signedJWT = SignedJWT.parse(signedToken);
|
||||||
|
|
||||||
|
JWSVerifier verifier = new RSASSAVerifier(rsaPublicJWK);
|
||||||
|
if (!signedJWT.verify(verifier)) {
|
||||||
|
System.out.println("JWT token is NOT verified ");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!new Date().before(signedJWT.getJWTClaimsSet().getExpirationTime())) {
|
||||||
|
System.out.println("JWT token is expired now = " + new Date() + " with=" + signedJWT.getJWTClaimsSet().getExpirationTime() );
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!isuer.equals(signedJWT.getJWTClaimsSet().getIssuer())) {
|
||||||
|
System.out.println("JWT issuer is wong: '" + isuer + "' != '" + signedJWT.getJWTClaimsSet().getIssuer() + "'" );
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// the element must be validated outside ...
|
||||||
|
//System.out.println("JWT token is verified 'alice' =?= '" + signedJWT.getJWTClaimsSet().getSubject() + "'");
|
||||||
|
//System.out.println("JWT token isuer 'https://c2id.com' =?= '" + signedJWT.getJWTClaimsSet().getIssuer() + "'");
|
||||||
|
return signedJWT.getJWTClaimsSet();
|
||||||
|
} catch (JOSEException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
10
src/org/kar/archidata/util/PublicKey.java
Normal file
10
src/org/kar/archidata/util/PublicKey.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package org.kar.archidata.util;
|
||||||
|
|
||||||
|
|
||||||
|
public class PublicKey {
|
||||||
|
public String key;
|
||||||
|
|
||||||
|
public PublicKey(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user