Bläddra i källkod

Git update 2024-04-26

Axel Nordh 2 år sedan
förälder
incheckning
2aa77c719f

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+*.log*
+*/.idea/*
+*/.settings/*
+*.iml*
+dependency-reduced-pom.xml

+ 2 - 1
.vscode/settings.json

@@ -1,3 +1,4 @@
 {
-  "java.configuration.updateBuildConfiguration": "automatic"
+  "java.configuration.updateBuildConfiguration": "automatic",
+  "java.compile.nullAnalysis.mode": "disabled"
 }

+ 0 - 41
Odds/.classpath

@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-18">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="target/generated-sources/annotations">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="ignore_optional_problems" value="true"/>
-			<attribute name="m2e-apt" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="ignore_optional_problems" value="true"/>
-			<attribute name="m2e-apt" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path=".apt_generated">
-		<attributes>
-			<attribute name="optional" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>

+ 2 - 0
Odds/.gitignore

@@ -3,3 +3,5 @@
 /.settings/
 .classpath
 /.apt_generated/
+.project
+.lck

+ 0 - 30
Odds/.project

@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>Odds</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.statet.r.resourceProjects.RBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.statet.ide.resourceProjects.Statet</nature>
-		<nature>org.eclipse.statet.r.resourceProjects.R</nature>
-	</natures>
-</projectDescription>

+ 0 - 576
Odds/.settings/org.eclipse.jdt.core.prefs

@@ -1,576 +0,0 @@
-eclipse.preferences.version=1
-enableParallelJavaIndexSearch=true
-org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=
-org.eclipse.jdt.core.circularClasspath=warning
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
-org.eclipse.jdt.core.codeComplete.argumentPrefixes=
-org.eclipse.jdt.core.codeComplete.argumentSuffixes=
-org.eclipse.jdt.core.codeComplete.camelCaseMatch=enabled
-org.eclipse.jdt.core.codeComplete.deprecationCheck=disabled
-org.eclipse.jdt.core.codeComplete.discouragedReferenceCheck=disabled
-org.eclipse.jdt.core.codeComplete.fieldPrefixes=
-org.eclipse.jdt.core.codeComplete.fieldSuffixes=
-org.eclipse.jdt.core.codeComplete.forbiddenReferenceCheck=enabled
-org.eclipse.jdt.core.codeComplete.forceImplicitQualification=disabled
-org.eclipse.jdt.core.codeComplete.localPrefixes=
-org.eclipse.jdt.core.codeComplete.localSuffixes=
-org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
-org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
-org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
-org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
-org.eclipse.jdt.core.codeComplete.subwordMatch=disabled
-org.eclipse.jdt.core.codeComplete.suggestStaticImports=enabled
-org.eclipse.jdt.core.codeComplete.visibilityCheck=enabled
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull
-org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.lambda.genericSignature=do not generate
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.shareCommonFinallyBlocks=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=18
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=18
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.emulateJavacBug8031744=enabled
-org.eclipse.jdt.core.compiler.generateClassFiles=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
-org.eclipse.jdt.core.compiler.problem.APILeak=warning
-org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deadCodeInTrivialIfStatement=disabled
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingMethodWithoutSuperInvocation=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.tasks=warning
-org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
-org.eclipse.jdt.core.compiler.problem.uninternedIdentityComparison=disabled
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
-org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeArgumentsForMethodInvocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.processAnnotations=enabled
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=18
-org.eclipse.jdt.core.compiler.storeAnnotations=disabled
-org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
-org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL
-org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX
-org.eclipse.jdt.core.computeJavaBuildOrder=ignore
-org.eclipse.jdt.core.encoding=utf8
-org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
-org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
-org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=true
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
-org.eclipse.jdt.core.formatter.align_with_spaces=false
-org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=49
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0
-org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assertion_message=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=16
-org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_record_components=16
-org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=20
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0
-org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
-org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
-org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=false
-org.eclipse.jdt.core.formatter.join_wrapped_lines=false
-org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.lineSplit=120
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.text_block_indentation=0
-org.eclipse.jdt.core.formatter.use_on_off_tags=true
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
-org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
-org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
-org.eclipse.jdt.core.timeoutForParameterNameFromAttachedJavadoc=50

+ 0 - 46
Odds/dependency-reduced-pom.xml

@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>Odds</groupId>
-  <artifactId>Odds</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
-  <build>
-    <sourceDirectory>src</sourceDirectory>
-    <plugins>
-      <plugin>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.8.1</version>
-        <configuration>
-          <source>18</source>
-          <target>18</target>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>3.4.1</version>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <transformers>
-                <transformer>
-                  <mainClass>main.Main</mainClass>
-                </transformer>
-              </transformers>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <repositories>
-    <repository>
-      <id>nordhs-repo</id>
-      <name>Nords Repo</name>
-      <url>http://nordh.xyz:9099/repository/nordhs-repo/</url>
-    </repository>
-  </repositories>
-</project>

+ 3 - 3
Odds/src/main/Main.java

@@ -50,13 +50,13 @@ public class Main {
         final OddsPortal op = new OddsPortal();
 
         System.out.println("Getting One days ago matches");
-        op.getMatches(LocalDateTime.now().plusDays(-1));
+        //op.getMatches(LocalDateTime.now().plusDays(-1));
         System.out.println("Getting Todays matches");
         op.getMatches(LocalDateTime.now().plusDays(0));
         System.out.println("Getting Tomorrows matches");
-        op.getMatches(LocalDateTime.now().plusDays(1));
+        //op.getMatches(LocalDateTime.now().plusDays(1));
         System.out.println("Getting Next days matches");
-        op.getMatches(LocalDateTime.now().plusDays(2));
+        //op.getMatches(LocalDateTime.now().plusDays(2));
     }
 
 }

+ 1 - 0
Odds/src/parser/OddsPortal.java

@@ -149,6 +149,7 @@ public class OddsPortal extends ParserBase implements ParserJoinedFunctions {
             try {
                 WebElement element = divs.get(i);
                 scrollElementIntoView(driver, element);
+                scrollElementIntoView(driver, element);
                 ResultDTO result = new ResultDTO(SOCCER_RESULTS_TABLE_NAME);
 
                 boolean somethingWrong = false;

+ 2 - 2
OddsJavaFx/.project

@@ -34,12 +34,12 @@
 	</natures>
 	<filteredResources>
 		<filter>
-			<id>1657788801035</id>
+			<id>1712071853108</id>
 			<name></name>
 			<type>30</type>
 			<matcher>
 				<id>org.eclipse.core.resources.regexFilterMatcher</id>
-				<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+				<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
 			</matcher>
 		</filter>
 	</filteredResources>

+ 6 - 6
OddsJavaFx/.settings/org.eclipse.jdt.core.prefs

@@ -31,13 +31,13 @@ org.eclipse.jdt.core.codeComplete.suggestStaticImports=enabled
 org.eclipse.jdt.core.codeComplete.visibilityCheck=enabled
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
 org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
 org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.lambda.genericSignature=do not generate
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
@@ -107,16 +107,16 @@ org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
 org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingMethodWithoutSuperInvocation=ignore
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning

+ 1 - 1
OddsJavaFx/OddsFx.iml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module version="4">
   <component name="SonarLintModuleSettings">
-    <option name="uniqueId" value="a1175abb-cb66-4bbb-b5f6-83a865cc592f" />
+    <option name="uniqueId" value="88f633da-5128-4ffc-97f4-37ed6e965a1d" />
   </component>
 </module>

+ 6 - 5
OddsJavaFx/pom.xml

@@ -19,8 +19,9 @@
         <sourceDirectory>src</sourceDirectory>
         <plugins>
             <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.10.1</version>
+                <version>3.12.1</version>
             </plugin>
             <plugin>
                 <groupId>org.openjfx</groupId>
@@ -72,12 +73,12 @@
         <dependency>
             <groupId>org.openjfx</groupId>
             <artifactId>javafx-controls</artifactId>
-            <version>19-ea+8</version>
+            <version>22.0.1</version>
         </dependency>
         <dependency>
             <groupId>org.openjfx</groupId>
             <artifactId>javafx-fxml</artifactId>
-            <version>19-ea+8</version>
+            <version>22.0.1</version>
         </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
@@ -93,13 +94,13 @@
         <dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-java</artifactId>
-            <version>4.12.1</version>
+            <version>4.19.1</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
         <dependency>
             <groupId>io.github.bonigarcia</groupId>
             <artifactId>webdrivermanager</artifactId>
-            <version>5.5.3</version>
+            <version>5.8.0</version>
         </dependency>
 
     </dependencies>

+ 29 - 36
OddsJavaFx/src/controllers/AnalysisTestController.java

@@ -1,28 +1,12 @@
 package controllers;
 
-import java.math.RoundingMode;
-import java.net.URL;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Optional;
-import java.util.ResourceBundle;
-
 import data.GuiMysql;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
-import javafx.scene.control.Button;
-import javafx.scene.control.DatePicker;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.control.TextField;
+import javafx.scene.control.*;
 import javafx.scene.control.cell.MapValueFactory;
 import javafx.scene.control.cell.PropertyValueFactory;
 import javafx.scene.control.cell.TextFieldTableCell;
@@ -34,6 +18,12 @@ import objects.SoccerMatchAnalysis;
 import objects.bets.Bet;
 import objects.bets.Bet.Status;
 
+import java.math.RoundingMode;
+import java.net.URL;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.*;
+
 @SuppressWarnings("rawtypes")
 public class AnalysisTestController implements Initializable {
 
@@ -307,30 +297,33 @@ public class AnalysisTestController implements Initializable {
 
         return returnValue;
     }
-
-    private Integer getAnalyzeValue(SoccerMatch soccerMatch) {
+    /**
+     * Calculate and return the analyze value based on the given soccer match.
+     *
+     * @param  soccerMatch    the soccer match to analyze
+     * @return                the calculated analyze value
+     */
+    private int getAnalyzeValue(SoccerMatch soccerMatch) {
         int result = 0;
 
         SoccerMatchAnalysis analysis = new SoccerMatchAnalysis(soccerMatch);
-        League leagueInfo = GuiMysql.getInstance().getLeagueInfo(soccerMatch.getHomeTeam().getTeamLeagueId());
-        if (leagueInfo != null) {
-            int homeWinsCount = analysis.winLossRatio(leagueInfo.getWinLossRatio(), true);
-            int awayWinsCount = analysis.winLossRatio(leagueInfo.getWinLossRatio(), false);
-
-            int homeWinLossRatioCount = analysis.winLossRatioHomeAndAway(true,
-                    leagueInfo.getWinLossRatioHomeAndAway());
-            int awayWinLossRatioCount = analysis.winLossRatioHomeAndAway(false,
-                    leagueInfo.getWinLossRatioHomeAndAway());
-
-            int homeScoringTotal = analysis.scoringTotal(leagueInfo.getScoringTotal(), true);
-            int awayScoringTotal = analysis.scoringTotal(leagueInfo.getScoringTotal(), false);
-
-            int scoringDiffLastGames = analysis.getScoringDiffLastGames(leagueInfo.getScoringDiffLastGame());
-            int winsCountDiff = homeWinsCount - awayWinsCount;
-            int winLossRatioDiff = homeWinLossRatioCount - awayWinLossRatioCount;
+        League league = GuiMysql.getInstance().getLeagueInfo(soccerMatch.getHomeTeam().getTeamLeagueId());
+        if (league != null) {
+            int homeWins = analysis.winLossRatio(league.getWinLossRatio(), true);
+            int awayWins = analysis.winLossRatio(league.getWinLossRatio(), false);
+
+            int homeWinLossRatio = analysis.winLossRatioHomeAndAway(true, league.getWinLossRatioHomeAndAway());
+            int awayWinLossRatio = analysis.winLossRatioHomeAndAway(false, league.getWinLossRatioHomeAndAway());
+
+            int homeScoringTotal = analysis.scoringTotal(league.getScoringTotal(), true);
+            int awayScoringTotal = analysis.scoringTotal(league.getScoringTotal(), false);
+
+            int scoringDiffLastGames = analysis.getScoringDiffLastGames(league.getScoringDiffLastGame());
+            int winsCountDiff = homeWins - awayWins;
+            int winLossRatioDiff = homeWinLossRatio - awayWinLossRatio;
             int scoringTotalDiff = homeScoringTotal - awayScoringTotal;
 
-            if ((scoringDiffLastGames < 0 && winsCountDiff < 0 && winLossRatioDiff < 0 && scoringTotalDiff < 0) ||
+            if (scoringDiffLastGames < 0 && winsCountDiff < 0 && winLossRatioDiff < 0 && scoringTotalDiff < 0 ||
                     scoringDiffLastGames > 0 && winsCountDiff > 0 && winLossRatioDiff > 0 && scoringTotalDiff > 0) {
                 result = (scoringDiffLastGames + winsCountDiff + winLossRatioDiff + scoringTotalDiff) / 4;
             }

+ 58 - 0
OddsJavaFx/src/controllers/AnalyzerController.java

@@ -0,0 +1,58 @@
+package controllers;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ResourceBundle;
+
+import data.GuiMysql;
+import dev.failsafe.internal.util.Lists;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.VBox;
+import objects.League;
+
+public class AnalyzerController implements Initializable {
+
+    @FXML
+    VBox leagueList;
+
+    @FXML
+    Label bankLabel;
+    @FXML
+    TextField bankTextField;
+    @FXML
+    Label percentLabel;
+    @FXML
+    TextField percentTextField;
+    @FXML
+    HBox topPanelBox;
+
+    @Override
+    public void initialize(URL arg0, ResourceBundle arg1) {
+        HBox.setHgrow(leagueList, Priority.ALWAYS);
+        populateLeagueList();
+
+    }
+
+    private void populateLeagueList() {
+        List<League> leagues = GuiMysql.getInstance().getLeagues(GuiMysql.getInstance().getSportId("Soccer"));
+
+        for (League league : leagues) {
+            CheckBox c = new CheckBox(league.getLeagueName() + " (" + league.getCountryName() + ")");
+            c.selectedProperty().set(league.isPrio());
+            leagueList.getChildren().add(c);
+        }
+    }
+
+    @FXML
+    private void runTest() {
+
+    }
+}

+ 17 - 37
OddsJavaFx/src/controllers/MatchTabController.java

@@ -1,39 +1,16 @@
 package controllers;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.net.URL;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
 import com.google.common.collect.Lists;
-
 import data.GuiMysql;
 import javafx.beans.binding.Bindings;
 import javafx.beans.property.StringProperty;
-import javafx.beans.value.ChangeListener;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
 import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.ComboBox;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TablePosition;
-import javafx.scene.control.TableView;
-import javafx.scene.control.TextField;
+import javafx.scene.control.*;
 import javafx.scene.control.cell.PropertyValueFactory;
 import javafx.scene.control.cell.TextFieldTableCell;
 import javafx.util.Callback;
@@ -42,6 +19,16 @@ import javafx.util.converter.FloatStringConverter;
 import objects.BetDTO;
 import objects.SoccerMatch;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.net.URL;
+import java.text.DecimalFormat;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
 @SuppressWarnings("rawtypes")
 public class MatchTabController implements Initializable {
 
@@ -123,7 +110,6 @@ public class MatchTabController implements Initializable {
     private ObservableList<SoccerMatch> coutryFilteredMatches;
     private List<SoccerMatch> upcomingMatches;
     private int countryId;
-    private static final String FLOAT_FORMAT = "%.02f";
 
     private ObservableList<String> betSeriesOptions = FXCollections.observableArrayList();
     private List<BetDTO> dbBetSeries;
@@ -214,19 +200,15 @@ public class MatchTabController implements Initializable {
 
         betAmountTextField.setText(GuiMysql.getInstance().getBetBaseAmount());
 
-        betAmountTextField.focusedProperty().addListener(new ChangeListener<Boolean>() {
-            @Override
-            public void changed(javafx.beans.value.ObservableValue<? extends Boolean> observable, Boolean oldValue,
-                    Boolean newValue) {
-                if (!newValue) { // Textfield focus lost
-                    GuiMysql.getInstance().updateBetBaseAmount(betAmountTextField.getText());
-                }
-            };
+        betAmountTextField.focusedProperty().addListener((observable, oldValue, newValue) -> {
+            if (!newValue) { // Textfield focus lost
+                GuiMysql.getInstance().updateBetBaseAmount(betAmountTextField.getText());
+            }
         });
     }
 
     private void setBetAmount(SoccerMatch soccerMatch) {
-        if (betAmountTextField.getText().length() > 0) {
+        if (!betAmountTextField.getText().isEmpty()) {
             float betAmountValue = Float.parseFloat(betAmountTextField.getText());
             soccerMatch.setBetAmount(betAmountValue * (soccerMatch.getPercentageToBet() / 100f));
         }
@@ -434,7 +416,7 @@ public class MatchTabController implements Initializable {
     @FXML
     public void addRowAction(ActionEvent event) {
         ObservableList<TablePosition> selectedCells = matchTable.getSelectionModel().getSelectedCells();
-        if (selectedCells.size() > 0) {
+        if (!selectedCells.isEmpty()) {
             SoccerMatch selectedRow = matchTable.getItems().get(selectedCells.get(0).getRow());
             BetDTO betDTO = new BetDTO();
             betDTO.setCountryId(countryId);
@@ -450,8 +432,6 @@ public class MatchTabController implements Initializable {
             betDTO.setGameId(selectedRow.getMatchId());
 
             betObservableList.add(betDTO);
-        } else {
-            System.out.println("No row selected");
         }
     }
 

+ 19 - 0
OddsJavaFx/src/controllers/TestsController.java

@@ -2,6 +2,7 @@ package controllers;
 
 import java.net.URL;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.List;
 import java.util.Optional;
@@ -27,6 +28,7 @@ import javafx.scene.control.TextField;
 import javafx.scene.layout.AnchorPane;
 import javafx.scene.layout.Priority;
 import javafx.scene.layout.VBox;
+import objects.League;
 import parser.OddsPortal;
 import tests.AddedScoringTest;
 import tests.AnalysisBettDrawTester;
@@ -431,4 +433,21 @@ public class TestsController implements Initializable {
         final PrioCountriesAll prioCountriesAll = new PrioCountriesAll();
         prioCountriesAll.runTest();
     }
+
+    @FXML
+    private void updatePrioLeagues() {
+        List<League> leaguesWithPrio = GuiMysql.getInstance().getLeaguesWithPrio();
+
+        for (League league : leaguesWithPrio) {
+            long startTime = System.currentTimeMillis();
+            System.out.println("Starting with " + league.getLeagueName() + " " + new java.util.Date());
+            RelevanceTest test = new RelevanceTest();
+            test.setup("", -1, -1, 0.0f, -1, -1, -1, league.getLeagueId());
+
+            test.runTest();
+            long endTime = System.currentTimeMillis();
+            System.out.println("Done with " + league.getLeagueName() + " " + new java.util.Date()
+                    + " took " + new java.util.Date(System.currentTimeMillis() + (endTime - startTime)));
+        }
+    }
 }

+ 172 - 86
OddsJavaFx/src/data/GuiMysql.java

@@ -1,7 +1,9 @@
 package data;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.sql.Array;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -12,12 +14,17 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.AbstractMap.SimpleEntry;
+import java.util.logging.FileHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
 
 import objects.*;
 import org.eclipse.jetty.util.log.Log;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
+import com.mysql.cj.x.protobuf.MysqlxPrepare.Prepare;
 
 import mysql.Mysql;
 import objects.bets.Bet;
@@ -42,9 +49,22 @@ public class GuiMysql extends Mysql {
     public static final String GAME_DATE = "gameDate";
     private final Connection conn;
 
+    private Logger settingsLogger = Logger.getLogger("SettingsLogger");
+    FileHandler settingsLoggerFileHandler;
+
     protected GuiMysql() {
         super();
         conn = this.getConnection();
+        try {
+            settingsLoggerFileHandler = new FileHandler(System.getProperty("user.dir") + "/SettingsLogger.log");
+            settingsLogger.addHandler(settingsLoggerFileHandler);
+            settingsLogger.setLevel(Level.ALL);
+            SimpleFormatter formatter = new SimpleFormatter();
+            settingsLoggerFileHandler.setFormatter(formatter);
+
+        } catch (SecurityException | IOException e) {
+            e.printStackTrace();
+        }
     }
 
     public static GuiMysql getInstance() {
@@ -158,13 +178,12 @@ public class GuiMysql extends Mysql {
     public List<Bet> getAnalysisBetStatistics() {
         List<Bet> result = new ArrayList<>();
 
-        String sql =
-                "SELECT sr.id as soccerMatchId, ht.id as homeTeamId, awt.id as awayTeamId, sr.odds1, sr.oddsX, " +
-                        "sr.odds2, " + "sr.homeScore, sr.awayScore, sr.gameDate, sr.season, l.name as leagueName, abt" +
-                        ".id as betId, abt" + ".bet, abt.betAmount, abt.betOdds " + "FROM AnalysisBetTable abt " +
-                        "INNER JOIN SoccerResults sr ON abt.matchId = sr.id " + "INNER JOIN Team ht ON ht.id = sr" +
-                        ".homeTeamId " + "INNER JOIN Team awt ON awt.id = sr.awayTeamId " + "INNER JOIN League l ON l" +
-                        ".id = sr.leagueId " + "WHERE abt.status != 'OPEN'";
+        String sql = "SELECT sr.id as soccerMatchId, ht.id as homeTeamId, awt.id as awayTeamId, sr.odds1, sr.oddsX, " +
+                "sr.odds2, " + "sr.homeScore, sr.awayScore, sr.gameDate, sr.season, l.name as leagueName, abt" +
+                ".id as betId, abt" + ".bet, abt.betAmount, abt.betOdds " + "FROM AnalysisBetTable abt " +
+                "INNER JOIN SoccerResults sr ON abt.matchId = sr.id " + "INNER JOIN Team ht ON ht.id = sr" +
+                ".homeTeamId " + "INNER JOIN Team awt ON awt.id = sr.awayTeamId " + "INNER JOIN League l ON l" +
+                ".id = sr.leagueId " + "WHERE abt.status != 'OPEN'";
 
         try (PreparedStatement stat = getConnection().prepareStatement(sql)) {
             ResultSet rs = stat.executeQuery();
@@ -216,10 +235,12 @@ public class GuiMysql extends Mysql {
     public List<Float> getAvgAwayScoreThisSeason(int teamId, int countryId, int leagueId, String gameDate) {
         final ArrayList<Float> returnValue = Lists.newArrayList();
         final String sql = "SELECT AVG(homeScore) as avgConcededSeason, AVG(awayScore) as avgScoredSeason FROM " +
-                "SoccerResults WHERE awayScore != -1 AND awayTeamId = ? AND season = ? AND DATE(gameDate) < ? ORDER " + "BY gameDate ASC";
+                "SoccerResults WHERE awayScore != -1 AND awayTeamId = ? AND season = ? AND DATE(gameDate) < ? ORDER "
+                + "BY gameDate ASC";
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
             stat.setInt(1, teamId);
-            if (Strings.isNullOrEmpty(gameDate) || getSeasonFromDate(countryId, leagueId, gameDate).equals(getLastSeason(countryId, leagueId))) {
+            if (Strings.isNullOrEmpty(gameDate)
+                    || getSeasonFromDate(countryId, leagueId, gameDate).equals(getLastSeason(countryId, leagueId))) {
                 stat.setString(2, getLastSeason(countryId, leagueId));
             } else {
                 String seasonFromDate = getSeasonFromDate(countryId, leagueId, gameDate);
@@ -273,11 +294,13 @@ public class GuiMysql extends Mysql {
     public List<Float> getAvgHomeScoreThisSeason(int teamId, int countryId, int leagueId, String gameDate) {
         final ArrayList<Float> returnValue = Lists.newArrayList();
         final String sql = "SELECT AVG(homeScore) as avgScoredSeason, AVG(awayScore) as avgConcededSeason FROM " +
-                "SoccerResults WHERE homeScore != -1 AND homeTeamId = ? AND season = ? AND DATE(gameDate) < ? ORDER " + "BY gameDate ASC";
+                "SoccerResults WHERE homeScore != -1 AND homeTeamId = ? AND season = ? AND DATE(gameDate) < ? ORDER "
+                + "BY gameDate ASC";
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
             stat.setInt(1, teamId);
 
-            if (Strings.isNullOrEmpty(gameDate) || getSeasonFromDate(countryId, leagueId, gameDate).equals(getLastSeason(countryId, leagueId))) {
+            if (Strings.isNullOrEmpty(gameDate)
+                    || getSeasonFromDate(countryId, leagueId, gameDate).equals(getLastSeason(countryId, leagueId))) {
                 stat.setString(2, getLastSeason(countryId, leagueId));
             } else {
                 String seasonFromDate = getSeasonFromDate(countryId, leagueId, gameDate);
@@ -392,9 +415,9 @@ public class GuiMysql extends Mysql {
     }
 
     public List<SimpleEntry<Integer, String>> getCountriesBySport(int sportId, String date) {
-        final String sql =
-                "SELECT * FROM Country WHERE id IN (SELECT DISTINCT(countryId) FROM SoccerResults WHERE " + "DATE" +
-                        "(gameDate) = ?) ORDER BY prio DESC, name ASC";
+        final String sql = "SELECT * FROM Country WHERE id IN (SELECT DISTINCT(countryId) FROM SoccerResults WHERE "
+                + "DATE" +
+                "(gameDate) = ?) ORDER BY prio DESC, name ASC";
         final ArrayList<SimpleEntry<Integer, String>> result = new ArrayList<>();
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
             if (date.equals("")) {
@@ -474,9 +497,9 @@ public class GuiMysql extends Mysql {
 
     public String getLastSeason(Integer countryId, Integer leagueId) {
         String season = "";
-        final String sql =
-                "SELECT season FROM SoccerResults WHERE leagueId = ? AND countryId = ? ORDER BY season " + "DESC " +
-                        "limit 1";
+        final String sql = "SELECT season FROM SoccerResults WHERE leagueId = ? AND countryId = ? ORDER BY season "
+                + "DESC " +
+                "limit 1";
         try (PreparedStatement stmt = conn.prepareStatement(sql)) {
             stmt.setInt(1, leagueId);
             stmt.setInt(2, countryId);
@@ -576,6 +599,33 @@ public class GuiMysql extends Mysql {
         return leagues;
     }
 
+    public List<League> getLeagues(int sportId) {
+        List<League> result = new ArrayList<>();
+        String sql = "SELECT l.*, c.name as cName FROM League l JOIN Country c ON l.countryId = c.id WHERE l.countryId IN (SELECT id FROM Country WHERE prio = 1) ORDER BY prio DESC, name ASC";
+
+        try (PreparedStatement stat = getConnection().prepareStatement(sql)) {
+
+            ResultSet rs = stat.executeQuery();
+
+            while (rs.next()) {
+                League l = new League(rs.getInt("id"), rs.getString("name"), rs.getInt("scoringDiffLastGame"),
+                        rs.getInt("scoringTotal"),
+                        rs.getInt("winLossRatioHomeAndAway"), rs.getInt("winLossRatio"), rs.getInt("drawDiffHomeAway"),
+                        rs.getInt("drawDiffTotalGoals"),
+                        rs.getInt("drawWinningForm"), rs.getInt("drawWinningFormHomeAway"));
+                l.setCountryName(rs.getString("cName"));
+                l.setPrio(rs.getBoolean("prio"));
+                result.add(l);
+            }
+
+        } catch (SQLException e) {
+            System.out.println("Someting wrong with sql " + sql);
+            e.printStackTrace();
+        }
+
+        return result;
+    }
+
     public List<SimpleEntry<Integer, String>> getLeaguesByDate(int sportId, int countryId, String date) {
         final ArrayList<AbstractMap.SimpleEntry<Integer, String>> leagues = Lists.newArrayList();
         final String sql = "SELECT id, name FROM League WHERE id IN (SELECT leagueId FROM SoccerResults WHERE " +
@@ -620,8 +670,8 @@ public class GuiMysql extends Mysql {
 
             final ResultSet rs = stat.executeQuery();
             while (rs.next()) {
-                final TeamStanding ts = new TeamStanding(rs.getString("teamName"), rs.getInt("wins"), rs.getInt("lost"
-                ), rs.getInt(DRAWS), rs.getInt("score"), rs.getFloat(Constants.HOME_SCORE),
+                final TeamStanding ts = new TeamStanding(rs.getString("teamName"), rs.getInt("wins"), rs.getInt("lost"),
+                        rs.getInt(DRAWS), rs.getInt("score"), rs.getFloat(Constants.HOME_SCORE),
                         rs.getFloat(Constants.AWAY_SCORE), rs.getFloat("goal_diff"));
                 result.add(ts);
             }
@@ -635,7 +685,7 @@ public class GuiMysql extends Mysql {
     }
 
     public List<SoccerMatch> getMatches(int sportId, Integer countryId, Integer leagueId, String date, String order,
-                                        boolean exactDate, boolean onlyPrio) {
+            boolean exactDate, boolean onlyPrio) {
         final ArrayList<SoccerMatch> matches = Lists.newArrayList();
         final String dateSql;
         final String orderSql = " ORDER BY gameDate " + order;
@@ -671,7 +721,8 @@ public class GuiMysql extends Mysql {
                 "homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res " + "INNER Join Team as " +
                 "hTeam ON res.homeTeamId = hTeam.id AND res.leagueId = hTeam.leagueId " + "INNER Join Team as aTeam " +
                 "ON res.awayTeamId = aTeam.id AND res.leagueId = hTeam.leagueId " + "INNER JOIN League l ON res" +
-                ".leagueId = l.id " + "INNER JOIN Country c ON res.countryId = c.id " + "WHERE " + dateSql + leagueSql + countrySql + onlyPrioSql + orderSql;
+                ".leagueId = l.id " + "INNER JOIN Country c ON res.countryId = c.id " + "WHERE " + dateSql + leagueSql
+                + countrySql + onlyPrioSql + orderSql;
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
             if (leagueId != null && countryId != null) {
                 stat.setInt(1, leagueId);
@@ -753,23 +804,24 @@ public class GuiMysql extends Mysql {
     }
 
     public Map<String, String> getPreviousMatches(int numberOfMatches, String homeTeamName, String awayTeamName,
-                                                  String date, int countryId, int leagueId) {
+            String date, int countryId, int leagueId) {
         Map<String, String> result = new HashMap<>();
 
         String homeTeamSql = "SELECT * FROM SoccerResults sr INNER JOIN Team t ON sr.homeTeamId = t.id WHERE t.name " +
                 "=" + " ? AND sr.leagueId = ? AND DATE(gameDate) < ? ORDER BY gameDate DESC limit ?";
         String awayTeamSql = "SELECT * FROM SoccerResults sr INNER JOIN Team t ON sr.awayTeamId = t.id WHERE t.name " +
                 "=" + " ? AND sr.leagueId = ? AND DATE(gameDate) < ? ORDER BY gameDate DESC limit ?";
-        String combinedSql =
-                "SELECT * FROM SoccerResults sr INNER JOIN Team homeTeam ON homeTeamId = homeTeam.id " + "INNER JOIN " +
-                        "Team awayTeam ON sr.awayTeamId = awayTeam.id WHERE homeTeam.name = ? AND awayTeam.name = " + "? AND sr.leagueId = ? AND DATE(gameDate) < ? ORDER BY gameDate DESC LIMIT ?";
+        String combinedSql = "SELECT * FROM SoccerResults sr INNER JOIN Team homeTeam ON homeTeamId = homeTeam.id "
+                + "INNER JOIN " +
+                "Team awayTeam ON sr.awayTeamId = awayTeam.id WHERE homeTeam.name = ? AND awayTeam.name = "
+                + "? AND sr.leagueId = ? AND DATE(gameDate) < ? ORDER BY gameDate DESC LIMIT ?";
         String combinedReverseSql = "SELECT * FROM SoccerResults sr INNER JOIN Team homeTeam ON homeTeamId = " +
                 "homeTeam" + ".id INNER JOIN Team awayTeam ON sr.awayTeamId = awayTeam.id WHERE homeTeam.name = ? AND" +
                 " awayTeam" + ".name = ? AND sr.leagueId = ? AND DATE(gameDate) < ? ORDER BY gameDate DESC LIMIT ?";
         try (PreparedStatement homeTeamStat = conn.prepareStatement(homeTeamSql);
-             PreparedStatement awayTeamStat = conn.prepareStatement(awayTeamSql);
-             PreparedStatement combinedStat = conn.prepareStatement(combinedSql);
-             PreparedStatement combinedReversedStat = conn.prepareStatement(combinedReverseSql);) {
+                PreparedStatement awayTeamStat = conn.prepareStatement(awayTeamSql);
+                PreparedStatement combinedStat = conn.prepareStatement(combinedSql);
+                PreparedStatement combinedReversedStat = conn.prepareStatement(combinedReverseSql);) {
 
             homeTeamStat.setString(1, homeTeamName);
             homeTeamStat.setInt(2, leagueId);
@@ -812,7 +864,8 @@ public class GuiMysql extends Mysql {
             }
             String combinedReversedMeets = "";
             while (combinedReversedTeamRs.next()) {
-                combinedReversedMeets += combinedReversedTeamRs.getInt(HOME_SCORE) + "-" + combinedReversedTeamRs.getInt(AWAY_SCORE) + ", ";
+                combinedReversedMeets += combinedReversedTeamRs.getInt(HOME_SCORE) + "-"
+                        + combinedReversedTeamRs.getInt(AWAY_SCORE) + ", ";
             }
             if (homeTeamMeets.length() > 2) {
                 result.put("PrevHomeTeam", homeTeamMeets.substring(0, homeTeamMeets.length() - 2));
@@ -845,9 +898,8 @@ public class GuiMysql extends Mysql {
     }
 
     public String getSeasonFromDate(int countryId, int leagueId, String gameDate) {
-        String sql =
-                "SELECT season FROM SoccerResults WHERE DATE(gameDate) = ? AND countryId = ? AND leagueId = ? " +
-                        "LIMIT 1";
+        String sql = "SELECT season FROM SoccerResults WHERE DATE(gameDate) = ? AND countryId = ? AND leagueId = ? " +
+                "LIMIT 1";
         String returnValue = "";
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
             if (Strings.isNullOrEmpty(gameDate)) {
@@ -934,11 +986,11 @@ public class GuiMysql extends Mysql {
                 while (rs.next()) {
                     final float diff = rs.getFloat("diff");
                     final int numGoals = rs.getInt("numGoals");
-                    final Float formatted =
-                            round(BigDecimal.valueOf(diff), INCREMENT, RoundingMode.HALF_UP).floatValue();
+                    final Float formatted = round(BigDecimal.valueOf(diff), INCREMENT, RoundingMode.HALF_UP)
+                            .floatValue();
 
-                    final OverUnder entry =
-                            result.stream().filter(ou -> ou.getKey().compareTo(formatted) == 0).findFirst().orElse(new OverUnder(formatted));
+                    final OverUnder entry = result.stream().filter(ou -> ou.getKey().compareTo(formatted) == 0)
+                            .findFirst().orElse(new OverUnder(formatted));
                     entry.addGoalStat(numGoals);
                     result.add(entry);
                 }
@@ -989,8 +1041,8 @@ public class GuiMysql extends Mysql {
                     final float diff = rs.getFloat("roundedDiff");
                     final int numGoals = rs.getInt("numGoals");
 
-                    final OverUnder entry =
-                            result.stream().filter(ou -> ou.getKey().compareTo(diff) == 0).findFirst().orElse(new OverUnder(diff));
+                    final OverUnder entry = result.stream().filter(ou -> ou.getKey().compareTo(diff) == 0).findFirst()
+                            .orElse(new OverUnder(diff));
                     entry.addGoalStat(numGoals);
                     entry.setDraws(rs.getInt(DRAWS));
                     entry.setTotalGames(rs.getInt("numGames"));
@@ -1106,7 +1158,9 @@ public class GuiMysql extends Mysql {
                 " awayTeamName, " + "league.name as leagueName, " + "country.name as countryName, " + "country.prio " +
                 "as prio " + "FROM " + sportResultTable + " as res " + "Join Team as hTeam ON res.homeTeamId = hTeam" +
                 ".id " + "Join Team as aTeam ON res.awayTeamId = aTeam.id " + "Join League as league ON res.leagueId " +
-                "= league.id " + "Join Country as country ON res.countryId = country.id " + "WHERE homeScore = -1 " + dateSql + "AND league.name NOT LIKE '%cup%' AND league.name NOT LIKE '%group%' AND league.prio = 1 " + "ORDER BY country.prio DESC, country.name ASC";
+                "= league.id " + "Join Country as country ON res.countryId = country.id " + "WHERE homeScore = -1 "
+                + dateSql + "AND league.name NOT LIKE '%cup%' AND league.name NOT LIKE '%group%' AND league.prio = 1 "
+                + "ORDER BY country.prio DESC, country.name ASC";
 
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
 
@@ -1305,7 +1359,6 @@ public class GuiMysql extends Mysql {
     public List<SoccerMatchAnalysis> getMatchesForStryktipset(String date) {
         List<SoccerMatchAnalysis> result = new ArrayList<>();
 
-
         return result;
     }
 
@@ -1322,7 +1375,8 @@ public class GuiMysql extends Mysql {
             while (rs.next()) {
                 match = new SoccerMatch(rs.getInt("id"), getTeam(rs.getInt(HOME_TEAM_ID)), getTeam(rs.getInt(
                         AWAY_TEAM_ID)), rs.getFloat(ODDS_1), rs.getFloat(ODDS_X), rs.getFloat(ODDS_2), rs.getInt(
-                                HOME_SCORE), rs.getInt(AWAY_SCORE), LocalDateTime.parse(rs.getString("gameDate")),
+                                HOME_SCORE),
+                        rs.getInt(AWAY_SCORE), LocalDateTime.parse(rs.getString("gameDate")),
                         rs.getString(SEASON));
             }
         } catch (SQLException e) {
@@ -1354,7 +1408,7 @@ public class GuiMysql extends Mysql {
     }
 
     public List<SoccerMatchCalcBestValue> getMatchesForCalcBestValues(Integer countryId, Integer leagueId,
-                                                                      String date) {
+            String date) {
 
         final ArrayList<SoccerMatchCalcBestValue> matches = Lists.newArrayList();
 
@@ -1459,46 +1513,46 @@ public class GuiMysql extends Mysql {
                 ".homeScore, " +
                 "sr.awayScore, sr.gameDate, sr.season, " +
                 "(SELECT COALESCE(sum(CASE " +
-                    "WHEN sr.homeTeamId = ih.homeTeamId THEN homeScore " +
-                    "WHEN sr.homeTeamId = ih.awayTeamId THEN awayScore END), 0) " +
+                "WHEN sr.homeTeamId = ih.homeTeamId THEN homeScore " +
+                "WHEN sr.homeTeamId = ih.awayTeamId THEN awayScore END), 0) " +
                 "FROM (" +
-                    "SELECT * FROM SoccerResults sr2 " +
-                    "WHERE (sr.homeTeamId = sr2.homeTeamId OR sr.homeTeamId = sr2.awayTeamId) AND " +
-                    "sr2.gameDate < sr.gameDate ORDER BY gameDate DESC LIMIT ?) as ih) as homeRes, " +
+                "SELECT * FROM SoccerResults sr2 " +
+                "WHERE (sr.homeTeamId = sr2.homeTeamId OR sr.homeTeamId = sr2.awayTeamId) AND " +
+                "sr2.gameDate < sr.gameDate ORDER BY gameDate DESC LIMIT ?) as ih) as homeRes, " +
                 "(SELECT COALESCE(sum(CASE " +
-                    "WHEN sr.awayTeamId = ia.awayTeamId THEN awayScore " +
-                    "WHEN sr.awayTeamId = ia.homeTeamId THEN homeScore " +
+                "WHEN sr.awayTeamId = ia.awayTeamId THEN awayScore " +
+                "WHEN sr.awayTeamId = ia.homeTeamId THEN homeScore " +
                 "END), 0) " +
                 "FROM (SELECT * FROM SoccerResults sr2 " +
                 "WHERE " +
-                    "(sr.awayTeamId = sr2.awayTeamId OR sr.awayTeamId = sr2.homeTeamId) AND " +
-                    "sr2.gameDate < sr.gameDate ORDER BY gameDate DESC LIMIT ?) as ia) as awayRes " +
+                "(sr.awayTeamId = sr2.awayTeamId OR sr.awayTeamId = sr2.homeTeamId) AND " +
+                "sr2.gameDate < sr.gameDate ORDER BY gameDate DESC LIMIT ?) as ia) as awayRes " +
                 "FROM SoccerResults sr " +
                 "WHERE LeagueId = ? AND " +
                 "DATE(gameDate) < ? AND homeScore >= 0 AND awayScore >= 0 " +
                 "ORDER BY gameDate ASC";
 
-            try (PreparedStatement stat = conn.prepareStatement(sql)) {
-                stat.setInt(1,limit);
-                stat.setInt(2,limit);
-                stat.setInt(3, leagueId);
-                stat.setString(4,date);
+        try (PreparedStatement stat = conn.prepareStatement(sql)) {
+            stat.setInt(1, limit);
+            stat.setInt(2, limit);
+            stat.setInt(3, leagueId);
+            stat.setString(4, date);
 
-                ResultSet rs = stat.executeQuery();
+            ResultSet rs = stat.executeQuery();
 
-                while (rs.next()) {
-                    SoccerMatchAnalysis sma = new SoccerMatchAnalysis(new SoccerMatch(rs.getInt("id"),
-                            GuiMysql.getInstance().getTeam(rs.getInt(HOME_TEAM_ID)),
-                            GuiMysql.getInstance().getTeam(rs.getInt(AWAY_TEAM_ID)),
-                            rs.getFloat(ODDS_1), rs.getFloat(ODDS_X), rs.getFloat(ODDS_2), rs.getInt(HOME_SCORE),
-                            rs.getInt(AWAY_SCORE), LocalDateTime.parse(rs.getString(GAME_DATE)), rs.getString(SEASON)));
-                    sma.setScoringTotalValue(rs.getInt("homeRes") - rs.getInt("awayRes"));
-
-                    addTotalGoalStat(sma, limit, leagueId, rs.getInt("homeRes") - rs.getInt("awayRes"));
-                }
-            } catch (SQLException e) {
-                e.printStackTrace();
+            while (rs.next()) {
+                SoccerMatchAnalysis sma = new SoccerMatchAnalysis(new SoccerMatch(rs.getInt("id"),
+                        GuiMysql.getInstance().getTeam(rs.getInt(HOME_TEAM_ID)),
+                        GuiMysql.getInstance().getTeam(rs.getInt(AWAY_TEAM_ID)),
+                        rs.getFloat(ODDS_1), rs.getFloat(ODDS_X), rs.getFloat(ODDS_2), rs.getInt(HOME_SCORE),
+                        rs.getInt(AWAY_SCORE), LocalDateTime.parse(rs.getString(GAME_DATE)), rs.getString(SEASON)));
+                sma.setScoringTotalValue(rs.getInt("homeRes") - rs.getInt("awayRes"));
+
+                addTotalGoalStat(sma, limit, leagueId, rs.getInt("homeRes") - rs.getInt("awayRes"));
             }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
 
         return result;
     }
@@ -1524,10 +1578,10 @@ public class GuiMysql extends Mysql {
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
             stat.setInt(1, leagueId);
             stat.setInt(2, diff);
-            stat.setInt(3,lookback);
-            stat.setInt(4,homeWin);
-            stat.setInt(5,draw);
-            stat.setInt(6,awayWin);
+            stat.setInt(3, lookback);
+            stat.setInt(4, homeWin);
+            stat.setInt(5, draw);
+            stat.setInt(6, awayWin);
 
             stat.execute();
         } catch (SQLException e) {
@@ -1594,6 +1648,7 @@ public class GuiMysql extends Mysql {
             addWinLossRatioStat(match, leagueId, lookback, diff);
         }
     }
+
     public void addWinLossRatioStat(SoccerMatchAnalysis match, int leagueId, int lookback, int diff) {
         String sql = "INSERT INTO WinLossRatioStatistics (lookback, leagueId, diff, homeWins, draws, " +
                 "awayWins) VALUES" +
@@ -1640,9 +1695,10 @@ public class GuiMysql extends Mysql {
             while (rs.next()) {
                 Team homeTeam = getTeam(rs.getInt(HOME_TEAM_ID));
                 Team awayTeam = getTeam(rs.getInt(AWAY_TEAM_ID));
-                result.add(new SoccerMatchAnalysis(new SoccerMatch(rs.getInt("id"), homeTeam, awayTeam, rs.getFloat(ODDS_1),
-                        rs.getFloat(ODDS_X), rs.getFloat(ODDS_2), rs.getInt(HOME_SCORE), rs.getInt(AWAY_SCORE),
-                        LocalDateTime.parse(rs.getString(GAME_DATE)), rs.getString(SEASON))));
+                result.add(new SoccerMatchAnalysis(
+                        new SoccerMatch(rs.getInt("id"), homeTeam, awayTeam, rs.getFloat(ODDS_1),
+                                rs.getFloat(ODDS_X), rs.getFloat(ODDS_2), rs.getInt(HOME_SCORE), rs.getInt(AWAY_SCORE),
+                                LocalDateTime.parse(rs.getString(GAME_DATE)), rs.getString(SEASON))));
             }
         } catch (SQLException e) {
             e.printStackTrace();
@@ -1721,9 +1777,9 @@ public class GuiMysql extends Mysql {
                 "lookback = ? and diff = ?";
 
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
-            stat.setInt(1,leagueId);
+            stat.setInt(1, leagueId);
             stat.setInt(2, lookback);
-            stat.setInt(3,diff);
+            stat.setInt(3, diff);
 
             ResultSet rs = stat.executeQuery();
             while (rs.next()) {
@@ -1736,14 +1792,15 @@ public class GuiMysql extends Mysql {
             e.printStackTrace();
         }
     }
-    public void getTotalGoalStat(Percentages percentages,int leagueId, int lookback, int diff) {
+
+    public void getTotalGoalStat(Percentages percentages, int leagueId, int lookback, int diff) {
         String sql = "SELECT homeWins, draws, awayWins FROM TotalGoalStatistics WHERE leagueId = ? AND " +
                 "lookback = ? and diff = ?";
 
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
-            stat.setInt(1,leagueId);
+            stat.setInt(1, leagueId);
             stat.setInt(2, lookback);
-            stat.setInt(3,diff);
+            stat.setInt(3, diff);
 
             ResultSet rs = stat.executeQuery();
             while (rs.next()) {
@@ -1756,14 +1813,15 @@ public class GuiMysql extends Mysql {
             e.printStackTrace();
         }
     }
-    public void getWinLossRatioHomeAndAwayStatistics(Percentages percentages,int leagueId, int lookback, int diff) {
+
+    public void getWinLossRatioHomeAndAwayStatistics(Percentages percentages, int leagueId, int lookback, int diff) {
         String sql = "SELECT homeWins, draws, awayWins FROM WinLossRatioHomeAndAwayStatistics WHERE leagueId = ? AND " +
                 "lookback = ? and diff = ?";
 
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
-            stat.setInt(1,leagueId);
+            stat.setInt(1, leagueId);
             stat.setInt(2, lookback);
-            stat.setInt(3,diff);
+            stat.setInt(3, diff);
 
             ResultSet rs = stat.executeQuery();
             while (rs.next()) {
@@ -1776,14 +1834,15 @@ public class GuiMysql extends Mysql {
             e.printStackTrace();
         }
     }
+
     public void getWinLossRatioStatisticsGames(Percentages percentages, int leagueId, int lookback, int diff) {
         String sql = "SELECT homeWins, draws, awayWins FROM WinLossRatioStatistics WHERE leagueId = ? AND " +
                 "lookback = ? and diff = ?";
 
         try (PreparedStatement stat = conn.prepareStatement(sql)) {
-            stat.setInt(1,leagueId);
+            stat.setInt(1, leagueId);
             stat.setInt(2, lookback);
-            stat.setInt(3,diff);
+            stat.setInt(3, diff);
 
             ResultSet rs = stat.executeQuery();
             while (rs.next()) {
@@ -1796,4 +1855,31 @@ public class GuiMysql extends Mysql {
             e.printStackTrace();
         }
     }
+
+    public void updateLegueSetting(int leagueId, String setting, int value) {
+        String sql = "UPDATE League SET " + setting + " = ? WHERE id = ?";
+        String selectSql = "SELECT " + setting + " FROM League WHERE id = ?";
+
+        try (PreparedStatement stat = getConnection().prepareStatement(sql);
+                PreparedStatement selectStat = getConnection().prepareStatement(selectSql)) {
+            selectStat.setInt(1, leagueId);
+
+            ResultSet rs = selectStat.executeQuery();
+
+            int oldValue = 0;
+            while (rs.next()) {
+                oldValue = rs.getInt(1);
+            }
+
+            if (oldValue != value) {
+                stat.setInt(1, value);
+                stat.setInt(2, leagueId);
+
+                int res = stat.executeUpdate();
+                settingsLogger.log(Level.INFO, String.format("Updated %s to %s", setting, value));
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 40 - 0
OddsJavaFx/src/fxml/Analyser.fxml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.ScrollPane?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.BorderPane?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.control.TextField?>
+
+<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.AnalyzerController">
+   <children>
+      <BorderPane prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+         <bottom>
+            <Button mnemonicParsing="false" onAction="#runTest" text="Execute" BorderPane.alignment="CENTER" />
+         </bottom>
+         <left>
+            <VBox BorderPane.alignment="CENTER">
+               <children>
+                  <Label text="Legues" />
+                  <ScrollPane hbarPolicy="NEVER" minWidth="200.0">
+                    <content>
+                        <VBox fx:id="leagueList" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
+                    </content>
+                  </ScrollPane>
+               </children>
+            </VBox>
+         </left>
+         <top>
+            <HBox>
+            <children>
+               <TextField fx:id="bankTextField"/>
+               <TextField fx:id="percentTextField"/>
+               </children>
+            </HBox>
+         </top>
+      </BorderPane>
+   </children>
+</AnchorPane>

+ 5 - 0
OddsJavaFx/src/fxml/OddsFxBuilder.fxml

@@ -129,6 +129,11 @@
                           <fx:include fx:id="stryktipset" source="Stryktipset.fxml" />
                       </content>
                   </Tab>
+                  <Tab text="Analyser">
+                      <content>
+                          <fx:include fx:id="analyser" source="Analyser.fxml" />
+                      </content>
+                  </Tab>
               </tabs>
             </TabPane>
          </center>

+ 3 - 1
OddsJavaFx/src/fxml/Stryktipset.fxml

@@ -4,12 +4,13 @@
 <?import javafx.scene.control.DatePicker?>
 <?import javafx.scene.control.SplitPane?>
 <?import javafx.scene.control.TableView?>
+<?import javafx.scene.control.TextField?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.FlowPane?>
 <?import javafx.scene.layout.Pane?>
 <?import javafx.scene.layout.VBox?>
 
-<AnchorPane xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.StryktipsetController">
+<AnchorPane xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.StryktipsetController">
    <children>
       <VBox AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
          <children>
@@ -31,6 +32,7 @@
             <Pane prefHeight="200.0" prefWidth="200.0">
                <children>
                   <Button mnemonicParsing="false" onAction="#calculateTestData" text="TestButton" />
+                  <TextField layoutX="91.0" layoutY="88.0" />
                </children>
             </Pane>
          </children>

+ 1 - 1
OddsJavaFx/src/fxml/Testing.fxml

@@ -68,7 +68,7 @@
                                     <Button onAction="#relevanceTest" text="Test for Relevance" />
                                     <Button onAction="#analysisTets" text="Analysis Test" />
                                     <Button onAction="#analysisDrawTests" text="Analysis DRAW Test" />
-                                    
+                                    <Button onAction="#updatePrioLeagues" prefWidth="75.0" text="Update Prio League Settings" />
                                  </children>
                               </VBox>
                            </children>

+ 20 - 0
OddsJavaFx/src/objects/League.java

@@ -1,5 +1,8 @@
 package objects;
 
+import javafx.scene.control.CheckBox;
+import javafx.scene.layout.HBox;
+
 public class League {
 
     int leagueId;
@@ -23,6 +26,8 @@ public class League {
     private int drawTotalGoals;
     private int drawWinningForm;
     private int drawWinningFormHomeAway;
+    private String countryName;
+    private boolean prio;
 
     public League(int leagueId, String leagueName, int scoringDiffLastGame,
             int scoringTotal, int winLossRatioHomeAndAway, int winLossRatio, int drawDiffHomeAway, int drawTotalGoals,
@@ -183,4 +188,19 @@ public class League {
         this.winLossRatioHomeAndAway = winLossRatioHomeAndAway;
     }
 
+    public void setCountryName(String countryName) {
+        this.countryName = countryName;
+    }
+
+    public String getCountryName() {
+        return countryName;
+    }
+
+    public boolean isPrio() {
+        return prio;
+    }
+
+    public void setPrio(boolean prio) {
+        this.prio = prio;
+    }
 }

+ 10 - 7
OddsJavaFx/src/parser/Svenskaspel.java

@@ -29,10 +29,10 @@ public class Svenskaspel {
         this.date = date;
         String url = "https://spela.svenskaspel.se/stryktipset/resultat/" + date + "/statistik";
 
-        //RemoteWebDriver seleniumDriver = getSeleniumDriver();
-        //seleniumDriver.get(url);
+        // RemoteWebDriver seleniumDriver = getSeleniumDriver();
+        // seleniumDriver.get(url);
 
-        WebDriverManager.chromedriver().setup();
+        WebDriverManager.chromedriver().driverVersion("124.0.6367.60").setup();
         ChromeDriver driver = new ChromeDriver(getChromeOptions());
         driver.get(url);
 
@@ -76,7 +76,8 @@ public class Svenskaspel {
             try {
                 matchAnalyses.add(new SoccerMatchAnalysis(match));
             } catch (NullPointerException e) {
-                System.out.println("Failed to get team info between " + match.getHomeTeamName() + "-" + match.getAwayTeamName());
+                System.out.println(
+                        "Failed to get team info between " + match.getHomeTeamName() + "-" + match.getAwayTeamName());
             }
         }
 
@@ -125,9 +126,11 @@ public class Svenskaspel {
 
         // Changing the user agent / browser fingerprint
         options.addArguments("window-size=1920,1080");
-        options.addArguments(
-                "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36");
-
+        /*
+         * options.addArguments(
+         * "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
+         * );
+         */
         // Other
         options.addArguments("disable-infobars");
 

+ 110 - 60
OddsJavaFx/src/tests/RelevanceTest.java

@@ -9,6 +9,7 @@ import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.TreeMap;
 
+import data.GuiMysql;
 import data.TestDatabase;
 import objects.SoccerMatch;
 import objects.SoccerMatchAnalysis;
@@ -95,67 +96,116 @@ public class RelevanceTest extends TestClass {
                 analyzeDiffTotalGoals(seasonMatches.getValue(), resultsDiffTotalGoals);
                 analyzeWinnigForm(seasonMatches.getValue(), resultsWinningForm);
                 analyzeWinnigFormHomeVsAway(seasonMatches.getValue(), resultsWinnignFormHomeVsAway);
-//            System.out.println("Season " + seasonMatches.getKey());
-//            analyzeCombination(seasonMatches.getValue());
-//            break;
+                // System.out.println("Season " + seasonMatches.getKey());
+                // analyzeCombination(seasonMatches.getValue());
+                // break;
             }
         }
 
         resultsCombined.forEach((k, v) -> System.out.println(k + " result " + v));
 
-        resultsDiffHomeAway.stream().sorted((r1, r2) -> Float.compare(r2.getResult(), r1.getResult()))
-                .limit(5)
-                .forEach(e -> System.out
-                        .println("resultsDiffHomeAway Lookback " + e.getLookback() + " value " + e.getResult()));
-        resultsDiffTotalGoals.stream().sorted((r1, r2) -> Float.compare(r2.getResult(), r1.getResult()))
-                .limit(5)
-                .forEach(e -> System.out
-                        .println("resultsDiffTotalGoals Lookback " + e.getLookback() + " value " + e.getResult()));
-
-        resultsWinningForm.stream().sorted((r1, r2) -> Float.compare(r2.getResult(), r1.getResult()))
-                .limit(5)
-                .forEach(e -> System.out
-                        .println("resultsWinningForm Lookback " + e.getLookback() + " value " + e.getResult()));
-
-        resultsWinnignFormHomeVsAway.stream().sorted((r1, r2) -> Float.compare(r2.getResult(), r1.getResult()))
-                .limit(5)
-                .forEach(e -> System.out
-                        .println("resultsWinnignFormHomeVsAway Lookback " + e.getLookback() + " value "
-                                + e.getResult()));
-
-        resultsDiffHomeAway.stream()
-                .sorted((r1, r2) -> Float
-                        .compare(r2.getDrawPercent(), r1.getDrawPercent()))
-                .limit(5)
-                .forEach(e -> System.out
-                        .println("resultsDiffHomeAway Draws correct " + e.getDrawPercent()
-                                + " played "
-                                + e.getDrawsPlayed() + " lookback " + e.getLookback()));
-
-        resultsDiffTotalGoals.stream()
-                .sorted((r1, r2) -> Float.compare(r2.getDrawPercent(), r1.getDrawPercent()))
-                .limit(5)
-                .forEach(e -> System.out
-                        .println("resultsDiffTotalGoals Draws correct " + e.getDrawPercent()
-                                + " played "
-                                + e.getDrawsPlayed() + " lookback " + e.getLookback()));
-
-        resultsWinningForm.stream()
-                .sorted((r1, r2) -> Float
-                        .compare(r2.getDrawPercent(), r1.getDrawPercent()))
-                .limit(5)
-                .forEach(e -> System.out
-                        .println("resultsWinningForm Draws correct " + e.getDrawPercent()
-                                + " played "
-                                + e.getDrawsPlayed() + " lookback " + e.getLookback()));
-
-        resultsWinnignFormHomeVsAway.stream()
-                .sorted((r1, r2) -> Float.compare(r2.getDrawPercent(), r1.getDrawPercent()))
-                .limit(5)
-                .forEach(e -> System.out
-                        .println("resultsWinnignFormHomeVsAway Draws correct " + e.getDrawPercent()
-                                + " played "
-                                + e.getDrawsPlayed() + " lookback " + e.getLookback()));
+        // resultsDiffHomeAway.stream().sorted((r1, r2) -> Float.compare(r2.getResult(),
+        // r1.getResult()))
+        // .limit(5)
+        // .forEach(e -> System.out
+        // .println("scoringDiffLastGame Lookback " + e.getLookback() + " value " +
+        // e.getResult()));
+
+        GuiMysql.getInstance().updateLegueSetting(leagueId, "scoringDiffLastGame", resultsDiffHomeAway.stream()
+                .sorted((r1, r2) -> Float.compare(r2.getResult(), r1.getResult())).findFirst().get().getLookback());
+
+        // resultsDiffTotalGoals.stream().sorted((r1, r2) ->
+        // Float.compare(r2.getResult(), r1.getResult()))
+        // .limit(5)
+        // .forEach(e -> System.out
+        // .println("scoringTotal Lookback " + e.getLookback() + " value " +
+        // e.getResult()));
+
+        GuiMysql.getInstance().updateLegueSetting(leagueId, "scoringTotal", resultsDiffTotalGoals.stream()
+                .sorted((r1, r2) -> Float.compare(r2.getResult(), r1.getResult())).findFirst().get().getLookback());
+
+        // resultsWinningForm.stream().sorted((r1, r2) -> Float.compare(r2.getResult(),
+        // r1.getResult()))
+        // .limit(5)
+        // .forEach(e -> System.out
+        // .println("winLossRatio Lookback " + e.getLookback() + " value " +
+        // e.getResult()));
+
+        GuiMysql.getInstance().updateLegueSetting(leagueId, "winLossRatio", resultsWinningForm.stream()
+                .sorted((r1, r2) -> Float.compare(r2.getResult(), r1.getResult())).findFirst().get().getLookback());
+
+        /*
+         * resultsWinnignFormHomeVsAway.stream().sorted((r1, r2) ->
+         * Float.compare(r2.getResult(), r1.getResult()))
+         * .limit(5)
+         * .forEach(e -> System.out
+         * .println("winLossRatioHomeAndAway Lookback " + e.getLookback() + " value "
+         * + e.getResult()));
+         */
+        GuiMysql.getInstance().updateLegueSetting(leagueId, "winLossRatioHomeAndAway",
+                resultsWinnignFormHomeVsAway.stream()
+                        .sorted((r1, r2) -> Float.compare(r2.getResult(), r1.getResult())).findFirst().get()
+                        .getLookback());
+
+        /*
+         * resultsDiffHomeAway.stream()
+         * .sorted((r1, r2) -> Float
+         * .compare(r2.getDrawPercent(), r1.getDrawPercent()))
+         * .limit(5)
+         * .forEach(e -> System.out
+         * .println("Draws drawDiffHomeAway correct " + e.getDrawPercent()
+         * + " played "
+         * + e.getDrawsPlayed() + " lookback " + e.getLookback()));
+         */
+
+        GuiMysql.getInstance().updateLegueSetting(leagueId, "drawDiffHomeAway",
+                resultsDiffHomeAway.stream()
+                        .sorted((r1, r2) -> Float.compare(r2.getDrawPercent(), r1.getDrawPercent())).findFirst().get()
+                        .getLookback());
+
+        /*
+         * resultsDiffTotalGoals.stream()
+         * .sorted((r1, r2) -> Float.compare(r2.getDrawPercent(), r1.getDrawPercent()))
+         * .limit(5)
+         * .forEach(e -> System.out
+         * .println("Draws drawDiffTotalGoals correct " + e.getDrawPercent()
+         * + " played "
+         * + e.getDrawsPlayed() + " lookback " + e.getLookback()));
+         */
+        GuiMysql.getInstance().updateLegueSetting(leagueId, "drawDiffTotalGoals",
+                resultsDiffTotalGoals.stream()
+                        .sorted((r1, r2) -> Float.compare(r2.getDrawPercent(), r1.getDrawPercent())).findFirst().get()
+                        .getLookback());
+
+        /*
+         * resultsWinningForm.stream()
+         * .sorted((r1, r2) -> Float
+         * .compare(r2.getDrawPercent(), r1.getDrawPercent()))
+         * .limit(5)
+         * .forEach(e -> System.out
+         * .println("Draw drawWinningForm correct " + e.getDrawPercent()
+         * + " played "
+         * + e.getDrawsPlayed() + " lookback " + e.getLookback()));
+         */
+
+        GuiMysql.getInstance().updateLegueSetting(leagueId, "drawWinningForm",
+                resultsWinningForm.stream()
+                        .sorted((r1, r2) -> Float.compare(r2.getDrawPercent(), r1.getDrawPercent())).findFirst().get()
+                        .getLookback());
+
+        /*
+         * resultsWinnignFormHomeVsAway.stream()
+         * .sorted((r1, r2) -> Float.compare(r2.getDrawPercent(), r1.getDrawPercent()))
+         * .limit(5)
+         * .forEach(e -> System.out
+         * .println("drawWinningFormHomeAway Draws correct " + e.getDrawPercent()
+         * + " played "
+         * + e.getDrawsPlayed() + " lookback " + e.getLookback()));
+         */
+        GuiMysql.getInstance().updateLegueSetting(leagueId, "drawWinningFormHomeAway",
+                resultsWinnignFormHomeVsAway.stream()
+                        .sorted((r1, r2) -> Float.compare(r2.getDrawPercent(), r1.getDrawPercent())).findFirst().get()
+                        .getLookback());
 
         System.out.println("Best percent " + bestPercent + " best lookback " + bestLookback);
 
@@ -178,7 +228,7 @@ public class RelevanceTest extends TestClass {
         TreeMap<Float, Integer> lossesSorted = sortMap(lossesOnDiff);
         TreeMap<Float, Integer> winsSorted = sortMap(winsOnDiff);
 
-        printResults(winsSorted, lossesSorted, true, resultsDiffHomeAway);
+        // printResults(winsSorted, lossesSorted, true, resultsDiffHomeAway);
     }
 
     private TreeMap<Float, Integer> sortMap(Map<Float, Integer> map) {
@@ -209,7 +259,7 @@ public class RelevanceTest extends TestClass {
         TreeMap<Float, Integer> winsSorted = sortMap(winsOnDiff);
         TreeMap<Float, Integer> lossesSorted = sortMap(lossesOnDiff);
 
-        printResults(winsSorted, lossesSorted, true, resultsDiffTotalGoals);
+        // printResults(winsSorted, lossesSorted, true, resultsDiffTotalGoals);
     }
 
     private void analyzeWinnigForm(List<SoccerMatch> matches, List<Res> resultsWinningForm) {
@@ -234,7 +284,7 @@ public class RelevanceTest extends TestClass {
         TreeMap<Float, Integer> winsSorted = sortMap(winsOnDiff);
         TreeMap<Float, Integer> lossesSorted = sortMap(lossesOnDiff);
 
-        printResults(winsSorted, lossesSorted, true, resultsWinningForm);
+        // printResults(winsSorted, lossesSorted, true, resultsWinningForm);
     }
 
     private void analyzeWinnigFormHomeVsAway(List<SoccerMatch> matches,
@@ -260,7 +310,7 @@ public class RelevanceTest extends TestClass {
         TreeMap<Float, Integer> winsSorted = sortMap(winsOnDiff);
         TreeMap<Float, Integer> lossesSorted = sortMap(lossesOnDiff);
 
-        printResults(winsSorted, lossesSorted, true, resultsWinnignFormHomeVsAway);
+        // printResults(winsSorted, lossesSorted, true, resultsWinnignFormHomeVsAway);
     }
 
     private void analyzeCombination(List<SoccerMatch> matches) {