Pārlūkot izejas kodu

Adjust for table position

Axel Nordh 3 gadi atpakaļ
vecāks
revīzija
58b854cde7
31 mainītis faili ar 1077 papildinājumiem un 450 dzēšanām
  1. 0 17
      Odds/.classpath
  2. 3 3
      Odds/pom.xml
  3. 3 1
      OddsJavaFx/src/controllers/MainController.java
  4. 37 0
      OddsJavaFx/src/controllers/MatchStatTabController.java
  5. 43 7
      OddsJavaFx/src/controllers/MatchTabController.java
  6. 99 2
      OddsJavaFx/src/controllers/PastResultsController.java
  7. 13 0
      OddsJavaFx/src/controllers/StatisticsTabController.java
  8. 30 28
      OddsJavaFx/src/controllers/TestsController.java
  9. 56 23
      OddsJavaFx/src/data/GuiMysql.java
  10. 114 0
      OddsJavaFx/src/data/TestDatabase.java
  11. 2 1
      OddsJavaFx/src/fxml/OddsFxBuilder.fxml
  12. 3 1
      OddsJavaFx/src/fxml/PastResults.fxml
  13. 1 0
      OddsJavaFx/src/fxml/Testing.fxml
  14. 20 8
      OddsJavaFx/src/objects/BetDTO.java
  15. 19 21
      OddsJavaFx/src/objects/SoccerMatch.java
  16. 34 0
      OddsJavaFx/src/objects/Team.java
  17. 22 29
      OddsJavaFx/src/tests/AwayTeamWinTest.java
  18. 18 24
      OddsJavaFx/src/tests/AwayTests.java
  19. 25 27
      OddsJavaFx/src/tests/AwayTests2.java
  20. 22 29
      OddsJavaFx/src/tests/DrawTeamTest.java
  21. 18 24
      OddsJavaFx/src/tests/DrawTests.java
  22. 24 26
      OddsJavaFx/src/tests/DrawTests2.java
  23. 39 47
      OddsJavaFx/src/tests/HomeDrawAwayTest.java
  24. 22 29
      OddsJavaFx/src/tests/HomeTeamWinTest.java
  25. 18 24
      OddsJavaFx/src/tests/HomeTests.java
  26. 20 25
      OddsJavaFx/src/tests/HomeTests2.java
  27. 185 0
      OddsJavaFx/src/tests/LeagueTablePositionTest.java
  28. 26 32
      OddsJavaFx/src/tests/PrioCountriesAll.java
  29. 36 22
      OddsJavaFx/src/tests/TestClass.java
  30. 53 0
      OddsJavaFx/src/tests/objects/LeagueDTO.java
  31. 72 0
      OddsJavaFx/src/tests/objects/Standing.java

+ 0 - 17
Odds/.classpath

@@ -6,7 +6,6 @@
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="lib" path="F:/Resources/JAVA/MysqlConnector/mysql-connector-java-8.0.17.jar"/>
 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
@@ -17,21 +16,5 @@
 			<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="output" path="target/classes"/>
 </classpath>

+ 3 - 3
Odds/pom.xml

@@ -15,7 +15,7 @@
         </configuration>
       </plugin>
 
-      <plugin>
+   <!--  <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
           <executions>
@@ -32,7 +32,7 @@
               </execution>
           </executions>
       </plugin>
-
+-->
     </plugins>
   </build>
 
@@ -55,7 +55,7 @@
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
-      <version>8.0.29</version>
+      <version>8.0.30</version>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>

+ 3 - 1
OddsJavaFx/src/controllers/MainController.java

@@ -36,6 +36,7 @@ public class MainController implements Initializable {
 	public static final String SPORT = "Sport";
 	public static final String SOCCER = "soccer";
 	public static final String LEAGUE = "League";
+	public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
 	@FXML private MatchTabController matchTabController;
 	@FXML private StatisticsTabController statTabController;
 	@FXML private MatchStatTabController matchStatTabController;
@@ -165,7 +166,8 @@ public class MainController implements Initializable {
 			}
 			matchTabController.filterLeagueMatches(leagueSelector.getValue(), getCountryIdFromSelector());
 			updateStatsTableButton.setDisable(false);
-			final List<Float> leagueAvareges = GuiMysql.getInstance().getLeagueAvarages(getLeagueIdFromSelector(), getCountryIdFromSelector());
+			final List<Float> leagueAvareges = GuiMysql.getInstance().getLeagueAvarages(getLeagueIdFromSelector(), getCountryIdFromSelector(),
+					"NOW()");
 
 			avgLeagueHomeScoreTxt.setText(leagueAvareges.get(0).toString());
 			avgLeagueAwayScoreTxt.setText(leagueAvareges.get(1).toString());

+ 37 - 0
OddsJavaFx/src/controllers/MatchStatTabController.java

@@ -3,6 +3,7 @@ package controllers;
 import java.net.URL;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.ResourceBundle;
 
 import com.google.common.collect.Maps;
@@ -10,8 +11,10 @@ import com.google.common.collect.Maps;
 import data.GuiMysql;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
+import javafx.scene.control.SelectionMode;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
+import javafx.scene.control.TableView.TableViewSelectionModel;
 import javafx.scene.control.cell.MapValueFactory;
 import objects.TeamStanding;
 
@@ -82,4 +85,38 @@ import objects.TeamStanding;
 			matchStatTable.getItems().add(line);
 		}
 	}
+
+	public void setTeamSelected(String teamName, boolean homeTeam) {
+		TableViewSelectionModel<Map<String, Object>> selectionModel = matchStatTable.getSelectionModel();
+		java.util.Optional<Map<String, Object>> optional = matchStatTable.getItems().stream().filter(p -> p.get("team").equals(teamName)).findFirst();
+		if (optional.isPresent()) {
+			selectionModel.setSelectionMode(SelectionMode.MULTIPLE);
+			int indexOf = matchStatTable.getItems().indexOf(optional.get());
+			selectionModel.select(indexOf);
+		}
+	}
+
+	public void clearSelection() {
+		TableViewSelectionModel<Map<String, Object>> selectionModel = matchStatTable.getSelectionModel();
+		selectionModel.clearSelection();
+	}
+
+	public int getTeamPositionDiff(String homeTeamName, String awayTeamName) {
+		int result = 0;
+		Optional<Map<String, Object>> homeTeamOptional = matchStatTable.getItems().stream().filter(p -> p.get("team").equals(homeTeamName))
+				.findFirst();
+		Optional<Map<String, Object>> awayTeamOptional = matchStatTable.getItems().stream().filter(p -> p.get("team").equals(awayTeamName))
+				.findFirst();
+
+		if (homeTeamOptional.isPresent() && awayTeamOptional.isPresent()) {
+			Map<String, Object> homeTeam = homeTeamOptional.get();
+			Map<String, Object> awayTeam = awayTeamOptional.get();
+
+			int homeTeamPos = matchStatTable.getItems().indexOf(homeTeam);
+			int awayTeamPos = matchStatTable.getItems().indexOf(awayTeam);
+			result = Math.abs(homeTeamPos - awayTeamPos);
+		}
+
+		return result;
+	}
 }

+ 43 - 7
OddsJavaFx/src/controllers/MatchTabController.java

@@ -7,22 +7,28 @@ import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+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.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;
@@ -32,7 +38,6 @@ import javafx.scene.control.cell.PropertyValueFactory;
 import javafx.scene.control.cell.TextFieldTableCell;
 import javafx.util.Callback;
 import javafx.util.converter.FloatStringConverter;
-import javafx.util.converter.IntegerStringConverter;
 import objects.BetDTO;
 import objects.Constants;
 import objects.League;
@@ -68,7 +73,7 @@ import objects.TeamResults;
 	@FXML private TableView<BetDTO> activeBettingTable;
 	private final ObservableList<BetDTO> betObservableList = FXCollections.observableArrayList();
 
-	@FXML TableColumn<BetDTO, Integer> betSeries = new TableColumn<>("Bet series");
+	@FXML TableColumn<BetDTO, StringProperty> betSeries = new TableColumn<>("Bet series");
 	@FXML TableColumn<BetDTO, String> gameDate = new TableColumn<>("Game date");
 	@FXML TableColumn<BetDTO, String> match = new TableColumn<>("Match");
 	@FXML TableColumn<BetDTO, String> betType = new TableColumn<>("Bet type");
@@ -83,6 +88,10 @@ import objects.TeamResults;
 	private int countryId;
 	private static final String FLOAT_FORMAT = "%.02f";
 
+	private ObservableList<String> betSeriesOptions = FXCollections.observableArrayList();
+	private List<BetDTO> dbBetSeries;
+	private int lastBetSeries;
+
 	@Override public void initialize(URL arg0, ResourceBundle arg1) {
 		gameDateColumn.setCellValueFactory(new MapValueFactory<>("gameDate"));
 		homeTeamColumn.setCellValueFactory(new MapValueFactory<>("homeTeam"));
@@ -105,7 +114,11 @@ import objects.TeamResults;
 		awayWinColumn.setCellValueFactory(new MapValueFactory<>(Constants.AWAY_WIN));
 		scoringScore.setCellValueFactory(new MapValueFactory<>("scoringScore"));
 
-		betSeries.setCellValueFactory(new PropertyValueFactory<>("betSeries"));
+//		betSeries.setCellValueFactory(new PropertyValueFactory<>("betSeries"));
+		betSeries.setCellValueFactory(i -> {
+			return Bindings.createObjectBinding(() -> i.getValue().optionProperty());
+		});
+
 		gameDate.setCellValueFactory(new PropertyValueFactory<>("gameDate"));
 		match.setCellValueFactory(new PropertyValueFactory<>("match"));
 		betType.setCellValueFactory(new PropertyValueFactory<>("betType"));
@@ -128,12 +141,35 @@ import objects.TeamResults;
 	}
 
 	private void addActiveBetsFromDatabase() {
-		betObservableList.addAll(GuiMysql.getInstance().getBetSeries(false));
+		dbBetSeries = GuiMysql.getInstance().getBetSeries(false);
+
+		betSeriesOptions.addAll(dbBetSeries.stream().map(BetDTO::getBetSeries).sorted().map(String::valueOf).distinct()
+				.collect(Collectors.toCollection(LinkedList::new)));
+
+		lastBetSeries = GuiMysql.getInstance().getBetSeriesEndNumber();
+
+		betObservableList.addAll(dbBetSeries);
 	}
 
 	private void makeColumnsEditable() {
-		betSeries.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter()));
-		betSeries.setOnEditCommit(e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setBetSeries(e.getNewValue()));
+
+		betSeries.setCellFactory(col -> {
+			TableCell<BetDTO, StringProperty> c = new TableCell<>();
+			final ComboBox<String> comboBox = new ComboBox<>(betSeriesOptions);
+			c.itemProperty().addListener((observable, oldValue, newValue) -> {
+				if (oldValue != null) {
+					comboBox.valueProperty().unbindBidirectional(oldValue);
+				}
+				if (newValue != null) {
+					comboBox.valueProperty().bindBidirectional(newValue);
+				}
+			});
+			c.graphicProperty().bind(Bindings.when(c.emptyProperty()).then((Node) null).otherwise(comboBox));
+			return c;
+		});
+
+//		betSeries.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter()));
+//		betSeries.setOnEditCommit(e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setBetSeries(e.getNewValue()));
 
 //		gameDate.setCellFactory(TextFieldTableCell.forTableColumn());
 //		gameDate.setOnEditCommit(e -> e.getTableView().getItems().get(e.getTablePosition().getRow()).setGameDate(e.getNewValue()));
@@ -329,7 +365,7 @@ import objects.TeamResults;
 			betDTO.setHomeTeam(selectedRow.get("homeTeam").toString());
 			betDTO.setAwayTeam(selectedRow.get("awayTeam").toString());
 			betDTO.setGameDate(selectedRow.get("gameDate").toString());
-			betDTO.setBetSeries(-1);
+			betDTO.setBetSeries(lastBetSeries + 1);
 			betDTO.setMatch(selectedRow.get("homeTeam").toString(), selectedRow.get("awayTeam").toString());
 			betDTO.setBetType("O/U 1.5");
 			betDTO.setWinAmount(-1);

+ 99 - 2
OddsJavaFx/src/controllers/PastResultsController.java

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URL;
 import java.text.DecimalFormat;
+import java.time.format.DateTimeFormatter;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -31,6 +32,7 @@ import javafx.scene.layout.AnchorPane;
 import javafx.scene.text.Text;
 import objects.Constants;
 import objects.SoccerMatch;
+import tests.objects.Standing;
 
 @SuppressWarnings("rawtypes") public class PastResultsController implements Initializable {
 
@@ -61,12 +63,13 @@ import objects.SoccerMatch;
 	@FXML TableColumn<Map, String> avgAwayConcededSeason = new TableColumn<>("AvgAwayConcededThisSeason");
 
 	@FXML TableColumn<Map, String> sumScoringColumn = new TableColumn<>("Sum scoring");
-	@FXML TableColumn<Map, String> drawColumn = new TableColumn<>("draw");
+	@FXML TableColumn<Map, Float> positionAdjustmentColumn = new TableColumn<>("PositionAdjustment");
 	@FXML TableColumn<Map, String> awayWinColumn = new TableColumn<>(Constants.AWAY_WIN);
 
 	@FXML Text homeTeamPastResultsText;
 	@FXML Text awayTeamPastResultsText;
 	@FXML Text previousMeetingsText;
+	@FXML Text previousReverseMeetingsText;
 
 	ObservableList<String> sports = FXCollections.observableArrayList();
 	ObservableList<String> countries = FXCollections.observableArrayList();
@@ -77,6 +80,8 @@ import objects.SoccerMatch;
 	private final ArrayList<SimpleEntry<Integer, String>> leaguesList = Lists.newArrayList();
 
 	GuiMysql db = GuiMysql.getInstance();
+	private String selectedHomeTeam;
+	private String selectedAwayTeam;
 
 	@Override public void initialize(URL arg0, ResourceBundle arg1) {
 		gameDateColumn.setCellValueFactory(new MapValueFactory<>("gameDate"));
@@ -99,7 +104,7 @@ import objects.SoccerMatch;
 		avgAwayConcededSeason.setCellValueFactory(new MapValueFactory<>("avgConcededAwaySeason"));
 
 		sumScoringColumn.setCellValueFactory(new MapValueFactory<>("sumScoring"));
-		drawColumn.setCellValueFactory(new MapValueFactory<>("draw"));
+		positionAdjustmentColumn.setCellValueFactory(new MapValueFactory<>("positionAdjustment"));
 		awayWinColumn.setCellValueFactory(new MapValueFactory<>(Constants.AWAY_WIN));
 
 		basePane.setPrefWidth(0.0);
@@ -133,6 +138,15 @@ import objects.SoccerMatch;
 			homeTeamPastResultsText.setText(previousMatches.get("PrevHomeTeam"));
 			awayTeamPastResultsText.setText(previousMatches.get("PrevAwayTeam"));
 			previousMeetingsText.setText(previousMatches.get("PrevCombined"));
+			previousReverseMeetingsText.setText(previousMatches.get("PrevReversedCombined"));
+
+			selectedHomeTeam = newSelection.get("homeTeam").toString();
+			selectedAwayTeam = newSelection.get("awayTeam").toString();
+			MatchStatTabController.getInstance().clearSelection();
+			MatchStatTabController.getInstance().setTeamSelected(selectedHomeTeam, true);
+			MatchStatTabController.getInstance().setTeamSelected(selectedAwayTeam, false);
+
+			StatisticsTabController.getInstance().markValueInTable(((BigDecimal) newSelection.get("goalDiff")).floatValue());
 		}
 	}
 
@@ -179,7 +193,83 @@ import objects.SoccerMatch;
 		return o.isPresent() ? o.get().getKey() : null;
 	}
 
+	private float getAvgGoalsWithSameDiff(int countryId, int leagueId, int placementDiff) {
+		List<Standing> tempStanding = new ArrayList<>();
+		float result = 0.0f;
+		int matchedMatches = 0;
+
+		List<SoccerMatch> matchesBefore = GuiMysql.getInstance().getMatches(1, getCountryIdFromSelector(), getLeagueIdFromSelector(),
+				date.getValue().toString(), "ASC", false);
+
+		for (SoccerMatch match : matchesBefore) {
+			Optional<Standing> homeTeamStanding = tempStanding.stream().filter(ts -> ts.getTeamName().equals(match.getHomeTeam().getTeamName()))
+					.findFirst();
+			Optional<Standing> awayTeamStanding = tempStanding.stream().filter(ts -> ts.getTeamName().equals(match.getAwayTeam().getTeamName()))
+					.findFirst();
+
+			if (homeTeamStanding.isPresent() && awayTeamStanding.isPresent()) {
+				int homeTeamPosition = tempStanding.indexOf(homeTeamStanding.get());
+				int awayTeamPosition = tempStanding.indexOf(awayTeamStanding.get());
+
+				int diff = Math.abs(homeTeamPosition - awayTeamPosition);
+
+				if (diff == placementDiff) {
+					matchedMatches++;
+					result += match.getHomeScore() + match.getAwayScore();
+				}
+			}
+			updateStanding(tempStanding, match,
+					tempStanding.stream().filter(p -> p.getTeamName().equals(match.getHomeTeam().getTeamName())).findFirst(),
+					tempStanding.stream().filter(p -> p.getTeamName().equals(match.getAwayTeam().getTeamName())).findFirst());
+
+			tempStanding.sort((s1, s2) -> Integer.compare(s2.getPoints(), s1.getPoints()));
+		}
+
+		return matchedMatches > 0 ? result / matchedMatches : 0f;
+	}
+
+	private void updateStanding(List<Standing> result, SoccerMatch match, Optional<Standing> homeTeam, Optional<Standing> awayTeam) {
+		int homeScore = match.getHomeScore();
+		int awayScore = match.getAwayScore();
+		if (homeScore > awayScore) {
+			homeTeam.ifPresentOrElse(ht -> {
+				ht.setWins(ht.getWins() + 1);
+				ht.setGamesPlayed(ht.getGamesPlayed() + 1);
+				ht.setPoints(ht.getPoints() + 3);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 1, 0, 0, 3, 1)));
+
+			awayTeam.ifPresentOrElse(at -> {
+				at.setLosses(at.getLosses() + 1);
+				at.setGamesPlayed(at.getGamesPlayed() + 1);
+			}, () -> result.add(new Standing(match.getAwayTeam().getTeamName(), 0, 0, 1, 0, 1)));
+
+		} else if (homeScore == awayScore) {
+
+			homeTeam.ifPresentOrElse(ht -> {
+				ht.setDraws(ht.getDraws() + 1);
+				ht.setGamesPlayed(ht.getGamesPlayed() + 1);
+				ht.setPoints(ht.getPoints() + 1);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 0, 1, 0, 1, 1)));
+			awayTeam.ifPresentOrElse(at -> {
+				at.setDraws(at.getDraws() + 1);
+				at.setGamesPlayed(at.getGamesPlayed() + 1);
+				at.setPoints(at.getPoints() + 1);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 0, 1, 0, 1, 1)));
+		} else if (homeScore < awayScore) {
+			homeTeam.ifPresentOrElse(ht -> {
+				ht.setLosses(ht.getLosses() + 1);
+				ht.setGamesPlayed(ht.getGamesPlayed() + 1);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 0, 0, 1, 0, 1)));
+			awayTeam.ifPresentOrElse(at -> {
+				at.setWins(at.getWins() + 1);
+				at.setGamesPlayed(at.getGamesPlayed() + 1);
+				at.setPoints(at.getPoints() + 3);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 1, 0, 0, 3, 1)));
+		}
+	}
+
 	@FXML private void leagueSelected(ActionEvent event) {
+		updateStandingsTable();
 		if (getCountryIdFromSelector() != null) {
 			List<SoccerMatch> matchesList = db.getMatches(db.getSportId(MainController.SOCCER), getCountryIdFromSelector(),
 					db.getLeagueId(db.getSportId(MainController.SOCCER), getCountryIdFromSelector(), leagueSelector.getValue()),
@@ -232,6 +322,13 @@ import objects.SoccerMatch;
 										+ (avgAwayTeamGoalsThisSeason.get(0) * avgHomeTeamGoalsThisSeason.get(1))),
 										GuiMysql.getInstance().getIncrement(), RoundingMode.HALF_UP));
 				match.put("country", soccerMatch.getHomeTeam().getCountryName());
+
+				List<Float> leagueAvarages = GuiMysql.getInstance().getLeagueAvarages(getLeagueIdFromSelector(), getCountryIdFromSelector(),
+						soccerMatch.getGameDate().format(DateTimeFormatter.BASIC_ISO_DATE));
+				match.put("positionAdjustment", getAvgGoalsWithSameDiff(soccerMatch.getHomeTeam().getCountryId(),
+						soccerMatch.getHomeTeam().getTeamLeagueId(), MatchStatTabController.getInstance()
+								.getTeamPositionDiff(soccerMatch.getHomeTeam().getTeamName(), soccerMatch.getAwayTeam().getTeamName()))
+						- (leagueAvarages.get(0) + leagueAvarages.get(1)));
 				match.put(Constants.LEAGUE, soccerMatch.getHomeTeam().getTeamLeague());
 
 				final DecimalFormat df = new DecimalFormat("#.##");

+ 13 - 0
OddsJavaFx/src/controllers/StatisticsTabController.java

@@ -12,8 +12,10 @@ import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
+import javafx.scene.control.SelectionMode;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
+import javafx.scene.control.TableView.TableViewSelectionModel;
 import javafx.scene.control.cell.MapValueFactory;
 import objects.OverUnder;
 
@@ -101,6 +103,7 @@ import objects.OverUnder;
 		}
 		statsTable.getItems().clear();
 		statsTable.getItems().addAll(statLines);
+		diffColumn.setSortable(true);
 	}
 
 	private int getUnderStat(OverUnder ou, float atMostXGoals) {
@@ -120,4 +123,14 @@ import objects.OverUnder;
 		}
 		return sum;
 	}
+
+	public void markValueInTable(float value) {
+		TableViewSelectionModel<Map<String, Object>> selectionModel = statsTable.getSelectionModel();
+		java.util.Optional<Map<String, Object>> optional = statsTable.getItems().stream().filter(p -> (Float) p.get("diff") == value).findFirst();
+		if (optional.isPresent()) {
+			selectionModel.setSelectionMode(SelectionMode.SINGLE);
+			int indexOf = statsTable.getItems().indexOf(optional.get());
+			selectionModel.select(indexOf);
+		}
+	}
 }

+ 30 - 28
OddsJavaFx/src/controllers/TestsController.java

@@ -34,6 +34,7 @@ import tests.HomeDrawAwayTest;
 import tests.HomeTeamWinTest;
 import tests.HomeTests2;
 import tests.LastResultsTest;
+import tests.LeagueTablePositionTest;
 import tests.PrioCountriesAll;
 import tests.TestClass;
 import tests.recalcTest;
@@ -77,8 +78,7 @@ public class TestsController implements Initializable {
 		basePane.setPrefWidth(0.0);
 		basePane.setPrefHeight(0.0);
 
-		date.valueProperty()
-				.addListener((ov, oldValue, newValue) -> getResults.setDisable(newValue.isAfter(LocalDate.now())));
+		date.valueProperty().addListener((ov, oldValue, newValue) -> getResults.setDisable(newValue.isAfter(LocalDate.now())));
 
 		countrySelector.setItems(countries);
 		leagueSelector.setItems(leagues);
@@ -106,14 +106,12 @@ public class TestsController implements Initializable {
 	}
 
 	private Integer getCountryIdFromSelector() {
-		Optional<SimpleEntry<Integer, String>> o = countriesList.stream()
-				.filter(p -> p.getValue().equals(countrySelector.getValue())).findFirst();
+		Optional<SimpleEntry<Integer, String>> o = countriesList.stream().filter(p -> p.getValue().equals(countrySelector.getValue())).findFirst();
 		return o.isPresent() ? o.get().getKey() : null;
 	}
 
 	private Integer getLeagueIdFromSelector() {
-		Optional<SimpleEntry<Integer, String>> o = leaguesList.stream()
-				.filter(p -> p.getValue().equals(leagueSelector.getValue())).findFirst();
+		Optional<SimpleEntry<Integer, String>> o = leaguesList.stream().filter(p -> p.getValue().equals(leagueSelector.getValue())).findFirst();
 		return o.isPresent() ? o.get().getKey() : null;
 	}
 
@@ -155,8 +153,8 @@ public class TestsController implements Initializable {
 		final String lookBackVal = getLookback();
 
 		final TestClass test = new LastResultsTest();
-		test.setup(date.getValue().toString(), Float.valueOf(startBank), Float.valueOf(betLevel), Float.valueOf(betM),
-				Integer.valueOf(lookBackVal), mSportId, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup(date.getValue().toString(), Float.valueOf(startBank), Float.valueOf(betLevel), Float.valueOf(betM), Integer.valueOf(lookBackVal),
+				mSportId, getCountryIdFromSelector(), getLeagueIdFromSelector());
 		test.runTest();
 	}
 
@@ -175,8 +173,7 @@ public class TestsController implements Initializable {
 	}
 
 	private String getBetLevel() {
-		String betLevel = Strings.isNullOrEmpty(bettingLevel.getText()) ? bettingLevel.getPromptText()
-				: bettingLevel.getText();
+		String betLevel = Strings.isNullOrEmpty(bettingLevel.getText()) ? bettingLevel.getPromptText() : bettingLevel.getText();
 		betLevel = betLevel.replace("%", "").trim();
 		return betLevel;
 	}
@@ -203,8 +200,7 @@ public class TestsController implements Initializable {
 	}
 
 	@FXML private void getMoreLeagueInfo() {
-		final String lastParsedYear = GuiMysql.getInstance().getLastParsedYear(leagueSelector.getValue().trim(),
-				getCountryIdFromSelector());
+		final String lastParsedYear = GuiMysql.getInstance().getLastParsedYear(leagueSelector.getValue().trim(), getCountryIdFromSelector());
 		final String nextParseYear;
 		if (lastParsedYear.contains("-")) {
 			final String[] years = lastParsedYear.split("-");
@@ -237,8 +233,8 @@ public class TestsController implements Initializable {
 	@FXML private void homeTestAction() {
 		final HomeTests2 test = new HomeTests2();
 
-		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()),
-				Integer.valueOf(getLookback()), 1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()), Integer.valueOf(getLookback()),
+				1, getCountryIdFromSelector(), getLeagueIdFromSelector());
 
 		test.runTest();
 	}
@@ -246,8 +242,8 @@ public class TestsController implements Initializable {
 	@FXML private void drawTestAction() {
 		final DrawTests2 test = new DrawTests2();
 
-		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()),
-				Integer.valueOf(getLookback()), 1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()), Integer.valueOf(getLookback()),
+				1, getCountryIdFromSelector(), getLeagueIdFromSelector());
 
 		test.runTest();
 	}
@@ -255,8 +251,8 @@ public class TestsController implements Initializable {
 	@FXML private void awayTestAction() {
 		final AwayTests2 test = new AwayTests2();
 
-		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()),
-				Integer.valueOf(getLookback()), 1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()), Integer.valueOf(getLookback()),
+				1, getCountryIdFromSelector(), getLeagueIdFromSelector());
 
 		test.runTest();
 	}
@@ -264,8 +260,8 @@ public class TestsController implements Initializable {
 	@FXML private void homeDrawAwayTestAction() {
 		final HomeDrawAwayTest test = new HomeDrawAwayTest();
 
-		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()),
-				Integer.valueOf(getLookback()), 1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()), Integer.valueOf(getLookback()),
+				1, getCountryIdFromSelector(), getLeagueIdFromSelector());
 
 		test.runTest();
 	}
@@ -273,8 +269,8 @@ public class TestsController implements Initializable {
 	@FXML private void homeTeamTestAction() {
 		final HomeTeamWinTest test = new HomeTeamWinTest();
 
-		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()),
-				Integer.valueOf(getLookback()), 1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()), Integer.valueOf(getLookback()),
+				1, getCountryIdFromSelector(), getLeagueIdFromSelector());
 
 		test.runTest();
 	}
@@ -282,8 +278,8 @@ public class TestsController implements Initializable {
 	@FXML private void awayTeamTestAction() {
 		final AwayTeamWinTest test = new AwayTeamWinTest();
 
-		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()),
-				Integer.valueOf(getLookback()), 1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()), Integer.valueOf(getLookback()),
+				1, getCountryIdFromSelector(), getLeagueIdFromSelector());
 
 		test.runTest();
 	}
@@ -291,8 +287,8 @@ public class TestsController implements Initializable {
 	@FXML private void addedScoreTestAction() {
 		final AddedScoringTest test = new AddedScoringTest();
 
-		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()),
-				Integer.valueOf(getLookback()), 1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()), Integer.valueOf(getLookback()),
+				1, getCountryIdFromSelector(), getLeagueIdFromSelector());
 
 		test.runTest();
 	}
@@ -300,8 +296,14 @@ public class TestsController implements Initializable {
 	@FXML private void recalcTestAction() {
 		final recalcTest test = new recalcTest();
 
-		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()),
-				Integer.valueOf(getLookback()), 1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+		test.setup("", Float.valueOf(getStartingBank()), Float.valueOf(getBetLevel()), Float.valueOf(getBetMargin()), Integer.valueOf(getLookback()),
+				1, getCountryIdFromSelector(), getLeagueIdFromSelector());
+
+		test.runTest();
+	}
+
+	@FXML private void standingsTest() {
+		final LeagueTablePositionTest test = new LeagueTablePositionTest();
 
 		test.runTest();
 	}

+ 56 - 23
OddsJavaFx/src/data/GuiMysql.java

@@ -41,7 +41,7 @@ public class GuiMysql extends Mysql {
 	private static final GuiMysql instance = new GuiMysql();
 	private final Connection conn;
 
-	private GuiMysql() {
+	protected GuiMysql() {
 		super();
 		conn = this.getConnection();
 	}
@@ -116,8 +116,9 @@ public class GuiMysql extends Mysql {
 				+ "hTeam.name as homeTeamName, aTeam.name as 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%' " + "ORDER BY country.prio DESC, country.name ASC";
+				+ "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)) {
 
@@ -294,14 +295,15 @@ public class GuiMysql extends Mysql {
 		return returnValue;
 	}
 
-	public List<Float> getLeagueAvarages(int leagueId, int countryId) {
+	public List<Float> getLeagueAvarages(int leagueId, int countryId, String gameDate) {
 		final ArrayList<Float> returnValue = Lists.newArrayList();
 		final String sql = "SELECT AVG(homeScore) avgHomeScore, AVG(awayScore) as avgAwayScore"
-				+ " FROM SoccerResults WHERE leagueId = ? AND countryId = ?";
+				+ " FROM SoccerResults WHERE leagueId = ? AND countryId = ? AND DATE(gameDate) < ?";
 
 		try (PreparedStatement stat = conn.prepareStatement(sql);) {
 			stat.setInt(1, leagueId);
 			stat.setInt(2, countryId);
+			stat.setString(3, gameDate);
 
 			final ResultSet rs = stat.executeQuery();
 			while (rs.next()) {
@@ -873,37 +875,41 @@ public class GuiMysql extends Mysql {
 			int leagueId) {
 		Map<String, String> result = new HashMap<>();
 
-		String homeTeamSql = "SELECT * FROM SoccerResults WHERE homeTeamId = (SELECT id FROM Team WHERE name = ? AND countryId = ? AND leagueId = ?) AND DATE(gameDate) < ? ORDER BY gameDate DESC limit ?";
-		String awayTeamSql = "SELECT * FROM SoccerResults WHERE awayTeamId = (SELECT id FROM Team WHERE name = ? AND countryId = ? AND leagueId = ?) AND DATE(gameDate) < ? ORDER BY gameDate DESC limit ?";
-		String combinedSql = "SELECT * FROM SoccerResults WHERE homeTeamId = (SELECT id FROM Team WHERE name = ? AND countryId = ? AND leagueId = ?) AND awayTeamId = (SELECT id FROM Team WHERE name = ? AND countryId = ? AND leagueId = ?) AND DATE(gameDate) < ? ORDER BY gameDate DESC LIMIT ?";
+		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 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 combinedStat = conn.prepareStatement(combinedSql);
+				PreparedStatement combinedReversedStat = conn.prepareStatement(combinedReverseSql);) {
 
 			homeTeamStat.setString(1, homeTeamName);
-			homeTeamStat.setInt(2, countryId);
-			homeTeamStat.setInt(3, leagueId);
-			homeTeamStat.setString(4, date);
-			homeTeamStat.setInt(5, numberOfMatches);
+			homeTeamStat.setInt(2, leagueId);
+			homeTeamStat.setString(3, date);
+			homeTeamStat.setInt(4, numberOfMatches);
 
 			awayTeamStat.setString(1, awayTeamName);
-			awayTeamStat.setInt(2, countryId);
-			awayTeamStat.setInt(3, leagueId);
-			awayTeamStat.setString(4, date);
-			awayTeamStat.setInt(5, numberOfMatches);
+			awayTeamStat.setInt(2, leagueId);
+			awayTeamStat.setString(3, date);
+			awayTeamStat.setInt(4, numberOfMatches);
 
 			combinedStat.setString(1, homeTeamName);
-			combinedStat.setInt(2, countryId);
+			combinedStat.setString(2, awayTeamName);
 			combinedStat.setInt(3, leagueId);
-			combinedStat.setString(4, awayTeamName);
-			combinedStat.setInt(5, countryId);
-			combinedStat.setInt(6, leagueId);
-			combinedStat.setString(7, date);
-			combinedStat.setInt(8, numberOfMatches);
+			combinedStat.setString(4, date);
+			combinedStat.setInt(5, numberOfMatches);
+
+			combinedReversedStat.setString(1, awayTeamName);
+			combinedReversedStat.setString(2, homeTeamName);
+			combinedReversedStat.setInt(3, leagueId);
+			combinedReversedStat.setString(4, date);
+			combinedReversedStat.setInt(5, numberOfMatches);
 
 			ResultSet homeTeamRs = homeTeamStat.executeQuery();
 			ResultSet awayTeamRs = awayTeamStat.executeQuery();
 			ResultSet combinedTeamRs = combinedStat.executeQuery();
+			ResultSet combinedReversedTeamRs = combinedReversedStat.executeQuery();
 
 			String homeTeamMeets = "";
 			while (homeTeamRs.next()) {
@@ -917,6 +923,10 @@ public class GuiMysql extends Mysql {
 			while (combinedTeamRs.next()) {
 				combinedMeets += combinedTeamRs.getInt("homeScore") + "-" + combinedTeamRs.getInt("awayScore") + ", ";
 			}
+			String combinedReversedMeets = "";
+			while (combinedReversedTeamRs.next()) {
+				combinedReversedMeets += combinedReversedTeamRs.getInt("homeScore") + "-" + combinedReversedTeamRs.getInt("awayScore") + ", ";
+			}
 			if (homeTeamMeets.length() > 2) {
 				result.put("PrevHomeTeam", homeTeamMeets.substring(0, homeTeamMeets.length() - 2));
 			} else {
@@ -933,6 +943,29 @@ public class GuiMysql extends Mysql {
 				result.put("PrevCombined", combinedMeets);
 			}
 
+			if (combinedReversedMeets.length() > 2) {
+				result.put("PrevReversedCombined", combinedReversedMeets.substring(0, combinedReversedMeets.length() - 2));
+			} else {
+				result.put("PrevReversedCombined", combinedReversedMeets);
+			}
+
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return result;
+	}
+
+	public int getBetSeriesEndNumber() {
+		int result = -1;
+		String sql = "SELECT MAX(series) FROM ActiveBets";
+
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			ResultSet rs = stat.executeQuery();
+
+			while (rs.next()) {
+				result = rs.getInt(1);
+			}
 		} catch (SQLException e) {
 			e.printStackTrace();
 		}

+ 114 - 0
OddsJavaFx/src/data/TestDatabase.java

@@ -0,0 +1,114 @@
+package data;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import objects.SoccerMatch;
+import objects.Team;
+import tests.objects.LeagueDTO;
+
+public class TestDatabase extends GuiMysql {
+
+	private static TestDatabase instance;
+	private Connection conn;
+
+	private TestDatabase() {
+		conn = getConnection();
+	}
+
+	public static TestDatabase getInstance() {
+		if (instance == null) {
+			instance = new TestDatabase();
+		}
+
+		return instance;
+	}
+
+	public int getLeagueId(int countryId, String leagueName) {
+		String sql = "SELECT id FROM League WHERE name = ? AND countryId = ?";
+		int result = -1;
+
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			stat.setString(1, leagueName);
+			stat.setInt(2, countryId);
+
+			ResultSet rs = stat.executeQuery();
+
+			while (rs.next()) {
+				result = rs.getInt("id");
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return result;
+	}
+
+	@Override public int getCountryId(String countryName) {
+		String sql = "SELECT id FROM country WHERE name = ?";
+		int result = -1;
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			stat.setString(1, countryName);
+
+			ResultSet rs = stat.executeQuery();
+
+			while (rs.next()) {
+				result = rs.getInt("id");
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return result;
+	}
+
+	public List<LeagueDTO> getPrioLeagues() {
+		String sql = "SELECT l.id as id, l.name as name, l.countryId as countryId, c.name as countryName FROM `League` l inner join Country c ON c.id = l.countryId where l.prio = ?";
+		List<LeagueDTO> result = new ArrayList<>();
+
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+			stat.setBoolean(1, true);
+
+			ResultSet rs = stat.executeQuery();
+
+			while (rs.next()) {
+				result.add(new LeagueDTO(rs.getInt("id"), rs.getString("name"), rs.getInt("countryId"), rs.getString("countryName")));
+			}
+
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return result;
+	}
+
+	public List<SoccerMatch> getMatches(LeagueDTO league) {
+		String sql = "SELECT sr.*, ht.name as homeTeam, awt.name as awayTeam, c.name AS countryName, c.id AS countryId FROM SoccerResults sr INNER JOIN Country c ON c.id = sr.countryId INNER JOIN Team ht ON ht.id = sr.homeTeamId INNER JOIN Team awt ON awt.id = sr.awayTeamId WHERE sr.leagueId = ? ORDER BY gameDate ASC";
+		List<SoccerMatch> result = new ArrayList<>();
+
+		try (PreparedStatement stat = conn.prepareStatement(sql)) {
+
+			stat.setInt(1, league.getId());
+			ResultSet rs = stat.executeQuery();
+			while (rs.next()) {
+				result.add(new SoccerMatch(rs.getInt("id"),
+						new Team(rs.getInt("homeTeamId"), rs.getString("homeTeam"), rs.getInt("countryId"), rs.getString("countryName"),
+								league.getId(), league.getName()),
+						new Team(rs.getInt("awayTeamId"), rs.getString("awayTeam"), rs.getInt("countryId"), rs.getString("countryName"),
+								league.getId(), league.getName()),
+						rs.getFloat("odds1"), rs.getFloat("oddsX"), rs.getFloat("odds2"), rs.getInt("homeScore"), rs.getInt("awayScore"),
+						LocalDateTime.parse(rs.getString("gameDate")), rs.getString("season")));
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+
+		return result;
+	}
+
+}

+ 2 - 1
OddsJavaFx/src/fxml/OddsFxBuilder.fxml

@@ -30,6 +30,7 @@
                   <Button fx:id="getMoreLeagueInfo" disable="true" mnemonicParsing="false" onAction="#getMoreLeagueInfo" text="Get more league info" />
                   <Button fx:id="updateStatsTableButton" disable="true" mnemonicParsing="false" onAction="#updateStatsTable" text="Update Statistics" />
                   <Button fx:id="showMatchStatsButton" disable="true" mnemonicParsing="false" onAction="#setMatchStatInfo" text="Show match stats" />
+                  <Button onAction="#getMoreLeagueInfo" text="Get this years stats" />
                </children>
             </FlowPane>
          </top>
@@ -113,7 +114,7 @@
                 		<fx:include fx:id="oldResultsTab" source="PastResults.fxml" />
                 	</content>
                 </Tab>
-                <Tab text="Testing">
+                <Tab text="Testing2">
 	                <content>
 	                   <fx:include fx:id="testsTab" source="Testing.fxml" />
 	                </content>

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

@@ -53,7 +53,7 @@
 				       <TableColumn fx:id="avgAwayScoredSeason" prefWidth="75.0" text="AwayScoredSeason" />
 				       <TableColumn fx:id="avgAwayConcededSeason" prefWidth="75.0" text="AwayConcededSeason" />
 				       <TableColumn fx:id="sumScoringColumn" prefWidth="75.0" text="Sum scoring" />
-				       <TableColumn fx:id="drawColumn" prefWidth="75.0" text="Draw" />
+				       <TableColumn fx:id="positionAdjustmentColumn" prefWidth="75.0" text="Position Adjustments" />
 				       <TableColumn fx:id="awayWinColumn" prefWidth="75.0" text="Away win" />
 				     </columns>
 				   </TableView>
@@ -75,9 +75,11 @@
                         <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Past results homeTeam" />
                         <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Past results awayTeam" GridPane.rowIndex="1" />
                         <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Past meeting results" GridPane.rowIndex="2" />
+                        <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Past reverse meeting results" GridPane.rowIndex="3" />
                         <Text fx:id="homeTeamPastResultsText" strokeType="OUTSIDE" strokeWidth="0.0" text="Placeholder homeTeam" GridPane.columnIndex="1" />
                         <Text fx:id="awayTeamPastResultsText" strokeType="OUTSIDE" strokeWidth="0.0" text="Placeholder awayTeam" GridPane.columnIndex="1" GridPane.rowIndex="1" />
                         <Text fx:id="previousMeetingsText" strokeType="OUTSIDE" strokeWidth="0.0" text="Placeholder meets" GridPane.columnIndex="1" GridPane.rowIndex="2" />
+                        <Text fx:id="previousReverseMeetingsText" strokeType="OUTSIDE" strokeWidth="0.0" text="Placeholder Reverse meets" GridPane.columnIndex="1" GridPane.rowIndex="3" />
                      </children>
                      <opaqueInsets>
                         <Insets />

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

@@ -25,6 +25,7 @@
                         
                         <Button fx:id="getLeagueInfoButton" mnemonicParsing="false" disable="true" onAction="#getLeagueInfo" prefHeight="30.0" prefWidth="96.0" text="Get league info" />
                         <Button fx:id="getMoreLeagueInfoButton" mnemonicParsing="false" disable="true" onAction="#getMoreLeagueInfo" prefHeight="30.0" prefWidth="96.0" text="Get more league info" />
+                                                        <Button onAction="#standingsTest" text="Standings test"/>
                      </children>
                   </FlowPane>
                </children>

+ 20 - 8
OddsJavaFx/src/objects/BetDTO.java

@@ -1,6 +1,8 @@
 package objects;
 
 import data.GuiMysql;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
 
 public class BetDTO {
 	int betSeries;
@@ -31,14 +33,6 @@ public class BetDTO {
 	public BetDTO() {
 	}
 
-	public int getBetSeries() {
-		return betSeries;
-	}
-
-	public void setBetSeries(int betSeries) {
-		this.betSeries = betSeries;
-	}
-
 	public String getMatch() {
 		return match;
 	}
@@ -155,4 +149,22 @@ public class BetDTO {
 	public String getLeagueName() {
 		return leagueName;
 	}
+
+	private final StringProperty option = new SimpleStringProperty();
+
+	public int getBetSeries() {
+		return Integer.valueOf(option.get());
+	}
+
+	public void setBetSeries(String value) {
+		option.set(value);
+	}
+
+	public void setBetSeries(int value) {
+		option.set(String.valueOf(value));
+	}
+
+	public StringProperty optionProperty() {
+		return option;
+	}
 }

+ 19 - 21
OddsJavaFx/src/objects/SoccerMatch.java

@@ -19,112 +19,110 @@ public class SoccerMatch {
 	private String season;
 
 	private boolean countryPrio;
+	private String homeTeamName;
+	private String awayTeamName;
+
+	public SoccerMatch() {
+	}
+
+	public SoccerMatch(int id, Team homeTeam, Team awayTeam, float odds1, float oddsX, float odds2, int homeScore, int awayScore,
+			LocalDateTime gameDate, String season) {
+		this.matchId = id;
+		this.homeTeam = homeTeam;
+		this.awayTeam = awayTeam;
+		this.odds1 = odds1;
+		this.oddsX = oddsX;
+		this.odds2 = odds2;
+		this.homeScore = homeScore;
+		this.awayScore = awayScore;
+		this.gameDate = gameDate;
+		this.season = season;
+	}
 
 	public Team getHomeTeam() {
 		return homeTeam;
 	}
 
-
 	public Team getAwayTeam() {
 		return awayTeam;
 	}
 
-
 	public int getMatchId() {
 		return matchId;
 	}
 
-
 	public int getHomeScore() {
 		return homeScore;
 	}
 
-
 	public int getAwayScore() {
 		return awayScore;
 	}
 
-
 	public float getOdds1() {
 		return odds1;
 	}
 
-
 	public float getOddsX() {
 		return oddsX;
 	}
 
-
 	public float getOdds2() {
 		return odds2;
 	}
 
-
 	public void setHomeTeam(Team homeTeam) {
 		this.homeTeam = homeTeam;
 	}
 
-
 	public void setAwayTeam(Team awayTeam) {
 		this.awayTeam = awayTeam;
 	}
 
-
 	public void setMatchId(int matchId) {
 		this.matchId = matchId;
 	}
 
-
 	public void setHomeScore(int homeScore) {
 		this.homeScore = homeScore;
 	}
 
-
 	public void setAwayScore(int awayScore) {
 		this.awayScore = awayScore;
 	}
 
-
 	public void setOdds1(float odds1) {
 		this.odds1 = odds1;
 	}
 
-
 	public void setOddsX(float oddsX) {
 		this.oddsX = oddsX;
 	}
 
-
 	public void setOdds2(float odds2) {
 		this.odds2 = odds2;
 	}
 
-
 	public LocalDateTime getGameDate() {
 		return gameDate;
 	}
 
-
 	public void setGameDate(LocalDateTime gameDate) {
 		this.gameDate = gameDate;
 	}
 
-
 	public String getSeason() {
 		return season;
 	}
 
-
 	public void setSeason(String season) {
 		this.season = season;
 	}
 
-
 	public boolean isCountryPrio() {
 		return countryPrio;
 	}
 
-
 	public void setCountryPrio(boolean countryPrio) {
 		this.countryPrio = countryPrio;
 	}

+ 34 - 0
OddsJavaFx/src/objects/Team.java

@@ -9,39 +9,73 @@ public class Team {
 	private int teamLeagueId;
 	private String teamLeague;
 
+	/**
+	 * 
+	 * @param teamId
+	 * @param teamName
+	 * @param countryId
+	 * @param countryName
+	 * @param teamLeagueId
+	 * @param teamLeague
+	 */
+	public Team(int teamId, String teamName, int countryId, String countryName, int teamLeagueId, String teamLeague) {
+		super();
+		this.teamId = teamId;
+		this.teamName = teamName;
+		this.countryId = countryId;
+		this.countryName = countryName;
+		this.teamLeagueId = teamLeagueId;
+		this.teamLeague = teamLeague;
+	}
+
+	public Team() {
+
+	}
+
 	public int getTeamId() {
 		return teamId;
 	}
+
 	public String getTeamName() {
 		return teamName;
 	}
+
 	public int getCountryId() {
 		return countryId;
 	}
+
 	public String getCountryName() {
 		return countryName;
 	}
+
 	public int getTeamLeagueId() {
 		return teamLeagueId;
 	}
+
 	public String getTeamLeague() {
 		return teamLeague;
 	}
+
 	public void setTeamId(int teamId) {
 		this.teamId = teamId;
 	}
+
 	public void setTeamName(String teamName) {
 		this.teamName = teamName;
 	}
+
 	public void setCountryId(int countryId) {
 		this.countryId = countryId;
 	}
+
 	public void setCountryName(String countryName) {
 		this.countryName = countryName;
 	}
+
 	public void setTeamLeagueId(int teamLeagueId) {
 		this.teamLeagueId = teamLeagueId;
 	}
+
 	public void setTeamLeague(String teamLeague) {
 		this.teamLeague = teamLeague;
 	}

+ 22 - 29
OddsJavaFx/src/tests/AwayTeamWinTest.java

@@ -18,8 +18,7 @@ public class AwayTeamWinTest extends TestClass {
 	private ArrayList<SoccerMatch> matches;
 	private ArrayList<SoccerMatch> trainMatches;
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		matches = getMatches();
 		trainMatches = getTrainMatches();
 
@@ -30,7 +29,7 @@ public class AwayTeamWinTest extends TestClass {
 
 			TeamSettings awayTeamValues = getTeamValues(awayTeamId);
 
-			if (awayTeamValues.getLookbackAway() <= 0 || awayTeamValues.getMarginAway() <= 0 ) {
+			if (awayTeamValues.getLookbackAway() <= 0 || awayTeamValues.getMarginAway() <= 0) {
 				awayTeamValues = calculateTeamValues(awayTeamValues, false);
 			}
 		}
@@ -41,9 +40,11 @@ public class AwayTeamWinTest extends TestClass {
 	private TeamSettings calculateTeamValues(TeamSettings teamSettings, boolean isHomeTeam) {
 		final ArrayList<SoccerMatch> teamMatches;
 		if (isHomeTeam) {
-			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).collect(Collectors.toList());
+			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId())
+					.collect(Collectors.toList());
 		} else {
-			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getAwayTeam().getTeamId() == teamSettings.getTeamId()).collect(Collectors.toList());
+			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getAwayTeam().getTeamId() == teamSettings.getTeamId())
+					.collect(Collectors.toList());
 		}
 
 		float bestBankResult = startingBank;
@@ -60,17 +61,21 @@ public class AwayTeamWinTest extends TestClass {
 				int betOnGameCount = 0;
 				int wins = 0;
 				for (final SoccerMatch soccerMatch : teamMatches) {
-					final List<SoccerMatch> aktuellaMatcher = trainMatches.stream().filter(p -> p.getGameDate().isBefore(soccerMatch.getGameDate())).collect(Collectors.toList());
+					final List<SoccerMatch> aktuellaMatcher = trainMatches.stream().filter(p -> p.getGameDate().isBefore(soccerMatch.getGameDate()))
+							.collect(Collectors.toList());
 					if (soccerMatch.getHomeScore() < 0 || soccerMatch.getAwayScore() < 0) {
 						continue;
 					}
 
 					// Hemma lagets resultat
-					final List<SoccerMatch> hemmaMatcher = aktuellaMatcher.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).limit(lookback).collect(Collectors.toList());
+					final List<SoccerMatch> hemmaMatcher = aktuellaMatcher.stream()
+							.filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).limit(lookback).collect(Collectors.toList());
 					final long hemmaForluster = hemmaMatcher.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
 
 					// borta lagets resultat
-					final List<SoccerMatch> bortaMatcher = aktuellaMatcher.stream().filter(p -> p.getAwayTeam().getTeamId() == soccerMatch.getAwayTeam().getTeamId()).limit(lookback).collect(Collectors.toList());
+					final List<SoccerMatch> bortaMatcher = aktuellaMatcher.stream()
+							.filter(p -> p.getAwayTeam().getTeamId() == soccerMatch.getAwayTeam().getTeamId()).limit(lookback)
+							.collect(Collectors.toList());
 					final long bortaVinster = bortaMatcher.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
 
 					final float awayWinPercent = (bortaVinster + hemmaForluster) / Float.valueOf(hemmaMatcher.size() + bortaMatcher.size()) * 100;
@@ -78,7 +83,7 @@ public class AwayTeamWinTest extends TestClass {
 
 					betAmount = bank * betLevel;
 
-					// Spela på borta vinst?
+					// Spela p� borta vinst?
 					if (awayOdds * betMarginDecimal <= soccerMatch.getOdds2()) {
 						betOnGameCount++;
 						bank = bank - betAmount;
@@ -102,7 +107,8 @@ public class AwayTeamWinTest extends TestClass {
 		}
 
 		if (bestLookBack > 0 && teamSettings.getLookbackAway() != bestLookBack) {
-			System.out.println("Setting lookbackAway " + bestLookBack + " and margin " + bestBetMargin + " for team " + teamSettings.getTeamName() + " with a bank of " + bestBankResult);
+			System.out.println("Setting lookbackAway " + bestLookBack + " and margin " + bestBetMargin + " for team " + teamSettings.getTeamName()
+					+ " with a bank of " + bestBankResult);
 			teamSettings.setLookbackAway(bestLookBack);
 			teamSettings.setMarginAway(bestBetMargin);
 		}
@@ -131,7 +137,6 @@ public class AwayTeamWinTest extends TestClass {
 			}
 
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -141,15 +146,9 @@ public class AwayTeamWinTest extends TestClass {
 	private ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "DATE(gameDate) > DATE_SUB(NOW(), INTERVAL 1 YEAR) AND "
-				+ "res.leagueId = ? "
-				+ "ORDER BY gameDate ASC";
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE "
+				+ "DATE(gameDate) > DATE_SUB(NOW(), INTERVAL 1 YEAR) AND " + "res.leagueId = ? " + "ORDER BY gameDate ASC";
 
 		try {
 			final PreparedStatement stmt = getConnection().prepareStatement(sql);
@@ -166,15 +165,9 @@ public class AwayTeamWinTest extends TestClass {
 	private ArrayList<SoccerMatch> getTrainMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "DATE(gameDate) < DATE_SUB(NOW(), INTERVAL 1 YEAR) AND "
-				+ "res.leagueId = ? "
-				+ "ORDER BY gameDate DESC";
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE "
+				+ "DATE(gameDate) < DATE_SUB(NOW(), INTERVAL 1 YEAR) AND " + "res.leagueId = ? " + "ORDER BY gameDate DESC";
 
 		try {
 			final PreparedStatement stmt = getConnection().prepareStatement(sql);

+ 18 - 24
OddsJavaFx/src/tests/AwayTests.java

@@ -16,17 +16,14 @@ public class AwayTests extends TestClass {
 
 	private League leagueInfo;
 
-
-	@Override
-	public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId,
-			Integer countryId, Integer leagueId) {
+	@Override public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId, Integer countryId,
+			Integer leagueId) {
 		super.setup(date, startingBank, bettingLevel, betMargin, lookBack, sportId, countryId, leagueId);
 
 		leagueInfo = getLeagueInfoById();
 	}
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		final ArrayList<SoccerMatch> matches = getMatches();
 
 		final float betLevel = bettingLevel / 100f;
@@ -44,7 +41,7 @@ public class AwayTests extends TestClass {
 
 		for (int lookBack = 4; lookBack < 25; lookBack++) {
 			for (int betMargin = 1; betMargin < 35; betMargin++) {
-				final float betMarginDecimal = 1 + (betMargin / (float)100);
+				final float betMarginDecimal = 1 + (betMargin / (float) 100);
 				float bank = startingBank;
 				betOnGameCount = 0;
 				wins = 0;
@@ -53,10 +50,13 @@ public class AwayTests extends TestClass {
 						continue;
 					}
 
-					final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getHomeTeam().getTeamId(), lookBack, true, match.getGameDate().format(DateTimeFormatter.ISO_DATE));
-					final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getAwayTeam().getTeamId(), lookBack, false, match.getGameDate().format(DateTimeFormatter.ISO_DATE));
+					final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getHomeTeam().getTeamId(), lookBack, true,
+							match.getGameDate().format(DateTimeFormatter.ISO_DATE));
+					final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getAwayTeam().getTeamId(), lookBack, false,
+							match.getGameDate().format(DateTimeFormatter.ISO_DATE));
 
-					final float awayWinPercent = (homeTeamResults.getLosses() + awayTeamResults.getWins()) / Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
+					final float awayWinPercent = (homeTeamResults.getLosses() + awayTeamResults.getWins())
+							/ Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
 
 					final float awayOdds = 100 / awayWinPercent;
 
@@ -76,16 +76,16 @@ public class AwayTests extends TestClass {
 
 				}
 				if (bestBankResult < bank) {
-					System.out.println("New best bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin +
-							" Bet on " + betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float)matches.size() + ") wins " + wins + "(" + wins/Float.valueOf(betOnGameCount) + ")" +
-							" Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
+					System.out.println("New best bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin + " Bet on "
+							+ betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float) matches.size() + ") wins " + wins + "("
+							+ wins / Float.valueOf(betOnGameCount) + ")" + " Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
 					bestBetMargin = betMargin;
 					bestLookBack = lookBack;
 					bestBankResult = bank;
 				} else {
-					System.out.println("NOT BEST bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin +
-							" Bet on " + betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float)matches.size() + ") wins " + wins + "(" + wins/Float.valueOf(betOnGameCount) + ")" +
-							" Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
+					System.out.println("NOT BEST bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin + " Bet on "
+							+ betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float) matches.size() + ") wins " + wins + "("
+							+ wins / Float.valueOf(betOnGameCount) + ")" + " Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
 				}
 			}
 		}
@@ -94,13 +94,8 @@ public class AwayTests extends TestClass {
 	public ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "res.leagueId = ? "
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE " + "res.leagueId = ? "
 				+ "ORDER BY gameDate ASC";
 
 		try {
@@ -109,7 +104,6 @@ public class AwayTests extends TestClass {
 
 			result.addAll(getMatches(stat));
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 

+ 25 - 27
OddsJavaFx/src/tests/AwayTests2.java

@@ -18,25 +18,22 @@ public class AwayTests2 extends TestClass {
 
 	ArrayList<results> possitiveResults = new ArrayList<>();
 
-	@Override
-	public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId,
-			Integer countryId, Integer leagueId) {
+	@Override public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId, Integer countryId,
+			Integer leagueId) {
 		super.setup(date, startingBank, bettingLevel, betMargin, lookBack, sportId, countryId, leagueId);
 
 		leagueInfo = getLeagueInfoById();
 	}
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		final ArrayList<SoccerMatch> matches = getMatches();
 
 		final LocalDateTime startDate = matches.get(0).getGameDate();
 		final LocalDateTime endDate = matches.get(0).getGameDate().plusYears(1);
 
 		List<SoccerMatch> matchesFiltered = matches.stream()
-				.filter(p ->
-				(p.getGameDate().isAfter(matches.get(0).getGameDate()) || p.getGameDate().equals(matches.get(0).getGameDate())) &&
-				p.getGameDate().isBefore(matches.get(0).getGameDate().plusYears(1)))
+				.filter(p -> (p.getGameDate().isAfter(matches.get(0).getGameDate()) || p.getGameDate().equals(matches.get(0).getGameDate()))
+						&& p.getGameDate().isBefore(matches.get(0).getGameDate().plusYears(1)))
 				.collect(Collectors.toList());
 
 		final float betLevel = bettingLevel / 100f;
@@ -58,7 +55,7 @@ public class AwayTests2 extends TestClass {
 			i++;
 			for (int lookBack = 4; lookBack < 25; lookBack++) {
 				for (int betMargin = 1; betMargin < 35; betMargin++) {
-					final float betMarginDecimal = 1 + (betMargin / (float)100);
+					final float betMarginDecimal = 1 + (betMargin / (float) 100);
 					float bank = startingBank;
 					betOnGameCount = 0;
 					wins = 0;
@@ -67,11 +64,15 @@ public class AwayTests2 extends TestClass {
 							continue;
 						}
 
-						final List<SoccerMatch> homeMatches = matchesFiltered.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
-						final List<SoccerMatch> awayMatches = matchesFiltered.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
+						final List<SoccerMatch> homeMatches = matchesFiltered.stream().filter(
+								p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId())
+								.limit(lookBack).collect(Collectors.toList());
+						final List<SoccerMatch> awayMatches = matchesFiltered.stream().filter(
+								p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId())
+								.limit(lookBack).collect(Collectors.toList());
 
 						final long hemmaVinster = homeMatches.stream().filter(p -> p.getHomeScore() > p.getAwayScore()).count();
-						final long hemmaForluster= homeMatches.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
+						final long hemmaForluster = homeMatches.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
 
 						final long bortaVinster = awayMatches.stream().filter(p -> p.getAwayScore() > p.getHomeScore()).count();
 						final long bortaForluster = awayMatches.stream().filter(p -> p.getAwayScore() < p.getHomeScore()).count();
@@ -97,7 +98,8 @@ public class AwayTests2 extends TestClass {
 					if (bank > startingBank) {
 						final int lookBack2 = lookBack;
 						final int betMargin2 = betMargin;
-						final java.util.Optional<results> found = possitiveResults.stream().filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
+						final java.util.Optional<results> found = possitiveResults.stream()
+								.filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
 						if (found.isPresent()) {
 							final results results = found.get();
 							results.addCount();
@@ -112,28 +114,22 @@ public class AwayTests2 extends TestClass {
 			final LocalDateTime endDate2 = startDate2.plusYears(1);
 			matchesFiltered.clear();
 			matchesFiltered = matches.stream()
-					.filter(p ->
-					(p.getGameDate().isAfter(startDate2) || p.getGameDate().equals(startDate2)) &&
-					p.getGameDate().isBefore(endDate2))
+					.filter(p -> (p.getGameDate().isAfter(startDate2) || p.getGameDate().equals(startDate2)) && p.getGameDate().isBefore(endDate2))
 					.collect(Collectors.toList());
 		}
 
 		Collections.sort(possitiveResults);
 		for (final results res : possitiveResults) {
-			System.out.println("Lookback " + res.getLookback() + " and margin " + res.getMargin() + " At count " + res.getCount() + " of " + i + " with bank: " + res.getBank());
+			System.out.println("Lookback " + res.getLookback() + " and margin " + res.getMargin() + " At count " + res.getCount() + " of " + i
+					+ " with bank: " + res.getBank());
 		}
 	}
 
 	public ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "res.leagueId = ? "
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE " + "res.leagueId = ? "
 				+ "ORDER BY gameDate ASC";
 
 		try {
@@ -142,7 +138,6 @@ public class AwayTests2 extends TestClass {
 
 			result.addAll(getMatches(stat));
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -173,6 +168,7 @@ public class AwayTests2 extends TestClass {
 		public void addCount() {
 			count++;
 		}
+
 		public int getCount() {
 			return count;
 		}
@@ -180,18 +176,20 @@ public class AwayTests2 extends TestClass {
 		public int getLookback() {
 			return lookback;
 		}
+
 		public int getMargin() {
 			return margin;
 		}
+
 		public void setLookback(int lookback) {
 			this.lookback = lookback;
 		}
+
 		public void setMargin(int margin) {
 			this.margin = margin;
 		}
 
-		@Override
-		public int compareTo(results res) {
+		@Override public int compareTo(results res) {
 			int returnValue = 0;
 			if (this.count > res.getCount()) {
 				returnValue = -1;

+ 22 - 29
OddsJavaFx/src/tests/DrawTeamTest.java

@@ -18,8 +18,7 @@ public class DrawTeamTest extends TestClass {
 	private ArrayList<SoccerMatch> matches;
 	private ArrayList<SoccerMatch> trainMatches;
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		matches = getMatches();
 		trainMatches = getTrainMatches();
 
@@ -30,7 +29,7 @@ public class DrawTeamTest extends TestClass {
 
 			TeamSettings homeTeamValues = getTeamValues(homeTeamId);
 
-			if (homeTeamValues.getLookbackHome() <= 0 || homeTeamValues.getMarginHome() <= 0 ) {
+			if (homeTeamValues.getLookbackHome() <= 0 || homeTeamValues.getMarginHome() <= 0) {
 				homeTeamValues = calculateTeamValues(homeTeamValues, true);
 			}
 		}
@@ -41,9 +40,11 @@ public class DrawTeamTest extends TestClass {
 	private TeamSettings calculateTeamValues(TeamSettings teamSettings, boolean isHomeTeam) {
 		final ArrayList<SoccerMatch> teamMatches;
 		if (isHomeTeam) {
-			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).collect(Collectors.toList());
+			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId())
+					.collect(Collectors.toList());
 		} else {
-			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getAwayTeam().getTeamId() == teamSettings.getTeamId()).collect(Collectors.toList());
+			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getAwayTeam().getTeamId() == teamSettings.getTeamId())
+					.collect(Collectors.toList());
 		}
 
 		float bestBankResult = startingBank;
@@ -60,17 +61,21 @@ public class DrawTeamTest extends TestClass {
 				int betOnGameCount = 0;
 				int wins = 0;
 				for (final SoccerMatch soccerMatch : teamMatches) {
-					final List<SoccerMatch> aktuellaMatcher = trainMatches.stream().filter(p -> p.getGameDate().isBefore(soccerMatch.getGameDate())).collect(Collectors.toList());
+					final List<SoccerMatch> aktuellaMatcher = trainMatches.stream().filter(p -> p.getGameDate().isBefore(soccerMatch.getGameDate()))
+							.collect(Collectors.toList());
 					if (soccerMatch.getHomeScore() < 0 || soccerMatch.getAwayScore() < 0) {
 						continue;
 					}
 
 					// Hemma lagets resultat
-					final List<SoccerMatch> hemmaMatcher = aktuellaMatcher.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).limit(lookback).collect(Collectors.toList());
+					final List<SoccerMatch> hemmaMatcher = aktuellaMatcher.stream()
+							.filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).limit(lookback).collect(Collectors.toList());
 					final long lika = hemmaMatcher.stream().filter(p -> p.getHomeScore() == p.getAwayScore()).count();
 
 					// borta lagets resultat
-					final List<SoccerMatch> bortaMatcher = aktuellaMatcher.stream().filter(p -> p.getAwayTeam().getTeamId() == soccerMatch.getAwayTeam().getTeamId()).limit(lookback).collect(Collectors.toList());
+					final List<SoccerMatch> bortaMatcher = aktuellaMatcher.stream()
+							.filter(p -> p.getAwayTeam().getTeamId() == soccerMatch.getAwayTeam().getTeamId()).limit(lookback)
+							.collect(Collectors.toList());
 					final long likaBortalag = bortaMatcher.stream().filter(p -> p.getHomeScore() == p.getAwayScore()).count();
 
 					final float drawPercent = (lika + likaBortalag) / Float.valueOf(hemmaMatcher.size() + bortaMatcher.size()) * 100;
@@ -78,7 +83,7 @@ public class DrawTeamTest extends TestClass {
 
 					betAmount = bank * betLevel;
 
-					// Spela på lika?
+					// Spela p� lika?
 					if (drawOdds * betMarginDecimal <= soccerMatch.getOddsX()) {
 						betOnGameCount++;
 						bank = bank - betAmount;
@@ -102,7 +107,8 @@ public class DrawTeamTest extends TestClass {
 		}
 
 		if (bestLookBack > 0 && teamSettings.getLookbackDraw() != bestLookBack) {
-			System.out.println("Setting lookbackDraw " + bestLookBack + " and margin " + bestBetMargin + " for team " + teamSettings.getTeamName() + " with a bank of " + bestBankResult);
+			System.out.println("Setting lookbackDraw " + bestLookBack + " and margin " + bestBetMargin + " for team " + teamSettings.getTeamName()
+					+ " with a bank of " + bestBankResult);
 			teamSettings.setLookbackDraw(bestLookBack);
 			teamSettings.setMarginDraw(bestBetMargin);
 		}
@@ -131,7 +137,6 @@ public class DrawTeamTest extends TestClass {
 			}
 
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -141,15 +146,9 @@ public class DrawTeamTest extends TestClass {
 	private ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "DATE(gameDate) > DATE_SUB(NOW(), INTERVAL 1 YEAR) AND "
-				+ "res.leagueId = ? "
-				+ "ORDER BY gameDate ASC";
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE "
+				+ "DATE(gameDate) > DATE_SUB(NOW(), INTERVAL 1 YEAR) AND " + "res.leagueId = ? " + "ORDER BY gameDate ASC";
 
 		try {
 			final PreparedStatement stmt = getConnection().prepareStatement(sql);
@@ -166,15 +165,9 @@ public class DrawTeamTest extends TestClass {
 	private ArrayList<SoccerMatch> getTrainMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "DATE(gameDate) < DATE_SUB(NOW(), INTERVAL 1 YEAR) AND "
-				+ "res.leagueId = ? "
-				+ "ORDER BY gameDate DESC";
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE "
+				+ "DATE(gameDate) < DATE_SUB(NOW(), INTERVAL 1 YEAR) AND " + "res.leagueId = ? " + "ORDER BY gameDate DESC";
 
 		try {
 			final PreparedStatement stmt = getConnection().prepareStatement(sql);

+ 18 - 24
OddsJavaFx/src/tests/DrawTests.java

@@ -16,17 +16,14 @@ public class DrawTests extends TestClass {
 
 	private League leagueInfo;
 
-
-	@Override
-	public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId,
-			Integer countryId, Integer leagueId) {
+	@Override public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId, Integer countryId,
+			Integer leagueId) {
 		super.setup(date, startingBank, bettingLevel, betMargin, lookBack, sportId, countryId, leagueId);
 
 		leagueInfo = getLeagueInfoById();
 	}
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		final ArrayList<SoccerMatch> matches = getMatches();
 
 		final float betLevel = bettingLevel / 100f;
@@ -44,7 +41,7 @@ public class DrawTests extends TestClass {
 
 		for (int lookBack = 4; lookBack < 25; lookBack++) {
 			for (int betMargin = 1; betMargin < 35; betMargin++) {
-				final float betMarginDecimal = 1 + (betMargin / (float)100);
+				final float betMarginDecimal = 1 + (betMargin / (float) 100);
 				float bank = startingBank;
 				betOnGameCount = 0;
 				wins = 0;
@@ -53,10 +50,13 @@ public class DrawTests extends TestClass {
 						continue;
 					}
 
-					final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getHomeTeam().getTeamId(), lookBack, true, match.getGameDate().format(DateTimeFormatter.ISO_DATE));
-					final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getAwayTeam().getTeamId(), lookBack, false, match.getGameDate().format(DateTimeFormatter.ISO_DATE));
+					final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getHomeTeam().getTeamId(), lookBack, true,
+							match.getGameDate().format(DateTimeFormatter.ISO_DATE));
+					final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getAwayTeam().getTeamId(), lookBack, false,
+							match.getGameDate().format(DateTimeFormatter.ISO_DATE));
 
-					final float drawPercent = (homeTeamResults.getDraws() + awayTeamResults.getDraws()) / Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
+					final float drawPercent = (homeTeamResults.getDraws() + awayTeamResults.getDraws())
+							/ Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
 
 					final float drawOdds = 100 / drawPercent;
 
@@ -76,16 +76,16 @@ public class DrawTests extends TestClass {
 
 				}
 				if (bestBankResult < bank) {
-					System.out.println("New best bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin +
-							" Bet on " + betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float)matches.size() + ") wins " + wins + "(" + wins/Float.valueOf(betOnGameCount) + ")" +
-							" Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
+					System.out.println("New best bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin + " Bet on "
+							+ betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float) matches.size() + ") wins " + wins + "("
+							+ wins / Float.valueOf(betOnGameCount) + ")" + " Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
 					bestBetMargin = betMargin;
 					bestLookBack = lookBack;
 					bestBankResult = bank;
 				} else {
-					System.out.println("NOT BEST bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin +
-							" Bet on " + betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float)matches.size() + ") wins " + wins + "(" + wins/Float.valueOf(betOnGameCount) + ")" +
-							" Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
+					System.out.println("NOT BEST bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin + " Bet on "
+							+ betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float) matches.size() + ") wins " + wins + "("
+							+ wins / Float.valueOf(betOnGameCount) + ")" + " Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
 				}
 			}
 		}
@@ -94,13 +94,8 @@ public class DrawTests extends TestClass {
 	public ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "res.leagueId = ? "
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE " + "res.leagueId = ? "
 				+ "ORDER BY gameDate ASC";
 
 		try {
@@ -109,7 +104,6 @@ public class DrawTests extends TestClass {
 
 			result.addAll(getMatches(stat));
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 

+ 24 - 26
OddsJavaFx/src/tests/DrawTests2.java

@@ -18,25 +18,22 @@ public class DrawTests2 extends TestClass {
 
 	ArrayList<results> possitiveResults = new ArrayList<>();
 
-	@Override
-	public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId,
-			Integer countryId, Integer leagueId) {
+	@Override public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId, Integer countryId,
+			Integer leagueId) {
 		super.setup(date, startingBank, bettingLevel, betMargin, lookBack, sportId, countryId, leagueId);
 
 		leagueInfo = getLeagueInfoById();
 	}
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		final ArrayList<SoccerMatch> matches = getMatches();
 
 		final LocalDateTime startDate = matches.get(0).getGameDate();
 		final LocalDateTime endDate = matches.get(0).getGameDate().plusYears(1);
 
 		List<SoccerMatch> matchesFiltered = matches.stream()
-				.filter(p ->
-				(p.getGameDate().isAfter(matches.get(0).getGameDate()) || p.getGameDate().equals(matches.get(0).getGameDate())) &&
-				p.getGameDate().isBefore(matches.get(0).getGameDate().plusYears(1)))
+				.filter(p -> (p.getGameDate().isAfter(matches.get(0).getGameDate()) || p.getGameDate().equals(matches.get(0).getGameDate()))
+						&& p.getGameDate().isBefore(matches.get(0).getGameDate().plusYears(1)))
 				.collect(Collectors.toList());
 
 		final float betLevel = bettingLevel / 100f;
@@ -58,7 +55,7 @@ public class DrawTests2 extends TestClass {
 			i++;
 			for (int lookBack = 4; lookBack < 25; lookBack++) {
 				for (int betMargin = 1; betMargin < 35; betMargin++) {
-					final float betMarginDecimal = 1 + (betMargin / (float)100);
+					final float betMarginDecimal = 1 + (betMargin / (float) 100);
 					float bank = startingBank;
 					betOnGameCount = 0;
 					wins = 0;
@@ -67,8 +64,12 @@ public class DrawTests2 extends TestClass {
 							continue;
 						}
 
-						final List<SoccerMatch> homeMatches = matchesFiltered.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
-						final List<SoccerMatch> awayMatches = matchesFiltered.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
+						final List<SoccerMatch> homeMatches = matchesFiltered.stream().filter(
+								p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId())
+								.limit(lookBack).collect(Collectors.toList());
+						final List<SoccerMatch> awayMatches = matchesFiltered.stream().filter(
+								p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId())
+								.limit(lookBack).collect(Collectors.toList());
 
 						final long hemmaLika = homeMatches.stream().filter(p -> p.getHomeScore() == p.getAwayScore()).count();
 						final long bortaLika = awayMatches.stream().filter(p -> p.getAwayScore() == p.getHomeScore()).count();
@@ -94,7 +95,8 @@ public class DrawTests2 extends TestClass {
 					if (bank > startingBank) {
 						final int lookBack2 = lookBack;
 						final int betMargin2 = betMargin;
-						final java.util.Optional<results> found = possitiveResults.stream().filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
+						final java.util.Optional<results> found = possitiveResults.stream()
+								.filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
 						if (found.isPresent()) {
 							final results results = found.get();
 							results.addCount();
@@ -109,28 +111,22 @@ public class DrawTests2 extends TestClass {
 			final LocalDateTime endDate2 = startDate2.plusYears(1);
 			matchesFiltered.clear();
 			matchesFiltered = matches.stream()
-					.filter(p ->
-					(p.getGameDate().isAfter(startDate2) || p.getGameDate().equals(startDate2)) &&
-					p.getGameDate().isBefore(endDate2))
+					.filter(p -> (p.getGameDate().isAfter(startDate2) || p.getGameDate().equals(startDate2)) && p.getGameDate().isBefore(endDate2))
 					.collect(Collectors.toList());
 		}
 
 		Collections.sort(possitiveResults);
 		for (final results res : possitiveResults) {
-			System.out.println("Lookback " + res.getLookback() + " and margin " + res.getMargin() + " At count " + res.getCount() + " of " + i + " with bank: " + res.getBank());
+			System.out.println("Lookback " + res.getLookback() + " and margin " + res.getMargin() + " At count " + res.getCount() + " of " + i
+					+ " with bank: " + res.getBank());
 		}
 	}
 
 	public ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "res.leagueId = ? "
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE " + "res.leagueId = ? "
 				+ "ORDER BY gameDate ASC";
 
 		try {
@@ -139,7 +135,6 @@ public class DrawTests2 extends TestClass {
 
 			result.addAll(getMatches(stat));
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -170,6 +165,7 @@ public class DrawTests2 extends TestClass {
 		public void addCount() {
 			count++;
 		}
+
 		public int getCount() {
 			return count;
 		}
@@ -177,18 +173,20 @@ public class DrawTests2 extends TestClass {
 		public int getLookback() {
 			return lookback;
 		}
+
 		public int getMargin() {
 			return margin;
 		}
+
 		public void setLookback(int lookback) {
 			this.lookback = lookback;
 		}
+
 		public void setMargin(int margin) {
 			this.margin = margin;
 		}
 
-		@Override
-		public int compareTo(results res) {
+		@Override public int compareTo(results res) {
 			int returnValue = 0;
 			if (this.count > res.getCount()) {
 				returnValue = -1;

+ 39 - 47
OddsJavaFx/src/tests/HomeDrawAwayTest.java

@@ -22,8 +22,7 @@ public class HomeDrawAwayTest extends TestClass {
 	private float activeOddsX;
 	private float activeOdds2;
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		float betAmount;
 		float bank = startingBank;
 		final float betLevel = bettingLevel / 100.0f;
@@ -37,9 +36,8 @@ public class HomeDrawAwayTest extends TestClass {
 		for (int i = 0; i < matches.size(); i++) {
 			final SoccerMatch soccerMatch = matches.get(i);
 
-			final List<SoccerMatch> matchesThisDate = matches.stream()
-					.filter(p -> p.getGameDate().format(DateTimeFormatter.ISO_DATE)
-							.equals(soccerMatch.getGameDate().format(DateTimeFormatter.ISO_DATE)))
+			final List<SoccerMatch> matchesThisDate = matches.stream().filter(
+					p -> p.getGameDate().format(DateTimeFormatter.ISO_DATE).equals(soccerMatch.getGameDate().format(DateTimeFormatter.ISO_DATE)))
 					.collect(Collectors.toList());
 
 			final int matchesThisDateCount = matchesThisDate.size();
@@ -53,7 +51,7 @@ public class HomeDrawAwayTest extends TestClass {
 
 				final String betOnThisMatch = checkWhatBet(sm, activeLeague);
 				if (!"NoBet".equals(betOnThisMatch)) {
-					if (betOnThisMatch.contains("1")) { // Spela på hemma lag
+					if (betOnThisMatch.contains("1")) { // Spela p� hemma lag
 						gamesBettedOn++;
 						bank = bank - betAmount;
 						final float homeBetAmount = (homeBank * betLevel);
@@ -65,7 +63,7 @@ public class HomeDrawAwayTest extends TestClass {
 							winsThisDay++;
 						}
 					}
-					if (betOnThisMatch.contains("2")) { // Spela på borta lag
+					if (betOnThisMatch.contains("2")) { // Spela p� borta lag
 						gamesBettedOn++;
 						bank = bank - betAmount;
 
@@ -77,7 +75,7 @@ public class HomeDrawAwayTest extends TestClass {
 							winsThisDay++;
 						}
 					}
-					if (betOnThisMatch.contains("X")) { // Spela på Lika
+					if (betOnThisMatch.contains("X")) { // Spela p� Lika
 						gamesBettedOn++;
 						bank = bank - betAmount;
 
@@ -90,14 +88,14 @@ public class HomeDrawAwayTest extends TestClass {
 						}
 					}
 				}
-				System.out.println("Match between " + sm.getHomeTeam().getTeamName() + " - " + sm.getAwayTeam().getTeamName() +
-						" result " + sm.getHomeScore() + " - " + sm.getAwayScore() +
-						" Betted on " + betOnThisMatch + " at odds " + sm.getOdds1() + ", " + sm.getOddsX() + ", " + sm.getOdds2() +
-						" Bet Amount: " + betAmount + " calc odds: " + activeOdds1 + ", " + activeOddsX + ", " + activeOdds2);
+				System.out.println("Match between " + sm.getHomeTeam().getTeamName() + " - " + sm.getAwayTeam().getTeamName() + " result "
+						+ sm.getHomeScore() + " - " + sm.getAwayScore() + " Betted on " + betOnThisMatch + " at odds " + sm.getOdds1() + ", "
+						+ sm.getOddsX() + ", " + sm.getOdds2() + " Bet Amount: " + betAmount + " calc odds: " + activeOdds1 + ", " + activeOddsX
+						+ ", " + activeOdds2);
 			}
 
-			System.out.println(matchesThisDate.get(0).getGameDate() + " result " + (bank - startBank) + " current bank: " + bank +
-					" bet on " + gamesBettedOn + "/" + matchesThisDateCount + " wins " + winsThisDay);
+			System.out.println(matchesThisDate.get(0).getGameDate() + " result " + (bank - startBank) + " current bank: " + bank + " bet on "
+					+ gamesBettedOn + "/" + matchesThisDateCount + " wins " + winsThisDay);
 			i += matchesThisDate.size();
 
 		}
@@ -116,9 +114,12 @@ public class HomeDrawAwayTest extends TestClass {
 		final int lookbackAway = activeLeague.getLookbackAway();
 
 		if (lookbackHome > 0) {
-			final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getHomeTeam().getTeamId(), activeLeague.getLookbackHome(), true, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
-			final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getAwayTeam().getTeamId(), activeLeague.getLookbackHome(), false, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
-			final float homeWinPercent = (homeTeamResults.getWins() + awayTeamResults.getLosses()) / Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
+			final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getHomeTeam().getTeamId(),
+					activeLeague.getLookbackHome(), true, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
+			final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getAwayTeam().getTeamId(),
+					activeLeague.getLookbackHome(), false, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
+			final float homeWinPercent = (homeTeamResults.getWins() + awayTeamResults.getLosses())
+					/ Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
 			final float homeOdds = 100 / homeWinPercent;
 
 			activeOdds1 = homeOdds * betMarginHomeDecimal;
@@ -132,16 +133,17 @@ public class HomeDrawAwayTest extends TestClass {
 
 		}
 
-
 		if (lookbackDraw > 0) {
-			final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getHomeTeam().getTeamId(), activeLeague.getLookbackDraw(), true, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
-			final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getAwayTeam().getTeamId(), activeLeague.getLookbackDraw(), false, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
-			final float drawWinPercent = (homeTeamResults.getDraws() + awayTeamResults.getDraws()) / Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
+			final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getHomeTeam().getTeamId(),
+					activeLeague.getLookbackDraw(), true, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
+			final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getAwayTeam().getTeamId(),
+					activeLeague.getLookbackDraw(), false, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
+			final float drawWinPercent = (homeTeamResults.getDraws() + awayTeamResults.getDraws())
+					/ Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
 			final float drawOdds = 100 / drawWinPercent;
 
 			activeOddsX = drawOdds * betMarginDrawDecimal;
-			if (activeLeague.getBetMarginDraw() > 0 &&
-					drawOdds * betMarginDrawDecimal <= sm.getOddsX()) {
+			if (activeLeague.getBetMarginDraw() > 0 && drawOdds * betMarginDrawDecimal <= sm.getOddsX()) {
 				if (result.equals("NoBet")) {
 					result = "X";
 				} else {
@@ -151,16 +153,17 @@ public class HomeDrawAwayTest extends TestClass {
 
 		}
 
-
 		if (lookbackAway > 0) {
-			final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getHomeTeam().getTeamId(), activeLeague.getLookbackAway(), true, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
-			final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getAwayTeam().getTeamId(), activeLeague.getLookbackAway(), false, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
-			final float awayWinPercent = (awayTeamResults.getWins() + homeTeamResults.getLosses()) / Float.valueOf(awayTeamResults.getCount() + homeTeamResults.getCount()) * 100;
+			final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getHomeTeam().getTeamId(),
+					activeLeague.getLookbackAway(), true, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
+			final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getAwayTeam().getTeamId(),
+					activeLeague.getLookbackAway(), false, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
+			final float awayWinPercent = (awayTeamResults.getWins() + homeTeamResults.getLosses())
+					/ Float.valueOf(awayTeamResults.getCount() + homeTeamResults.getCount()) * 100;
 			final float awayOdds = 100 / awayWinPercent;
 
 			activeOdds2 = awayOdds * betMarginAwayDecimal;
-			if (activeLeague.getBetMarginHome() > 0 &&
-					awayOdds * betMarginAwayDecimal <= sm.getOdds2()) {
+			if (activeLeague.getBetMarginHome() > 0 && awayOdds * betMarginAwayDecimal <= sm.getOdds2()) {
 				if (result.equals("NoBet")) {
 					result = "2";
 				} else {
@@ -179,26 +182,16 @@ public class HomeDrawAwayTest extends TestClass {
 		final ArrayList<String> leagueIds = Lists.newArrayList();
 		prioLeagues.forEach(p -> leagueIds.add(String.valueOf(p.getLeagueId())));
 
-		final String sql = "SELECT res.*, " +
-				"hTeam.name as homeTeamName, aTeam.name as awayTeamName " +
-				"FROM SoccerResults as res " +
-				"Join Team as hTeam ON res.homeTeam = hTeam.id " +
-				"Join Team as aTeam ON res.awayTeam = aTeam.id " +
-				"WHERE " +
-				"DATE(gameDate) > '2021-07-01' AND " +
-				"homeScore >= 0 AND " +
-				"awayScore >= 0 AND " +
-				"res.leagueId IN (" +
-				String.join(",", leagueIds) + ") " +
-				"ORDER BY gameDate ASC";
-
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE "
+				+ "DATE(gameDate) > '2021-07-01' AND " + "homeScore >= 0 AND " + "awayScore >= 0 AND " + "res.leagueId IN ("
+				+ String.join(",", leagueIds) + ") " + "ORDER BY gameDate ASC";
 
 		PreparedStatement stmt;
 		try {
 			stmt = getConnection().prepareStatement(sql);
 			matches.addAll(super.getMatches(stmt));
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -213,9 +206,9 @@ public class HomeDrawAwayTest extends TestClass {
 			final ResultSet rs = stat.executeQuery();
 
 			while (rs.next()) {
-				result.add(new League(rs.getInt("id"), rs.getString("name"), rs.getInt("lookback"), rs.getInt("betMargin"),
-						rs.getInt("lookbackHome"), rs.getInt("lookbackDraw"), rs.getInt("lookbackAway"),
-						rs.getInt("betMarginHome"), rs.getInt("betMarginDraw"), rs.getInt("betMarginAway")));
+				result.add(new League(rs.getInt("id"), rs.getString("name"), rs.getInt("lookback"), rs.getInt("betMargin"), rs.getInt("lookbackHome"),
+						rs.getInt("lookbackDraw"), rs.getInt("lookbackAway"), rs.getInt("betMarginHome"), rs.getInt("betMarginDraw"),
+						rs.getInt("betMarginAway")));
 			}
 		} catch (final SQLException e) {
 			e.printStackTrace();
@@ -224,5 +217,4 @@ public class HomeDrawAwayTest extends TestClass {
 		return result;
 	}
 
-
 }

+ 22 - 29
OddsJavaFx/src/tests/HomeTeamWinTest.java

@@ -18,8 +18,7 @@ public class HomeTeamWinTest extends TestClass {
 	private ArrayList<SoccerMatch> matches;
 	private ArrayList<SoccerMatch> trainMatches;
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		matches = getMatches();
 		trainMatches = getTrainMatches();
 
@@ -30,7 +29,7 @@ public class HomeTeamWinTest extends TestClass {
 
 			TeamSettings homeTeamValues = getTeamValues(homeTeamId);
 
-			if (homeTeamValues.getLookbackHome() <= 0 || homeTeamValues.getMarginHome() <= 0 ) {
+			if (homeTeamValues.getLookbackHome() <= 0 || homeTeamValues.getMarginHome() <= 0) {
 				homeTeamValues = calculateTeamValues(homeTeamValues, true);
 			}
 		}
@@ -41,9 +40,11 @@ public class HomeTeamWinTest extends TestClass {
 	private TeamSettings calculateTeamValues(TeamSettings teamSettings, boolean isHomeTeam) {
 		final ArrayList<SoccerMatch> teamMatches;
 		if (isHomeTeam) {
-			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).collect(Collectors.toList());
+			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId())
+					.collect(Collectors.toList());
 		} else {
-			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getAwayTeam().getTeamId() == teamSettings.getTeamId()).collect(Collectors.toList());
+			teamMatches = (ArrayList<SoccerMatch>) trainMatches.stream().filter(p -> p.getAwayTeam().getTeamId() == teamSettings.getTeamId())
+					.collect(Collectors.toList());
 		}
 
 		float bestBankResult = startingBank;
@@ -60,17 +61,21 @@ public class HomeTeamWinTest extends TestClass {
 				int betOnGameCount = 0;
 				int wins = 0;
 				for (final SoccerMatch soccerMatch : teamMatches) {
-					final List<SoccerMatch> aktuellaMatcher = trainMatches.stream().filter(p -> p.getGameDate().isBefore(soccerMatch.getGameDate())).collect(Collectors.toList());
+					final List<SoccerMatch> aktuellaMatcher = trainMatches.stream().filter(p -> p.getGameDate().isBefore(soccerMatch.getGameDate()))
+							.collect(Collectors.toList());
 					if (soccerMatch.getHomeScore() < 0 || soccerMatch.getAwayScore() < 0) {
 						continue;
 					}
 
 					// Hemma lagets resultat
-					final List<SoccerMatch> hemmaMatcher = aktuellaMatcher.stream().filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).limit(lookback).collect(Collectors.toList());
+					final List<SoccerMatch> hemmaMatcher = aktuellaMatcher.stream()
+							.filter(p -> p.getHomeTeam().getTeamId() == teamSettings.getTeamId()).limit(lookback).collect(Collectors.toList());
 					final long hemmaVinster = hemmaMatcher.stream().filter(p -> p.getHomeScore() > p.getAwayScore()).count();
 
 					// borta lagets resultat
-					final List<SoccerMatch> bortaMatcher = aktuellaMatcher.stream().filter(p -> p.getAwayTeam().getTeamId() == soccerMatch.getAwayTeam().getTeamId()).limit(lookback).collect(Collectors.toList());
+					final List<SoccerMatch> bortaMatcher = aktuellaMatcher.stream()
+							.filter(p -> p.getAwayTeam().getTeamId() == soccerMatch.getAwayTeam().getTeamId()).limit(lookback)
+							.collect(Collectors.toList());
 					final long bortaForluster = bortaMatcher.stream().filter(p -> p.getHomeScore() > p.getAwayScore()).count();
 
 					final float homeWinPercent = (hemmaVinster + bortaForluster) / Float.valueOf(hemmaMatcher.size() + bortaMatcher.size()) * 100;
@@ -78,7 +83,7 @@ public class HomeTeamWinTest extends TestClass {
 
 					betAmount = bank * betLevel;
 
-					// Spela på hemma vins?
+					// Spela p� hemma vins?
 					if (homeOdds * betMarginDecimal <= soccerMatch.getOdds1()) {
 						betOnGameCount++;
 						bank = bank - betAmount;
@@ -102,7 +107,8 @@ public class HomeTeamWinTest extends TestClass {
 		}
 
 		if (bestLookBack > 0 && teamSettings.getLookbackHome() != bestLookBack) {
-			System.out.println("Setting lookbackHome " + bestLookBack + " and margin " + bestBetMargin + " for team " + teamSettings.getTeamName() + " with a bank of " + bestBankResult);
+			System.out.println("Setting lookbackHome " + bestLookBack + " and margin " + bestBetMargin + " for team " + teamSettings.getTeamName()
+					+ " with a bank of " + bestBankResult);
 			teamSettings.setLookbackHome(bestLookBack);
 			teamSettings.setMarginHome(bestBetMargin);
 		}
@@ -131,7 +137,6 @@ public class HomeTeamWinTest extends TestClass {
 			}
 
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -141,15 +146,9 @@ public class HomeTeamWinTest extends TestClass {
 	private ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "DATE(gameDate) > DATE_SUB(NOW(), INTERVAL 1 YEAR) AND "
-				+ "res.leagueId = ? "
-				+ "ORDER BY gameDate ASC";
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE "
+				+ "DATE(gameDate) > DATE_SUB(NOW(), INTERVAL 1 YEAR) AND " + "res.leagueId = ? " + "ORDER BY gameDate ASC";
 
 		try {
 			final PreparedStatement stmt = getConnection().prepareStatement(sql);
@@ -166,15 +165,9 @@ public class HomeTeamWinTest extends TestClass {
 	private ArrayList<SoccerMatch> getTrainMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "DATE(gameDate) < DATE_SUB(NOW(), INTERVAL 1 YEAR) AND "
-				+ "res.leagueId = ? "
-				+ "ORDER BY gameDate DESC";
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE "
+				+ "DATE(gameDate) < DATE_SUB(NOW(), INTERVAL 1 YEAR) AND " + "res.leagueId = ? " + "ORDER BY gameDate DESC";
 
 		try {
 			final PreparedStatement stmt = getConnection().prepareStatement(sql);

+ 18 - 24
OddsJavaFx/src/tests/HomeTests.java

@@ -16,17 +16,14 @@ public class HomeTests extends TestClass {
 
 	private League leagueInfo;
 
-
-	@Override
-	public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId,
-			Integer countryId, Integer leagueId) {
+	@Override public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId, Integer countryId,
+			Integer leagueId) {
 		super.setup(date, startingBank, bettingLevel, betMargin, lookBack, sportId, countryId, leagueId);
 
 		leagueInfo = getLeagueInfoById();
 	}
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		final ArrayList<SoccerMatch> matches = getMatches();
 
 		final LocalDateTime startDate = matches.get(0).getGameDate();
@@ -46,7 +43,7 @@ public class HomeTests extends TestClass {
 
 		for (int lookBack = 4; lookBack < 25; lookBack++) {
 			for (int betMargin = 1; betMargin < 35; betMargin++) {
-				final float betMarginDecimal = 1 + (betMargin / (float)100);
+				final float betMarginDecimal = 1 + (betMargin / (float) 100);
 				float bank = startingBank;
 				betOnGameCount = 0;
 				wins = 0;
@@ -55,10 +52,13 @@ public class HomeTests extends TestClass {
 						continue;
 					}
 
-					final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getHomeTeam().getTeamId(), lookBack, true, match.getGameDate().format(DateTimeFormatter.ISO_DATE));
-					final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getAwayTeam().getTeamId(), lookBack, false, match.getGameDate().format(DateTimeFormatter.ISO_DATE));
+					final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getHomeTeam().getTeamId(), lookBack, true,
+							match.getGameDate().format(DateTimeFormatter.ISO_DATE));
+					final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(match.getAwayTeam().getTeamId(), lookBack, false,
+							match.getGameDate().format(DateTimeFormatter.ISO_DATE));
 
-					final float homeWinPercent = (homeTeamResults.getWins() + awayTeamResults.getLosses()) / Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
+					final float homeWinPercent = (homeTeamResults.getWins() + awayTeamResults.getLosses())
+							/ Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
 					final float homeOdds = 100 / homeWinPercent;
 
 					if (localDate.isBefore(match.getGameDate().toLocalDate())) {
@@ -77,16 +77,16 @@ public class HomeTests extends TestClass {
 
 				}
 				if (bestBankResult < bank) {
-					System.out.println("New best bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin +
-							" Bet on " + betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float)matches.size() + ") wins " + wins + "(" + wins/Float.valueOf(betOnGameCount) + ")" +
-							" Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
+					System.out.println("New best bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin + " Bet on "
+							+ betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float) matches.size() + ") wins " + wins + "("
+							+ wins / Float.valueOf(betOnGameCount) + ")" + " Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
 					bestBetMargin = betMargin;
 					bestLookBack = lookBack;
 					bestBankResult = bank;
 				} else {
-					System.out.println("NOT BEST bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin +
-							" Bet on " + betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float)matches.size() + ") wins " + wins + "(" + wins/Float.valueOf(betOnGameCount) + ")" +
-							" Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
+					System.out.println("NOT BEST bank " + bank + " with lookback " + lookBack + " and betMargin " + betMargin + " Bet on "
+							+ betOnGameCount + " of " + matches.size() + "(" + betOnGameCount / (float) matches.size() + ") wins " + wins + "("
+							+ wins / Float.valueOf(betOnGameCount) + ")" + " Win / game " + (bank - startingBank) / Float.valueOf(wins) + " kr");
 				}
 			}
 		}
@@ -95,13 +95,8 @@ public class HomeTests extends TestClass {
 	public ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "res.leagueId = ? "
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE " + "res.leagueId = ? "
 				+ "ORDER BY gameDate ASC";
 
 		try {
@@ -110,7 +105,6 @@ public class HomeTests extends TestClass {
 
 			result.addAll(getMatches(stat));
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 

+ 20 - 25
OddsJavaFx/src/tests/HomeTests2.java

@@ -18,25 +18,22 @@ public class HomeTests2 extends TestClass {
 
 	ArrayList<results> possitiveResults = new ArrayList<>();
 
-	@Override
-	public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId,
-			Integer countryId, Integer leagueId) {
+	@Override public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId, Integer countryId,
+			Integer leagueId) {
 		super.setup(date, startingBank, bettingLevel, betMargin, lookBack, sportId, countryId, leagueId);
 
 		leagueInfo = getLeagueInfoById();
 	}
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		final ArrayList<SoccerMatch> matches = getMatches();
 
 		final LocalDateTime startDate = matches.get(0).getGameDate();
 		final LocalDateTime endDate = matches.get(0).getGameDate().plusYears(1);
 
 		List<SoccerMatch> matchesFiltered = matches.stream()
-				.filter(p ->
-				(p.getGameDate().isAfter(matches.get(0).getGameDate()) || p.getGameDate().equals(matches.get(0).getGameDate())) &&
-				p.getGameDate().isBefore(matches.get(0).getGameDate().plusYears(1)))
+				.filter(p -> (p.getGameDate().isAfter(matches.get(0).getGameDate()) || p.getGameDate().equals(matches.get(0).getGameDate()))
+						&& p.getGameDate().isBefore(matches.get(0).getGameDate().plusYears(1)))
 				.collect(Collectors.toList());
 
 		final float betLevel = bettingLevel / 100f;
@@ -59,7 +56,7 @@ public class HomeTests2 extends TestClass {
 			i++;
 			for (int lookBack = 4; lookBack < 25; lookBack++) {
 				for (int betMargin = 1; betMargin < 35; betMargin++) {
-					final float betMarginDecimal = 1 + (betMargin / (float)100);
+					final float betMarginDecimal = 1 + (betMargin / (float) 100);
 					float bank = startingBank;
 					betOnGameCount = 0;
 					wins = 0;
@@ -68,11 +65,15 @@ public class HomeTests2 extends TestClass {
 							continue;
 						}
 
-						final List<SoccerMatch> homeMatches = matchesFiltered.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
-						final List<SoccerMatch> awayMatches = matchesFiltered.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
+						final List<SoccerMatch> homeMatches = matchesFiltered.stream().filter(
+								p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId())
+								.limit(lookBack).collect(Collectors.toList());
+						final List<SoccerMatch> awayMatches = matchesFiltered.stream().filter(
+								p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId())
+								.limit(lookBack).collect(Collectors.toList());
 
 						final long hemmaVinster = homeMatches.stream().filter(p -> p.getHomeScore() > p.getAwayScore()).count();
-						final long hemmaForluster= homeMatches.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
+						final long hemmaForluster = homeMatches.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
 
 						final long bortaVinster = awayMatches.stream().filter(p -> p.getAwayScore() > p.getHomeScore()).count();
 						final long bortaForluster = awayMatches.stream().filter(p -> p.getAwayScore() < p.getHomeScore()).count();
@@ -98,7 +99,8 @@ public class HomeTests2 extends TestClass {
 					if (bank > startingBank) {
 						final int lookBack2 = lookBack;
 						final int betMargin2 = betMargin;
-						final java.util.Optional<results> found = possitiveResults.stream().filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
+						final java.util.Optional<results> found = possitiveResults.stream()
+								.filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
 						if (found.isPresent()) {
 							final results results = found.get();
 							results.addCount();
@@ -113,28 +115,22 @@ public class HomeTests2 extends TestClass {
 			final LocalDateTime endDate2 = startDate2.plusYears(1);
 			matchesFiltered.clear();
 			matchesFiltered = matches.stream()
-					.filter(p ->
-					(p.getGameDate().isAfter(startDate2) || p.getGameDate().equals(startDate2)) &&
-					p.getGameDate().isBefore(endDate2))
+					.filter(p -> (p.getGameDate().isAfter(startDate2) || p.getGameDate().equals(startDate2)) && p.getGameDate().isBefore(endDate2))
 					.collect(Collectors.toList());
 		}
 
 		Collections.sort(possitiveResults);
 		for (final results res : possitiveResults) {
-			System.out.println("Lookback " + res.getLookback() + " and margin " + res.getMargin() + " At count " + res.getCount() + " of " + i + " with bank: " + res.getBank());
+			System.out.println("Lookback " + res.getLookback() + " and margin " + res.getMargin() + " At count " + res.getCount() + " of " + i
+					+ " with bank: " + res.getBank());
 		}
 	}
 
 	public ArrayList<SoccerMatch> getMatches() {
 		final ArrayList<SoccerMatch> result = new ArrayList<>();
 
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
-				+ "WHERE "
-				+ "res.leagueId = ? "
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE " + "res.leagueId = ? "
 				+ "ORDER BY gameDate ASC";
 
 		try {
@@ -143,7 +139,6 @@ public class HomeTests2 extends TestClass {
 
 			result.addAll(getMatches(stat));
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 

+ 185 - 0
OddsJavaFx/src/tests/LeagueTablePositionTest.java

@@ -0,0 +1,185 @@
+package tests;
+
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import data.TestDatabase;
+import objects.SoccerMatch;
+import tests.objects.LeagueDTO;
+import tests.objects.Standing;
+
+public class LeagueTablePositionTest extends TestClass {
+
+	@Override public void runTest() {
+		List<LeagueDTO> prioLeagues = TestDatabase.getInstance().getPrioLeagues();
+
+		for (LeagueDTO league : prioLeagues) {
+			if (league.getName().equals("championship")) {
+				runLeagueTest(league);
+			}
+		}
+
+	}
+
+	private void runLeagueTest(LeagueDTO league) {
+		getMatches(league);
+	}
+
+	private void getMatches(LeagueDTO league) {
+
+		List<SoccerMatch> matches = TestDatabase.getInstance().getMatches(league);
+		List<String> seasons = matches.stream().map(SoccerMatch::getSeason).distinct().sorted().toList();
+
+		for (String season : seasons.subList(1, seasons.size())) {
+			List<SoccerMatch> seasonMatches = matches.stream().filter(p -> p.getSeason().equals(season)).toList();
+			Map<String, Integer> intervals = getIntervals(seasonMatches);
+			int skipFirstXMatches = 10;
+			int currentMatch = 0;
+
+			int testValue = 0;
+
+			seasonMatches = seasonMatches.stream().sorted((m1, m2) -> m1.getGameDate().compareTo(m2.getGameDate())).toList();
+
+			for (SoccerMatch match : seasonMatches) {
+				List<Standing> standings = getStandings(seasonMatches.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate())).toList());
+
+				standings = standings.stream().sorted((s1, s2) -> Integer.compare(s2.getPoints(), s1.getPoints())).toList();
+
+				Optional<Standing> homeTeamStanding = standings.stream().filter(p -> p.getTeamName().equals(match.getHomeTeam().getTeamName()))
+						.findFirst();
+				Optional<Standing> awayTeamStanding = standings.stream().filter(p -> p.getTeamName().equals(match.getAwayTeam().getTeamName()))
+						.findFirst();
+				if (homeTeamStanding.isPresent() && awayTeamStanding.isPresent() && homeTeamStanding.get().getGamesPlayed() >= skipFirstXMatches) {
+					Standing hts = homeTeamStanding.get();
+					Standing ats = awayTeamStanding.get();
+
+					int homeTeamPosition = standings.indexOf(hts);
+					int awayTeamPosition = standings.indexOf(ats);
+
+//					System.out.println(String.format("%s Hometeam %s position %s Awayteam %s position %s Diff %s", season, hts.getTeamName(),
+//							homeTeamPosition, ats.getTeamName(), awayTeamPosition, homeTeamPosition - awayTeamPosition));
+//					standings.forEach(s -> System.out.println(String.format("%s \t\t wins %s \t draws %s \t losses %s \t points %s \t gamesPlayed %s",
+//							s.getTeamName(), s.getWins(), s.getDraws(), s.getLosses(), s.getPoints(), s.getGamesPlayed())));
+
+					List<SoccerMatch> matchesBefore = matches.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate())).toList();
+					matchesBefore = matchesBefore.stream().sorted((m1, m2) -> m1.getGameDate().compareTo(m2.getGameDate())).toList();
+					float avgGoals = getAvgGoalsWithSameDiff(matchesBefore, Math.abs(homeTeamPosition - awayTeamPosition));
+					List<Float> leagueAvarages = TestDatabase.getInstance().getLeagueAvarages(match.getHomeTeam().getTeamLeagueId(),
+							match.getHomeTeam().getCountryId(), match.getGameDate().format(DateTimeFormatter.BASIC_ISO_DATE));
+					if (Math.abs(avgGoals - (leagueAvarages.get(0) + leagueAvarages.get(1))) > 0.5) {
+						System.out.println(String.format(
+								"%s homeTeam: %s (%s) - awayTeam: %s (%s) Avg goals with diff %s is %s and leagueAvg is %s makes diff %s intervals is low %s mid %s high %s",
+								match.getGameDate(), match.getHomeTeam().getTeamName(), homeTeamPosition, match.getAwayTeam().getTeamName(),
+								awayTeamPosition, Math.abs(homeTeamPosition - awayTeamPosition), avgGoals,
+								leagueAvarages.get(0) + leagueAvarages.get(1), avgGoals - (leagueAvarages.get(0) + leagueAvarages.get(1)),
+								intervals.get("Low"), intervals.get("Low") + intervals.get("Mid"),
+								intervals.get("Low") + intervals.get("Mid") + intervals.get("High")));
+					}
+//					if (testValue++ > 100) {
+//						break; // TODO Testing
+//					}
+				}
+
+			}
+//			break; // TODO Testing
+		}
+	}
+
+	private float getAvgGoalsWithSameDiff(List<SoccerMatch> matchesBefore, int placementDiff) {
+		List<Standing> tempStanding = new ArrayList<>();
+		float result = 0.0f;
+		int matchedMatches = 0;
+		for (SoccerMatch match : matchesBefore) {
+			Optional<Standing> homeTeamStanding = tempStanding.stream().filter(ts -> ts.getTeamName().equals(match.getHomeTeam().getTeamName()))
+					.findFirst();
+			Optional<Standing> awayTeamStanding = tempStanding.stream().filter(ts -> ts.getTeamName().equals(match.getAwayTeam().getTeamName()))
+					.findFirst();
+
+			if (homeTeamStanding.isPresent() && awayTeamStanding.isPresent()) {
+				int homeTeamPosition = tempStanding.indexOf(homeTeamStanding.get());
+				int awayTeamPosition = tempStanding.indexOf(awayTeamStanding.get());
+
+				int diff = Math.abs(homeTeamPosition - awayTeamPosition);
+
+				if (diff == placementDiff) {
+					matchedMatches++;
+					result += match.getHomeScore() + match.getAwayScore();
+				}
+			}
+			updateStanding(tempStanding, match,
+					tempStanding.stream().filter(p -> p.getTeamName().equals(match.getHomeTeam().getTeamName())).findFirst(),
+					tempStanding.stream().filter(p -> p.getTeamName().equals(match.getAwayTeam().getTeamName())).findFirst());
+
+			tempStanding.sort((s1, s2) -> Integer.compare(s2.getPoints(), s1.getPoints()));
+		}
+
+		return matchedMatches > 0 ? result / matchedMatches : 0f;
+	}
+
+	private List<Standing> getStandings(List<SoccerMatch> seasonMatches) {
+		List<Standing> result = new ArrayList<>();
+		for (SoccerMatch match : seasonMatches) {
+			Optional<Standing> homeTeam = result.stream().filter(p -> p.getTeamName().equals(match.getHomeTeam().getTeamName())).findFirst();
+			Optional<Standing> awayTeam = result.stream().filter(p -> p.getTeamName().equals(match.getAwayTeam().getTeamName())).findFirst();
+
+			updateStanding(result, match, homeTeam, awayTeam);
+		}
+		return result;
+	}
+
+	private void updateStanding(List<Standing> result, SoccerMatch match, Optional<Standing> homeTeam, Optional<Standing> awayTeam) {
+		int homeScore = match.getHomeScore();
+		int awayScore = match.getAwayScore();
+		if (homeScore > awayScore) {
+			homeTeam.ifPresentOrElse(ht -> {
+				ht.setWins(ht.getWins() + 1);
+				ht.setGamesPlayed(ht.getGamesPlayed() + 1);
+				ht.setPoints(ht.getPoints() + 3);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 1, 0, 0, 3, 1)));
+
+			awayTeam.ifPresentOrElse(at -> {
+				at.setLosses(at.getLosses() + 1);
+				at.setGamesPlayed(at.getGamesPlayed() + 1);
+			}, () -> result.add(new Standing(match.getAwayTeam().getTeamName(), 0, 0, 1, 0, 1)));
+
+		} else if (homeScore == awayScore) {
+
+			homeTeam.ifPresentOrElse(ht -> {
+				ht.setDraws(ht.getDraws() + 1);
+				ht.setGamesPlayed(ht.getGamesPlayed() + 1);
+				ht.setPoints(ht.getPoints() + 1);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 0, 1, 0, 1, 1)));
+			awayTeam.ifPresentOrElse(at -> {
+				at.setDraws(at.getDraws() + 1);
+				at.setGamesPlayed(at.getGamesPlayed() + 1);
+				at.setPoints(at.getPoints() + 1);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 0, 1, 0, 1, 1)));
+		} else if (homeScore < awayScore) {
+			homeTeam.ifPresentOrElse(ht -> {
+				ht.setLosses(ht.getLosses() + 1);
+				ht.setGamesPlayed(ht.getGamesPlayed() + 1);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 0, 0, 1, 0, 1)));
+			awayTeam.ifPresentOrElse(at -> {
+				at.setWins(at.getWins() + 1);
+				at.setGamesPlayed(at.getGamesPlayed() + 1);
+				at.setPoints(at.getPoints() + 3);
+			}, () -> result.add(new Standing(match.getHomeTeam().getTeamName(), 1, 0, 0, 3, 1)));
+		}
+	}
+
+	private Map<String, Integer> getIntervals(List<SoccerMatch> seasonMatches) {
+		Map<String, Integer> result = new HashMap<>();
+
+		List<String> teams = seasonMatches.stream().map(m -> m.getHomeTeam().getTeamName()).distinct().toList();
+		result.put("Low", (int) Math.floor(teams.size() / 3.0));
+		result.put("Mid", (int) Math.ceil(teams.size() / 3.0));
+		result.put("High", (int) Math.floor(teams.size() / 3.0));
+
+		return result;
+	}
+
+}

+ 26 - 32
OddsJavaFx/src/tests/PrioCountriesAll.java

@@ -19,8 +19,7 @@ public class PrioCountriesAll extends TestClass {
 
 	private ArrayList<League> prioLeagues;
 
-	@Override
-	public void runTest() {
+	@Override public void runTest() {
 		float bank = 1000;
 		float betAmount = 1;
 		final float betLevel = 0.01f;
@@ -31,9 +30,8 @@ public class PrioCountriesAll extends TestClass {
 
 			final SoccerMatch soccerMatch = matches.get(i);
 
-			final List<SoccerMatch> matchesThisDate = matches.stream()
-					.filter(p -> p.getGameDate().format(DateTimeFormatter.ISO_DATE)
-							.equals(soccerMatch.getGameDate().format(DateTimeFormatter.ISO_DATE)))
+			final List<SoccerMatch> matchesThisDate = matches.stream().filter(
+					p -> p.getGameDate().format(DateTimeFormatter.ISO_DATE).equals(soccerMatch.getGameDate().format(DateTimeFormatter.ISO_DATE)))
 					.collect(Collectors.toList());
 
 			final int matchesThisDateCount = matchesThisDate.size();
@@ -48,21 +46,21 @@ public class PrioCountriesAll extends TestClass {
 				final int betOnThisMatch = checkIfBet(sm, activeLeague);
 				if (betOnThisMatch > 0) {
 					gamesBettedOn++;
-					if (betOnThisMatch == 1) { // Spela på hemma lag
+					if (betOnThisMatch == 1) { // Spela p� hemma lag
 						bank = bank - betAmount;
 						if (sm.getHomeScore() > sm.getAwayScore()) {
 							bank += betAmount * sm.getOdds1();
 							winsThisDay++;
 						}
-					} else if (betOnThisMatch == 2) { // Spela på borta lag
+					} else if (betOnThisMatch == 2) { // Spela p� borta lag
 						bank = bank - betAmount;
 
 						if (sm.getAwayScore() > sm.getHomeScore()) {
 							bank += betAmount * sm.getOdds2();
 							winsThisDay++;
 						}
-					} else if (betOnThisMatch == 3) { // Spela på bort och hemma
-						bank = bank - betAmount*2;
+					} else if (betOnThisMatch == 3) { // Spela p� bort och hemma
+						bank = bank - betAmount * 2;
 						if (sm.getHomeScore() > sm.getAwayScore()) {
 							bank += betAmount * sm.getOdds1();
 							winsThisDay++;
@@ -75,8 +73,8 @@ public class PrioCountriesAll extends TestClass {
 				}
 			}
 
-			System.out.println(matchesThisDate.get(0).getGameDate() + " result " + (bank - startBank) + " current bank: " + bank +
-					" bet on " + gamesBettedOn + "/" + matchesThisDateCount + " wins " + winsThisDay);
+			System.out.println(matchesThisDate.get(0).getGameDate() + " result " + (bank - startBank) + " current bank: " + bank + " bet on "
+					+ gamesBettedOn + "/" + matchesThisDateCount + " wins " + winsThisDay);
 			i += matchesThisDate.size();
 
 		}
@@ -86,12 +84,17 @@ public class PrioCountriesAll extends TestClass {
 		int returnValue = 0;
 		final float betMarginDecimal = 1 + (league.getBetMargin() / 100f);
 
-		final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getHomeTeam().getTeamId(), league.getLookback(), true, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
-		final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getAwayTeam().getTeamId(), league.getLookback(), false, sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
+		final TeamResults homeTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getHomeTeam().getTeamId(), league.getLookback(), true,
+				sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
+		final TeamResults awayTeamResults = GuiMysql.getInstance().getTeamResultsTest(sm.getAwayTeam().getTeamId(), league.getLookback(), false,
+				sm.getGameDate().format(DateTimeFormatter.ISO_DATE));
 
-		final float homeWinPercent = (homeTeamResults.getWins() + awayTeamResults.getLosses()) / Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
-		final float drawPercent = (homeTeamResults.getDraws() + awayTeamResults.getDraws()) / Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
-		final float awayWinPercent = (homeTeamResults.getLosses() + awayTeamResults.getWins()) / Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
+		final float homeWinPercent = (homeTeamResults.getWins() + awayTeamResults.getLosses())
+				/ Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
+		final float drawPercent = (homeTeamResults.getDraws() + awayTeamResults.getDraws())
+				/ Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
+		final float awayWinPercent = (homeTeamResults.getLosses() + awayTeamResults.getWins())
+				/ Float.valueOf(homeTeamResults.getCount() + awayTeamResults.getCount()) * 100;
 
 		final float homeOdds = 100 / homeWinPercent;
 		final float drawOdds = 100 / drawPercent;
@@ -114,23 +117,15 @@ public class PrioCountriesAll extends TestClass {
 		final ArrayList<String> leagueIds = Lists.newArrayList();
 		prioLeagues.forEach(p -> leagueIds.add(String.valueOf(p.getLeagueId())));
 
-		final String sql = "SELECT res.*, " +
-				"hTeam.name as homeTeamName, aTeam.name as awayTeamName " +
-				"FROM SoccerResults as res " +
-				"Join Team as hTeam ON res.homeTeam = hTeam.id " +
-				"Join Team as aTeam ON res.awayTeam = aTeam.id " +
-				"WHERE " +
-				"res.leagueId IN (" +
-				String.join(",", leagueIds) + ") " +
-				"ORDER BY gameDate ASC";
-
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id " + "WHERE " + "res.leagueId IN ("
+				+ String.join(",", leagueIds) + ") " + "ORDER BY gameDate ASC";
 
 		PreparedStatement stmt;
 		try {
 			stmt = getConnection().prepareStatement(sql);
 			matches.addAll(super.getMatches(stmt));
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -145,9 +140,9 @@ public class PrioCountriesAll extends TestClass {
 			final ResultSet rs = stat.executeQuery();
 
 			while (rs.next()) {
-				result.add(new League(rs.getInt("id"), rs.getString("name"), rs.getInt("lookback"), rs.getInt("betMargin"),
-						rs.getInt("lookbackHome"), rs.getInt("lookbackDraw"), rs.getInt("lookbackAway"),
-						rs.getInt("betMarginHome"), rs.getInt("betMarginDraw"), rs.getInt("betMarginAway")));
+				result.add(new League(rs.getInt("id"), rs.getString("name"), rs.getInt("lookback"), rs.getInt("betMargin"), rs.getInt("lookbackHome"),
+						rs.getInt("lookbackDraw"), rs.getInt("lookbackAway"), rs.getInt("betMarginHome"), rs.getInt("betMarginDraw"),
+						rs.getInt("betMarginAway")));
 			}
 		} catch (final SQLException e) {
 			e.printStackTrace();
@@ -156,8 +151,7 @@ public class PrioCountriesAll extends TestClass {
 		return result;
 	}
 
-	@Override
-	public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId, Integer countryId,
+	@Override public void setup(String date, float startingBank, float bettingLevel, Float betMargin, int lookBack, int sportId, Integer countryId,
 			Integer leagueId) {
 		// TODO Auto-generated method stub
 

+ 36 - 22
OddsJavaFx/src/tests/TestClass.java

@@ -109,11 +109,8 @@ public abstract class TestClass {
 
 	public void CalculateLookback(int leagueId, LocalDateTime date, int daysToCheck) {
 		final LocalDateTime startDate = date.minusDays(daysToCheck);
-		final String sql = "SELECT res.*, "
-				+ "hTeam.name as homeTeamName, aTeam.name as awayTeamName "
-				+ "FROM SoccerResults as res "
-				+ "Join Team as hTeam ON res.homeTeam = hTeam.id "
-				+ "Join Team as aTeam ON res.awayTeam = aTeam.id "
+		final String sql = "SELECT res.*, " + "hTeam.name as homeTeamName, aTeam.name as awayTeamName " + "FROM SoccerResults as res "
+				+ "Join Team as hTeam ON res.homeTeam = hTeam.id " + "Join Team as aTeam ON res.awayTeam = aTeam.id "
 				+ "WHERE res.leagueId = ? AND DATE(gameDate) < ? AND DATE(gameDate) > ? ORDER BY gameDate ASC";
 
 		try {
@@ -130,14 +127,13 @@ public abstract class TestClass {
 				this.bestDrawBank = startingBank;
 				this.bestAwayBank = startingBank;
 
-				// TODO Fixa så att man kontrollerar 1 år bakåt i tiden som Filtered Matches,
-				// plocka bort om possitive results är färre än 50%
+				// TODO Fixa s� att man kontrollerar 1 �r bak�t i tiden som Filtered Matches,
+				// plocka bort om possitive results �r f�rre �n 50%
 				recalcHome(matches);
 				recalcDraw(matches);
 				recalcAway(matches);
 			}
 		} catch (final SQLException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 
@@ -161,15 +157,19 @@ public abstract class TestClass {
 
 		for (int lookBack = 4; lookBack < 25; lookBack++) {
 			for (int betMargin = 4; betMargin < 35; betMargin++) {
-				final float betMarginDecimal = 1 + (betMargin / (float)100);
+				final float betMarginDecimal = 1 + (betMargin / (float) 100);
 				float bank = startingBank;
 				for (final SoccerMatch match : matches) {
 					if (match.getHomeScore() < 0 || match.getAwayScore() < 0) {
 						continue;
 					}
 
-					final List<SoccerMatch> homeMatches = matches.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
-					final List<SoccerMatch> awayMatches = matches.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
+					final List<SoccerMatch> homeMatches = matches.stream().filter(
+							p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId())
+							.limit(lookBack).collect(Collectors.toList());
+					final List<SoccerMatch> awayMatches = matches.stream().filter(
+							p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId())
+							.limit(lookBack).collect(Collectors.toList());
 
 					final long hemmaVinster = homeMatches.stream().filter(p -> p.getHomeScore() > p.getAwayScore()).count();
 					final long bortaForluster = awayMatches.stream().filter(p -> p.getAwayScore() < p.getHomeScore()).count();
@@ -193,7 +193,8 @@ public abstract class TestClass {
 				if (bank > startingBank) {
 					final int lookBack2 = lookBack;
 					final int betMargin2 = betMargin;
-					final java.util.Optional<results> found = possitiveResults.stream().filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
+					final java.util.Optional<results> found = possitiveResults.stream()
+							.filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
 					if (found.isPresent()) {
 						final results results = found.get();
 						results.addCount();
@@ -231,15 +232,19 @@ public abstract class TestClass {
 
 		for (int lookBack = 4; lookBack < 25; lookBack++) {
 			for (int betMargin = 4; betMargin < 35; betMargin++) {
-				final float betMarginDecimal = 1 + (betMargin / (float)100);
+				final float betMarginDecimal = 1 + (betMargin / (float) 100);
 				float bank = startingBank;
 				for (final SoccerMatch match : matches) {
 					if (match.getHomeScore() < 0 || match.getAwayScore() < 0) {
 						continue;
 					}
 
-					final List<SoccerMatch> homeMatches = matches.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
-					final List<SoccerMatch> awayMatches = matches.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
+					final List<SoccerMatch> homeMatches = matches.stream().filter(
+							p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId())
+							.limit(lookBack).collect(Collectors.toList());
+					final List<SoccerMatch> awayMatches = matches.stream().filter(
+							p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId())
+							.limit(lookBack).collect(Collectors.toList());
 
 					final long hemmaLika = homeMatches.stream().filter(p -> p.getHomeScore() == p.getAwayScore()).count();
 					final long bortaLika = awayMatches.stream().filter(p -> p.getAwayScore() == p.getHomeScore()).count();
@@ -263,7 +268,8 @@ public abstract class TestClass {
 				if (bank > startingBank) {
 					final int lookBack2 = lookBack;
 					final int betMargin2 = betMargin;
-					final java.util.Optional<results> found = possitiveResults.stream().filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
+					final java.util.Optional<results> found = possitiveResults.stream()
+							.filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
 					if (found.isPresent()) {
 						final results results = found.get();
 						results.addCount();
@@ -301,15 +307,19 @@ public abstract class TestClass {
 
 		for (int lookBack = 4; lookBack < 25; lookBack++) {
 			for (int betMargin = 4; betMargin < 35; betMargin++) {
-				final float betMarginDecimal = 1 + (betMargin / (float)100);
+				final float betMarginDecimal = 1 + (betMargin / (float) 100);
 				float bank = startingBank;
 				for (final SoccerMatch match : matches) {
 					if (match.getHomeScore() < 0 || match.getAwayScore() < 0) {
 						continue;
 					}
 
-					final List<SoccerMatch> homeMatches = matches.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
-					final List<SoccerMatch> awayMatches = matches.stream().filter(p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId()).limit(lookBack).collect(Collectors.toList());
+					final List<SoccerMatch> homeMatches = matches.stream().filter(
+							p -> p.getGameDate().isBefore(match.getGameDate()) && p.getHomeTeam().getTeamId() == match.getHomeTeam().getTeamId())
+							.limit(lookBack).collect(Collectors.toList());
+					final List<SoccerMatch> awayMatches = matches.stream().filter(
+							p -> p.getGameDate().isBefore(match.getGameDate()) && p.getAwayTeam().getTeamId() == match.getAwayTeam().getTeamId())
+							.limit(lookBack).collect(Collectors.toList());
 
 					final long hemmaForluster = homeMatches.stream().filter(p -> p.getHomeScore() < p.getAwayScore()).count();
 					final long bortaVinster = awayMatches.stream().filter(p -> p.getAwayScore() > p.getHomeScore()).count();
@@ -334,7 +344,8 @@ public abstract class TestClass {
 				if (bank > startingBank) {
 					final int lookBack2 = lookBack;
 					final int betMargin2 = betMargin;
-					final java.util.Optional<results> found = possitiveResults.stream().filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
+					final java.util.Optional<results> found = possitiveResults.stream()
+							.filter(r -> r.getLookback() == lookBack2 && r.getMargin() == betMargin2).findFirst();
 					if (found.isPresent()) {
 						final results results = found.get();
 						results.addCount();
@@ -379,6 +390,7 @@ public abstract class TestClass {
 		public void addCount() {
 			count++;
 		}
+
 		public int getCount() {
 			return count;
 		}
@@ -386,18 +398,20 @@ public abstract class TestClass {
 		public int getLookback() {
 			return lookback;
 		}
+
 		public int getMargin() {
 			return margin;
 		}
+
 		public void setLookback(int lookback) {
 			this.lookback = lookback;
 		}
+
 		public void setMargin(int margin) {
 			this.margin = margin;
 		}
 
-		@Override
-		public int compareTo(results res) {
+		@Override public int compareTo(results res) {
 			int returnValue = 0;
 			if (this.count > res.getCount()) {
 				returnValue = -1;

+ 53 - 0
OddsJavaFx/src/tests/objects/LeagueDTO.java

@@ -0,0 +1,53 @@
+package tests.objects;
+
+public class LeagueDTO {
+
+	private int id;
+	private String name;
+	private int countryId;
+	private String countryName;
+
+	public LeagueDTO() {
+	}
+
+	public LeagueDTO(int id, String name, int countryId, String countryName) {
+		this.id = id;
+		this.name = name;
+		this.countryId = countryId;
+		this.countryName = countryName;
+
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public int getCountryId() {
+		return countryId;
+	}
+
+	public void setCountryId(int countryId) {
+		this.countryId = countryId;
+	}
+
+	public String getCountryName() {
+		return countryName;
+	}
+
+	public void setCountryName(String countryName) {
+		this.countryName = countryName;
+	}
+
+}

+ 72 - 0
OddsJavaFx/src/tests/objects/Standing.java

@@ -0,0 +1,72 @@
+package tests.objects;
+
+public class Standing {
+	String teamName;
+	int wins;
+	int draws;
+	int losses;
+	int points;
+	int gamesPlayed;
+
+	public Standing() {
+	}
+
+	public Standing(String teamName, int wins, int draws, int losses, int points, int gamesPlayed) {
+		super();
+		this.teamName = teamName;
+		this.wins = wins;
+		this.draws = draws;
+		this.losses = losses;
+		this.points = points;
+		this.gamesPlayed = gamesPlayed;
+	}
+
+	public String getTeamName() {
+		return teamName;
+	}
+
+	public void setTeamName(String teamName) {
+		this.teamName = teamName;
+	}
+
+	public int getWins() {
+		return wins;
+	}
+
+	public void setWins(int wins) {
+		this.wins = wins;
+	}
+
+	public int getDraws() {
+		return draws;
+	}
+
+	public void setDraws(int draws) {
+		this.draws = draws;
+	}
+
+	public int getLosses() {
+		return losses;
+	}
+
+	public void setLosses(int losses) {
+		this.losses = losses;
+	}
+
+	public int getPoints() {
+		return points;
+	}
+
+	public void setPoints(int points) {
+		this.points = points;
+	}
+
+	public int getGamesPlayed() {
+		return gamesPlayed;
+	}
+
+	public void setGamesPlayed(int gamesPlayed) {
+		this.gamesPlayed = gamesPlayed;
+	}
+
+}