package org.openbakery.racecontrol.persistence;
import org.openbakery.racecontrol.data.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: rene
* Date: 23.03.12
* Time: 16:16
* To change this template use File | Settings | File Templates.
*/
public class RCSVGenerator {
public static final String DELIMITER = ";";
private static Logger log = LoggerFactory.getLogger(RCSVGenerator.class);
public String generate(RaceEntry raceEntry) {
if (raceEntry == null) {
throw new IllegalArgumentException("Given race is null");
}
StringWriter writer = new StringWriter();
try {
RaceEntry.storeHeader(writer);
raceEntry.store(writer);
Driver.storeHeader(writer);
for (Driver driver : raceEntry.getDrivers()) {
driver.store(writer);
}
Result.storeHeader(writer);
for (Driver driver : raceEntry.getDrivers()) {
Result result = driver.getResult();
if (result != null)
result.store(driver.getName(), writer);
}
Lap.storeHeader(writer);
for (Driver driver : raceEntry.getDrivers()) {
log.debug("number of laps found: {}", driver.getCompletedLaps().size());
log.debug("driver result: {}", driver.getResult());
if (driver.getResult() != null) {
List<Lap> longestAttemptLaps = driver.getLongestAttemptLaps();
log.debug("longest attempt laps: {}", longestAttemptLaps.size());
for (Lap lap : longestAttemptLaps) {
lap.store(driver.getName(), writer);
}
}
}
Flag.storeHeader(writer);
for (Driver driver : raceEntry.getDrivers()) {
Result result = driver.getResult();
if (result != null) {
int numberLaps = result.getLapsCompleted();
for (Lap lap : driver.getAllLaps()) {
for (Flag flag : lap.getFlags()) {
if (lap.getNumber() <= numberLaps) {
flag.store(driver.getName(), lap.getNumber(), writer);
}
}
}
}
}
} catch (IOException e) {
log.error(e.getMessage(), e);
return "";
}
return writer.toString();
}
}