package org.openbakery.racecontrol; import java.util.*; import org.openbakery.jinsim.response.PlayerResponse; import org.openbakery.racecontrol.data.Driver; import org.openbakery.racecontrol.data.RaceEntry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Race { private static Logger log = LoggerFactory.getLogger(Race.class); private RaceEntry raceEntry; private ArrayList<String> messages; public Race() { messages = new ArrayList<String>(); } public RaceEntry getRaceEntry() { if (raceEntry == null) { raceEntry = new RaceEntry(); } return raceEntry; } public void setRaceEntry(RaceEntry raceEntry) { this.raceEntry = raceEntry; } public Driver getRaceDriver(PlayerResponse playerResponse) throws DriverNotFoundException { if (raceEntry != null) { for (Driver driver : raceEntry.getDrivers()) { log.debug("driver in entry: {}", driver); if (driver.getPlayerId() == playerResponse.getPlayerId()) { return driver; } } } throw new DriverNotFoundException("cannot find driver for response " + playerResponse); } public Driver getDriverByPlayerId(int playerId) { if (raceEntry == null) { return null; } log.debug("getDriverByPlayerId {} in drivers: {}", playerId, raceEntry.getDrivers()); for (Driver driver : raceEntry.getDrivers()) { if (driver.getPlayerId() == playerId) { log.debug("driver found: {}", driver); return driver; } } return null; } /* public Driver getDriver(int connectionId, String name) { if (log.isDebugEnabled()) { log.debug("get driver: id=" + connectionId + " name=" + name); log.debug("drivers: " + drivers); } Driver driver = drivers.get(connectionId); if (driver != null) { return driver; } if (raceEntry != null) { for (Driver d : raceEntry.getDrivers()) { if (name != null && name.equals(d.getName())) { d.setConnectionId(connectionId); d.addJoin(); drivers.put(connectionId, d); return d; } } } log.debug("no driver found so creating a new one"); driver = new Driver(connectionId); drivers.put(connectionId, driver); return driver; } */ public boolean hasRaceEntry() { log.debug("hasRaceEntry? {}", raceEntry); return raceEntry != null; } public void addRaceDriver(Driver driver) { log.debug("add race driver to entry: {}", driver); getRaceEntry().addDriver(driver); } public List<Driver> getRaceDrivers() { if (raceEntry == null) { return Collections.emptyList(); } return new ArrayList<Driver>(raceEntry.getDrivers()); } public void reset() { log.debug("---- RESET ----"); messages = new ArrayList<String>(); raceEntry = null; } public void addMessage(String message) { messages.add(message); } public boolean hasFinished(Driver driver) { if (hasRaceEntry()) { if (getRaceEntry().isQualifying()) { return false; } if (getRaceEntry().isPractice()) { return false; } } return driver.hasResult(); } public List<Driver> getAdmins() { LinkedList<Driver> adminList = new LinkedList<Driver>(); for (Driver d : getRaceEntry().getDrivers()) { if (d.isAdmin()) { adminList.add(d); } } return adminList; } public Driver getDriver(int connectionId) { if (raceEntry != null) { return raceEntry.getDriverWithConnectionId(connectionId); } return null; } }