parent
ab1b9b8731
commit
ff446f4a5c
@ -1,24 +0,0 @@ |
|||||||
package de.kreth.vaadin.clubhelper.vaadinclubhelper.data; |
|
||||||
|
|
||||||
import java.io.Serializable; |
|
||||||
import java.util.HashSet; |
|
||||||
import java.util.Set; |
|
||||||
|
|
||||||
public class CompetitionDetails implements Serializable { |
|
||||||
|
|
||||||
private static final long serialVersionUID = 2167132205051467946L; |
|
||||||
|
|
||||||
private Set<CompetitionGroup> cpGroups; |
|
||||||
|
|
||||||
public Set<CompetitionGroup> getCpGroups() { |
|
||||||
return cpGroups; |
|
||||||
} |
|
||||||
|
|
||||||
public void parseCompetitionGroups(String text) { |
|
||||||
cpGroups = new HashSet<>(); |
|
||||||
String[] lines = text.split("\n"); |
|
||||||
for (String line: lines) { |
|
||||||
cpGroups.add(CompetitionGroup.parseLine(line)); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,98 +0,0 @@ |
|||||||
package de.kreth.vaadin.clubhelper.vaadinclubhelper.data; |
|
||||||
|
|
||||||
import java.io.File; |
|
||||||
import java.io.IOException; |
|
||||||
import java.io.Serializable; |
|
||||||
import java.net.URISyntaxException; |
|
||||||
import java.net.URL; |
|
||||||
import java.nio.charset.Charset; |
|
||||||
import java.util.List; |
|
||||||
import java.util.regex.Matcher; |
|
||||||
import java.util.regex.Pattern; |
|
||||||
|
|
||||||
import com.google.common.io.Files; |
|
||||||
|
|
||||||
public class CompetitionGroup implements Serializable { |
|
||||||
|
|
||||||
private static final long serialVersionUID = 8670759590642549124L; |
|
||||||
public static final int OPEN_END_MAX_YEAR = 9999; |
|
||||||
public static final int OPEN_END_MIN_YEAR = 0; |
|
||||||
|
|
||||||
private static final Pattern YEAR_PATTERN = Pattern.compile("[^a-zA-Z](\\d{2,4})"); |
|
||||||
private static final Pattern COMPULSORY_PATTERN = Pattern.compile("[PMW] ?\\d{1,2}\\s?$"); |
|
||||||
private static final Rules RULES = new Rules(); |
|
||||||
|
|
||||||
private int minBirthYear; |
|
||||||
private int maxBirthYear = OPEN_END_MAX_YEAR; |
|
||||||
private String compulsory; |
|
||||||
|
|
||||||
private CompetitionGroup() { |
|
||||||
} |
|
||||||
|
|
||||||
CompetitionGroup(int oldest, int youngest) { |
|
||||||
this.maxBirthYear = youngest; |
|
||||||
this.minBirthYear = oldest; |
|
||||||
} |
|
||||||
|
|
||||||
public int getOldestBirthYear() { |
|
||||||
return minBirthYear; |
|
||||||
} |
|
||||||
|
|
||||||
public int getYoungestBirthYear() { |
|
||||||
return maxBirthYear; |
|
||||||
} |
|
||||||
|
|
||||||
public static CompetitionGroup parseLine(String line) { |
|
||||||
CompetitionGroup competitionGroup = new CompetitionGroup(); |
|
||||||
|
|
||||||
Matcher matcher = YEAR_PATTERN.matcher(line); |
|
||||||
if (matcher.find()) { |
|
||||||
competitionGroup.minBirthYear = Integer.parseInt(matcher.group(1)); |
|
||||||
} |
|
||||||
if (matcher.find()) { |
|
||||||
competitionGroup.maxBirthYear = Integer.parseInt(matcher.group(1)); |
|
||||||
} else { |
|
||||||
if (RULES.isYoungestOnly(line)) { |
|
||||||
competitionGroup.maxBirthYear = competitionGroup.minBirthYear; |
|
||||||
competitionGroup.minBirthYear = OPEN_END_MIN_YEAR; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (competitionGroup.maxBirthYear < competitionGroup.minBirthYear) { |
|
||||||
int tmp = competitionGroup.maxBirthYear; |
|
||||||
competitionGroup.maxBirthYear = competitionGroup.minBirthYear; |
|
||||||
competitionGroup.minBirthYear = tmp; |
|
||||||
} |
|
||||||
matcher = COMPULSORY_PATTERN.matcher(line); |
|
||||||
if (matcher.find()) { |
|
||||||
competitionGroup.compulsory = matcher.group().trim(); |
|
||||||
} |
|
||||||
return competitionGroup; |
|
||||||
} |
|
||||||
|
|
||||||
private static class Rules { |
|
||||||
final String youngest; |
|
||||||
|
|
||||||
public Rules() { |
|
||||||
URL uri = getClass().getResource("CompetitionGroupRules.txt"); |
|
||||||
try { |
|
||||||
List<String> lines = Files.readLines(new File(uri.toURI()), Charset.defaultCharset()); |
|
||||||
youngest = lines.get(0); |
|
||||||
} catch (IOException | URISyntaxException e) { |
|
||||||
throw new RuntimeException(e); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isYoungestOnly(String line) { |
|
||||||
return line.toLowerCase().contains(youngest); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public boolean isBirthyearInGroup(int birthYear) { |
|
||||||
return maxBirthYear >= birthYear && minBirthYear <= birthYear; |
|
||||||
} |
|
||||||
|
|
||||||
public String getCompulsory() { |
|
||||||
return compulsory; |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,21 +0,0 @@ |
|||||||
package de.kreth.vaadin.clubhelper.vaadinclubhelper.data; |
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals; |
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test; |
|
||||||
|
|
||||||
public class CompetitionDetailsTest extends AbstractCompetitionDataTests { |
|
||||||
|
|
||||||
@Test |
|
||||||
public void parseGroupInsertsElementPerLine() throws Exception { |
|
||||||
|
|
||||||
CompetitionDetails detail = new CompetitionDetails(); |
|
||||||
detail.parseCompetitionGroups(getGroupTable1()); |
|
||||||
assertEquals(8, detail.getCpGroups().size()); |
|
||||||
|
|
||||||
detail = new CompetitionDetails(); |
|
||||||
detail.parseCompetitionGroups(getGroupTable2()); |
|
||||||
assertEquals(6, detail.getCpGroups().size()); |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,113 +0,0 @@ |
|||||||
package de.kreth.vaadin.clubhelper.vaadinclubhelper.data; |
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals; |
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse; |
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue; |
|
||||||
|
|
||||||
import java.util.regex.Matcher; |
|
||||||
import java.util.regex.Pattern; |
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test; |
|
||||||
|
|
||||||
public class CompetitionGroupTest { |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testTwo4DigitYears() { |
|
||||||
|
|
||||||
CompetitionGroup group = CompetitionGroup.parseLine("Schüler – innen E 2008 -2009 P4"); |
|
||||||
assertEquals(2009, group.getYoungestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Heranwachsende 2001-1995 P8"); |
|
||||||
assertEquals(1995, group.getOldestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Jugend C: Jg. 2004/2005 W11 - W13"); |
|
||||||
assertEquals(2005, group.getYoungestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Schüler – innen E 2008 -2009 P4"); |
|
||||||
assertEquals(2008, group.getOldestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Heranwachsende 2001-1995 P8"); |
|
||||||
assertEquals(2001, group.getYoungestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Jugend C: Jg. 2004/2005 W11 - W13"); |
|
||||||
assertEquals(2004, group.getOldestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testOneYearIsYoungest() { |
|
||||||
|
|
||||||
CompetitionGroup group = CompetitionGroup.parseLine("Erwachsene: Jg. 1996 und älter W15 - FIG A"); |
|
||||||
assertEquals(1996, group.getYoungestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testParseCompulsory() { |
|
||||||
|
|
||||||
CompetitionGroup group = CompetitionGroup.parseLine("Schüler – innen E 2008 -2009 P4"); |
|
||||||
assertEquals("P4", group.getCompulsory()); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Heranwachsende 2001-1995 P8"); |
|
||||||
assertEquals("P8", group.getCompulsory()); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Heranwachsende 2001-1995 P10"); |
|
||||||
assertEquals("P10", group.getCompulsory()); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Jugend C: Jg. 2004/2005 W11 - W13"); |
|
||||||
assertEquals("W13", group.getCompulsory()); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testOneYearIsOldest() { |
|
||||||
CompetitionGroup group = CompetitionGroup.parseLine("Schüler – innen F 2010 und jünger P3"); |
|
||||||
assertEquals(2010, group.getOldestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
|
|
||||||
group = CompetitionGroup.parseLine("Jugend E: 2008 und jünger P8 - W11"); |
|
||||||
assertEquals(2008, group.getOldestBirthYear()); |
|
||||||
assertValuesOrder(group); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testTestConstructor() { |
|
||||||
CompetitionGroup g = new CompetitionGroup(2008, 2009); |
|
||||||
assertValuesOrder(g); |
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testBirthYearTest() { |
|
||||||
CompetitionGroup g = new CompetitionGroup(2000, 2009); |
|
||||||
for (int i = 2000; i <= 2009; i++) { |
|
||||||
assertTrue(g.isBirthyearInGroup(i)); |
|
||||||
} |
|
||||||
assertFalse(g.isBirthyearInGroup(0)); |
|
||||||
assertFalse(g.isBirthyearInGroup(1999)); |
|
||||||
assertFalse(g.isBirthyearInGroup(2010)); |
|
||||||
assertFalse(g.isBirthyearInGroup(9999)); |
|
||||||
} |
|
||||||
|
|
||||||
CompetitionGroup assertValuesOrder(CompetitionGroup g) { |
|
||||||
assertTrue(g.getOldestBirthYear() <= g.getYoungestBirthYear()); |
|
||||||
return g; |
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testRegexPattern() { |
|
||||||
Pattern pattern = Pattern.compile("\\d{2,4}"); |
|
||||||
String twoYears = "text 1999 bis 2009 text"; |
|
||||||
Matcher matcher = pattern.matcher(twoYears); |
|
||||||
assertTrue(matcher.find(), "didnt find first year"); |
|
||||||
assertEquals("1999", matcher.group()); |
|
||||||
assertTrue(matcher.find(), "didnt find second year"); |
|
||||||
assertEquals("2009", matcher.group()); |
|
||||||
} |
|
||||||
} |
|
||||||
Loading…
Reference in new issue