Skip to content
Snippets Groups Projects
Commit 761335b6 authored by Callum Gran's avatar Callum Gran
Browse files

fix(teamDAO): fixed problem where teams went out of competition in all divisions

parent 57399bcc
No related branches found
No related tags found
No related merge requests found
Showing
with 68 additions and 53 deletions
......@@ -94,12 +94,6 @@
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.kordamp.bootstrapfx</groupId>
<artifactId>bootstrapfx-core</artifactId>
<version>0.4.0</version>
</dependency>
<dependency>
<groupId>com.github.Dansoftowner</groupId>
<artifactId>jSystemThemeDetector</artifactId>
......
......@@ -282,7 +282,15 @@ public class Cup {
*/
@Override
public String toString() {
int amountOfTeams = divisions.stream().map(n -> n.getCompetingTeams().size()).reduce(0, Integer::sum);
ArrayList<Team> teams = new ArrayList<>();
for (Division division : divisions) {
for (Team team : division.getCompetingTeams().values()) {
if (!teams.stream().anyMatch(n -> n.getTeamId() == team.getTeamId())) {
teams.add(team);
}
}
}
int amountOfTeams = teams.size();
int amountOfMatches = divisions.stream().map(n -> n.getMatches().size()).reduce(0, Integer::sum);
return getName() + " - " + amountOfTeams + " teams - "
......
......@@ -3,7 +3,6 @@ package edu.ntnu.idatt1002.k1g4;
import edu.ntnu.idatt1002.k1g4.dao.MatchDAO;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
/**
......
......@@ -283,6 +283,7 @@ public class Model {
LocalDateTime startTime;
long duration;
String field;
if (teamOneComBox.getValue().equals(teamTwoComBox.getValue())) giveError("Teams cannot be the same");
try {
MatchDAO matchDAO = new MatchDAO();
teamOne = teamOneComBox.getValue();
......
......@@ -18,6 +18,7 @@ import javafx.scene.text.Text;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.function.Predicate;
import static edu.ntnu.idatt1002.k1g4.client.Model.*;
......@@ -192,7 +193,13 @@ public class CupOverviewController implements Initializable {
private void initLists(Cup currentCup) {
currentCup.getDivisions().forEach(n -> divisionListView.getItems().add(n));
currentCup.getDivisions().forEach(n -> n.getMatches().forEach(m -> matchListView.getItems().add(m)));
currentCup.getDivisions().forEach(n -> n.getCompetingTeams().values().forEach(m -> teamListView.getItems().add(m)));
for (Division division : currentCup.getDivisions()) {
for (Team team : division.getCompetingTeams().values()) {
if (!teamListView.getItems().stream().anyMatch(n -> n.getTeamId() == team.getTeamId())) {
teamListView.getItems().add(team);
}
}
}
}
/**
......
......@@ -154,7 +154,7 @@ public class DivisionOverviewController implements Initializable {
if (rc) {
TeamDAO teamDAO = new TeamDAO();
MatchDAO matchDAO = new MatchDAO();
teamDAO.deleteTeam(getCurrentTeam().getTeamId());
teamDAO.deleteTeam(getCurrentTeam().getTeamId(), getCurrentDivision().getDivisionId());
getCurrentDivision().setCompetingTeams(teamDAO.getTeamsByDivision(getCurrentDivision().getDivisionId()));
getCurrentDivision().setMatches(matchDAO.getMatchesByDivision(getCurrentDivision().getDivisionId()));
changeScene("division-overview");
......
......@@ -65,7 +65,7 @@ public class TeamOverviewController implements Initializable {
if (rc) {
TeamDAO teamDAO = new TeamDAO();
MatchDAO matchDAO = new MatchDAO();
teamDAO.deleteTeam(getCurrentTeam().getTeamId());
teamDAO.deleteTeam(getCurrentTeam().getTeamId(), getCurrentDivision().getDivisionId());
getCurrentDivision().setCompetingTeams(teamDAO.getTeamsByDivision(getCurrentDivision().getDivisionId()));
getCurrentDivision().setMatches(matchDAO.getMatchesByDivision(getCurrentDivision().getDivisionId()));
changeScene("division-overview");
......
......@@ -78,6 +78,7 @@ public class CreateDatabase {
String divisionsTeamsSql = "CREATE TABLE IF NOT EXISTS divisionsteamslink(\n"
+ " divisionId integer,\n"
+ " teamId integer,\n"
+ " competing bit, \n"
+ " FOREIGN KEY (divisionId) REFERENCES divisions(divisionId),\n"
+ " FOREIGN KEY (teamId) REFERENCES teams(teamId),\n"
+ " PRIMARY KEY (divisionId, teamId)\n"
......
......@@ -132,15 +132,13 @@ public class CupDAO {
DivisionDAO divisionDAO = new DivisionDAO();
TeamDAO teamDAO = new TeamDAO();
MatchDAO matchDAO = new MatchDAO();
System.out.println(cupId);
ArrayList<Division> divisions = divisionDAO.getDivisionsByCup(cupId);
String sql = "DELETE FROM cups WHERE cupId = ?";
for (Division division : divisions) {
divisionDAO.deleteDivision(division.getDivisionId());
HashMap<Integer, Team> teams = teamDAO.getTeamsByDivision(division.getDivisionId());
teams.forEach((key, value) -> {
System.out.println("Team key and value: " + key + " : " + value);
teamDAO.deleteTeam(key);
teamDAO.deleteTeam(key, division.getDivisionId());
});
ArrayList<Match> matches = matchDAO.getMatchesByDivision(division.getDivisionId());
for (Match match : matches) {
......
......@@ -85,9 +85,9 @@ public class DivisionDAO {
* @param divisionId int: the id of the division to be deleted
*/
public void deleteDivision(int divisionId) {
String sqlDeleteFromTeams = "DELETE FROM teams WHERE teams.teamId IN (" +
"SELECT teams.teamId FROM teams INNER JOIN divisionsteamslink dtl ON teams.teamId = dtl.teamId " +
"INNER JOIN divisions div ON dtl.divisionId = div.divisionId WHERE dtl.divisionId = ?)";
String sqlDeleteFromTeams = "DELETE FROM divisionsteamslink WHERE divisionsteamslink.divisionId IN (" +
"SELECT divisionsteamslink.divisionId FROM divisionsteamslink " +
"INNER JOIN divisions div ON divisionsteamslink.divisionId = div.divisionId WHERE divisionsteamslink.divisionId = ?)";
String sql = "DELETE FROM divisions WHERE divisionId = ?";
String sqlTeamDivisionLink = "DELETE FROM divisionsteamslink WHERE divisionId = ?";
String sqlDeleteDivisionMatches = "DELETE FROM matches WHERE divisionId = ?";
......
......@@ -44,8 +44,8 @@ public class MatchDAO {
match = new Match();
teamDAO = new TeamDAO();
match.setDivisionId(resultSet.getInt("divisionId"));
match.setTeamOne(new Team(teamDAO.getTeamById(resultSet.getInt("team1Id"))));
match.setTeamTwo(new Team(teamDAO.getTeamById(resultSet.getInt("team2Id"))));
match.setTeamOne(new Team(teamDAO.getTeamById(resultSet.getInt("team1Id"), divisionId)));
match.setTeamTwo(new Team(teamDAO.getTeamById(resultSet.getInt("team2Id"), divisionId)));
match.getTeamOne().setTeamId(resultSet.getInt("team1Id"));
match.getTeamTwo().setTeamId(resultSet.getInt("team2Id"));
match.setScore(new int[] {resultSet.getInt("scoreTeam1"), resultSet.getInt("scoreTeam2")});
......@@ -90,8 +90,8 @@ public class MatchDAO {
match = new Match();
teamDAO = new TeamDAO();
match.setDivisionId(resultSet.getInt("divisionId"));
match.setTeamOne(new Team(teamDAO.getTeamById(resultSet.getInt("team1Id"))));
match.setTeamTwo(new Team(teamDAO.getTeamById(resultSet.getInt("team2Id"))));
match.setTeamOne(new Team(teamDAO.getTeamById(resultSet.getInt("team1Id"), match.getDivisionId())));
match.setTeamTwo(new Team(teamDAO.getTeamById(resultSet.getInt("team2Id"), match.getDivisionId())));
match.getTeamOne().setTeamId(resultSet.getInt("team1Id"));
match.getTeamTwo().setTeamId(resultSet.getInt("team2Id"));
match.setScore(new int[] {resultSet.getInt("scoreTeam1"), resultSet.getInt("scoreTeam2")});
......@@ -133,8 +133,8 @@ public class MatchDAO {
resultSet = preparedStatement.executeQuery();
TeamDAO teamDAO = new TeamDAO();
match.setDivisionId(resultSet.getInt("divisionId"));
match.setTeamOne(new Team(teamDAO.getTeamById(resultSet.getInt("team1Id"))));
match.setTeamTwo(new Team(teamDAO.getTeamById(resultSet.getInt("team2Id"))));
match.setTeamOne(new Team(teamDAO.getTeamById(resultSet.getInt("team1Id"), resultSet.getInt("divisionId"))));
match.setTeamTwo(new Team(teamDAO.getTeamById(resultSet.getInt("team2Id"), resultSet.getInt("divisionId"))));
match.getTeamOne().setTeamId(resultSet.getInt("team1Id"));
match.getTeamTwo().setTeamId(resultSet.getInt("team2Id"));
match.setScore(new int[] {resultSet.getInt("scoreTeam1"), resultSet.getInt("scoreTeam2")});
......@@ -205,8 +205,8 @@ public class MatchDAO {
preparedStatement.setString(8, match.getEndTime().toString());
if (match.isFinished()) {
TeamDAO teamDAO = new TeamDAO();
teamDAO.updateCompeting(match.getTeamOne());
teamDAO.updateCompeting(match.getTeamTwo());
teamDAO.updateCompeting(match.getTeamOne(), match.getDivisionId());
teamDAO.updateCompeting(match.getTeamTwo(), match.getDivisionId());
}
preparedStatement.setString(9, match.getField());
preparedStatement.setBoolean(10, match.isFinished());
......
......@@ -37,7 +37,6 @@ public class TeamDAO {
team = new Team();
team.setTeamId(resultSet.getInt("teamId"));
team.setName(resultSet.getString("teamName"));
team.setCompeting(resultSet.getBoolean("competing"));
teams.add(team);
}
} catch (SQLException e) {
......@@ -59,7 +58,7 @@ public class TeamDAO {
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
Connection connection = null;
String sql = "SELECT * FROM teams, divisions, divisionsteamslink WHERE divisions.divisionId = divisionsteamslink.divisionId AND divisions.divisionId = ? AND teams.teamId = divisionsteamslink.teamId";
String sql = "SELECT teams.teamId, teams.teamName, dtl.competing FROM divisions, teams, divisionsteamslink dtl WHERE divisions.divisionId = dtl.divisionId AND divisions.divisionId = ? AND teams.teamId = dtl.teamId";
try {
connection = Database.instance().getConnection();
preparedStatement = connection.prepareStatement(sql);
......@@ -90,7 +89,7 @@ public class TeamDAO {
*/
public Team getTeamByName(String name) {
Team team = null;
String sql = "SELECT * FROM teams WHERE teamName=?";
String sql = "SELECT * FROM teams WHERE teams.teamName=?";
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
Connection connection = null;
......@@ -99,7 +98,15 @@ public class TeamDAO {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
resultSet = preparedStatement.executeQuery();
team = getTeamFromResultSet(resultSet);
try {
if (resultSet.next()) {
team = new Team();
team.setTeamId(resultSet.getInt("teamId"));
team.setName(resultSet.getString("teamName"));
}
} catch (SQLException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
......@@ -115,9 +122,9 @@ public class TeamDAO {
* @return team Team: the team with the corresponding id.
* @throws SQLException the sql exception
*/
public Team getTeamById(int teamId) {
public Team getTeamById(int teamId, int divisionId) {
Team team = null;
String sql = "SELECT * FROM teams WHERE teamId=?";
String sql = "SELECT teams.teamId, teams.teamName, dtl.competing FROM teams, divisionsteamslink dtl WHERE teams.teamId=? AND dtl.divisionId=? AND dtl.teamId=teams.teamId";
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
Connection connection = null;
......@@ -125,6 +132,7 @@ public class TeamDAO {
connection = Database.instance().getConnection();
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, teamId);
preparedStatement.setInt(2, divisionId);
resultSet = preparedStatement.executeQuery();
team = getTeamFromResultSet(resultSet);
} catch (SQLException e) {
......@@ -162,8 +170,8 @@ public class TeamDAO {
*
* @param team Team: the team to update.
*/
public void updateCompeting(Team team) {
String sql = "UPDATE teams SET competing = ? WHERE teamId = ?";
public void updateCompeting(Team team, int divisionId) {
String sql = "UPDATE divisionsteamslink SET competing = ? WHERE teamId = ? AND divisionId=?";
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
Connection connection = null;
......@@ -172,6 +180,7 @@ public class TeamDAO {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setBoolean(1, team.isCompeting());
preparedStatement.setInt(2, team.getTeamId());
preparedStatement.setInt(3, divisionId);
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
......@@ -187,7 +196,7 @@ public class TeamDAO {
* @param team Team: the team to be added to the database.
*/
public void addTeam(Team team, int divisionId) throws IllegalArgumentException {
String sql = "INSERT INTO teams(teamName, competing) VALUES(?, ?)";
String sql = "INSERT INTO teams(teamName) VALUES(?)";
Team teamFromDb = getTeamByName(team.getName());
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
......@@ -197,7 +206,6 @@ public class TeamDAO {
connection = Database.instance().getConnection();
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, team.getName());
preparedStatement.setBoolean(2, team.isCompeting());
preparedStatement.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
......@@ -234,7 +242,7 @@ public class TeamDAO {
* @param divisionId int: the division id
*/
public void linkTeamToDivision(int teamId, int divisionId) {
String sql = "INSERT INTO divisionsteamslink(divisionId, teamId) VALUES (?, ?)";
String sql = "INSERT INTO divisionsteamslink(divisionId, teamId, competing) VALUES (?, ?, ?)";
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
Connection connection = null;
......@@ -243,6 +251,7 @@ public class TeamDAO {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, divisionId);
preparedStatement.setInt(2, teamId);
preparedStatement.setBoolean(3, true);
preparedStatement.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
......@@ -256,24 +265,22 @@ public class TeamDAO {
*
* @param teamId int: the id of the team to delete
*/
public void deleteTeam(int teamId) {
String sql = "DELETE FROM teams WHERE teamId = ?";
String sqlTeamDivisionLink = "DELETE FROM divisionsteamslink WHERE teamId = ?";
String sqlTeamMatch = "DELETE FROM matches WHERE team1Id = ? OR team2Id = ?";
public void deleteTeam(int teamId, int divisionId) {
String sqlTeamDivisionLink = "DELETE FROM divisionsteamslink WHERE teamId = ? AND divisionId = ?";
String sqlTeamMatch = "DELETE FROM matches WHERE team1Id = ? OR team2Id = ? AND divisionId = ?";
PreparedStatement preparedStatement = null;
Connection connection = null;
ResultSet resultSet = null;
try {
connection = Database.instance().getConnection();
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, teamId);
preparedStatement.executeUpdate();
preparedStatement = connection.prepareStatement(sqlTeamDivisionLink);
preparedStatement.setInt(1, teamId);
preparedStatement.setInt(2, divisionId);
preparedStatement.executeUpdate();
preparedStatement = connection.prepareStatement(sqlTeamMatch);
preparedStatement.setInt(1, teamId);
preparedStatement.setInt(2, teamId);
preparedStatement.setInt(3, divisionId);
preparedStatement.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
......
......@@ -28,8 +28,7 @@ public class CreateTestDB {
String teamsSql = "CREATE TABLE IF NOT EXISTS teams (\n"
+ " teamId integer PRIMARY KEY,\n"
+ " teamName text,\n"
+ " competing bit\n"
+ " teamName text\n"
+ ");";
......@@ -68,16 +67,17 @@ public class CreateTestDB {
String divisionsTeamsSql = "CREATE TABLE IF NOT EXISTS divisionsteamslink(\n"
+ " divisionId integer,\n"
+ " teamId integer,\n"
+ " competing bit, \n"
+ " FOREIGN KEY (divisionId) REFERENCES divisions(divisionId),\n"
+ " FOREIGN KEY (teamId) REFERENCES teams(teamId),\n"
+ " PRIMARY KEY (divisionId, teamId)\n"
+ ");";
String insertTeam = "INSERT INTO teams (teamName, competing) VALUES ('Jims Warriors', 1)";
String insertTeam2 = "INSERT INTO teams (teamName, competing) VALUES ('Rogers Warriors', 1)";
String insertTeam3 = "INSERT INTO teams (teamName, competing) VALUES ('Tommys Krigere', 1)";
String insertTeam4 = "INSERT INTO teams (teamName, competing) VALUES ('Jeremies Fighters', 1)";
String insertTeam = "INSERT INTO teams (teamName) VALUES ('Jims Warriors')";
String insertTeam2 = "INSERT INTO teams (teamName) VALUES ('Rogers Warriors')";
String insertTeam3 = "INSERT INTO teams (teamName) VALUES ('Tommys Krigere')";
String insertTeam4 = "INSERT INTO teams (teamName) VALUES ('Jeremies Fighters')";
String insertMatch = "INSERT INTO matches (divisionId, team1Id, team2Id, scoreTeam1, scoreTeam2, matchStartTime, matchEndTime, duration, fieldNumber, finished, walkover, knockout) VALUES (1, 1, 2, 0, 0, '2007-12-03T10:15:30', '2007-12-03T10:15:50', 20, 'A1', 1, 1, 1)";
String insertMatch2 = "INSERT INTO matches (divisionId, team1Id, team2Id, scoreTeam1, scoreTeam2, matchStartTime, matchEndTime, duration, fieldNumber, finished, walkover, knockout) VALUES (1, 2, 3, 0, 0, '2008-12-03T10:15:30', '2008-12-03T10:15:50', 20, 'A2', 1, 1, 1)";
String insertMatch3 = "INSERT INTO matches (divisionId, team1Id, team2Id, scoreTeam1, scoreTeam2, matchStartTime, matchEndTime, duration, fieldNumber, finished, walkover, knockout) VALUES (1, 1, 4, 0, 0, '2009-12-03T10:15:30', '2009-12-03T10:15:50', 20, 'A3', 1, 1, 1)";
......@@ -88,10 +88,10 @@ public class CreateTestDB {
String insertCup = "INSERT INTO cups (cupName, location, cupStartTime, cupEndTime) VALUES ('Dragvoll Cup', 'Dragvoll', '2007-12-03T10:15:30', '2007-12-05T10:15:30')";
String insertCup2 = "INSERT INTO cups (cupName, location, cupStartTime, cupEndTime) VALUES ('Inne Cup', 'Oslo', '2009-12-03T10:15:30', '2009-12-05T10:15:30')";
String insertCup3 = "INSERT INTO cups (cupName, location, cupStartTime, cupEndTime) VALUES ('Bandy Cup', 'Trondheim', '2009-12-03T10:15:30', '2009-12-05T10:15:30')";
String linkTeamsDivisions = "INSERT INTO divisionsteamslink (divisionId, teamId) VALUES (1, 1)";
String linkTeamsDivisions2 = "INSERT INTO divisionsteamslink (divisionId, teamId) VALUES (1, 2)";
String linkTeamsDivisions3 = "INSERT INTO divisionsteamslink (divisionId, teamId) VALUES (1, 3)";
String linkTeamsDivisions4 = "INSERT INTO divisionsteamslink (divisionId, teamId) VALUES (1, 4)";
String linkTeamsDivisions = "INSERT INTO divisionsteamslink (divisionId, teamId, competing) VALUES (1, 1, 1)";
String linkTeamsDivisions2 = "INSERT INTO divisionsteamslink (divisionId, teamId, competing) VALUES (1, 2, 1)";
String linkTeamsDivisions3 = "INSERT INTO divisionsteamslink (divisionId, teamId, competing) VALUES (1, 3, 1)";
String linkTeamsDivisions4 = "INSERT INTO divisionsteamslink (divisionId, teamId, competing) VALUES (1, 4, 1)";
try {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment