From ee74411009ba6632ffd4222d2df9e6182d916f4c Mon Sep 17 00:00:00 2001 From: Markus Kreth Date: Tue, 22 Jan 2019 23:52:53 +0100 Subject: [PATCH] Meldung with gender, DMT Meldung Generator. --- .../meldung/AbstractMeldungGenerator.java | 41 +++++++++++++ .../meldung/AltersgruppePersonMap.java | 58 +++++++++++++++++++ .../business/meldung/EventMeldung.java | 32 ++-------- .../meldung/MeldungDmtWettkampfGenerator.java | 14 +++++ .../MeldungEinzelWettkampfGenerator.java | 32 ++-------- .../business/meldung/MeldungGenerator.java | 7 +-- .../meldung/MeldungGeneratorFactory.java | 2 +- .../vaadinclubhelper/data/Gender.java | 13 +++++ .../business/EventBusinessTest.java | 9 ++- 9 files changed, 144 insertions(+), 64 deletions(-) create mode 100644 src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AbstractMeldungGenerator.java create mode 100644 src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AltersgruppePersonMap.java create mode 100644 src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AbstractMeldungGenerator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AbstractMeldungGenerator.java new file mode 100644 index 0000000..042c265 --- /dev/null +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AbstractMeldungGenerator.java @@ -0,0 +1,41 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Gender; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; + +public abstract class AbstractMeldungGenerator implements MeldungGenerator { + + public AbstractMeldungGenerator() { + super(); + } + + public abstract void personRepresentation(StringBuilder txt, Altersgruppe g, Person p); + + @Override + public CharSequence printMeldung(ClubEvent event, AltersgruppePersonMap groups) { + StringBuilder txt = new StringBuilder(); + txt.append("\n\n für den Wettkampf "); + txt.append(event.getCaption()).append(" am ").append(event.getStart().toLocalDate().toString()) + .append(" melden wir für den MTV Groß-Buchholz folgende Starter:"); + List groupList = new ArrayList<>(groups.altersgruppen()); + groupList.sort((o1, o2) -> Integer.compare(o2.getStart(), o1.getStart())); + for (Altersgruppe g : groupList) { + txt.append("\n\n").append(g.getBezeichnung()); + Map> list = groups.getGenderMapFor(g); + for (Gender sex : list.keySet()) { + txt.append("\n\t").append(sex.localized()); + for (Person p : list.get(sex)) { + personRepresentation(txt, g, p); + } + } + } + return txt; + } + +} \ No newline at end of file diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AltersgruppePersonMap.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AltersgruppePersonMap.java new file mode 100644 index 0000000..28d5b5d --- /dev/null +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AltersgruppePersonMap.java @@ -0,0 +1,58 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Gender; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; + +public class AltersgruppePersonMap { + + private final Map>> groups; + + private AltersgruppePersonMap(ClubEvent event) { + this.groups = new HashMap<>(); + for (Person p : event.getPersons()) { + group(event, p); + } + } + + public static AltersgruppePersonMap parse(ClubEvent event) { + return new AltersgruppePersonMap(event); + } + + private void group(ClubEvent event, Person p) { + for (Altersgruppe g : event.getAltersgruppen()) { + if (g.isBetween(p.getBirth())) { + if (!groups.containsKey(g)) { + groups.put(g, new HashMap<>()); + } + Map> map = groups.get(g); + if (!map.containsKey(p.getGender())) { + map.put(p.getGender(), new ArrayList<>()); + } + map.get(p.getGender()).add(p); + return; + } + } + throw new IllegalStateException("No Group found for " + p); + } + + public Collection altersgruppen() { + return groups.keySet(); + } + + public Map> getGenderMapFor(Altersgruppe g) { + return groups.get(g); + } + + @Override + public String toString() { + return groups.toString(); + } +} diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/EventMeldung.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/EventMeldung.java index df2a1af..01851cc 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/EventMeldung.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/EventMeldung.java @@ -1,48 +1,24 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; -import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; public class EventMeldung { private final ClubEvent event; - private final Map> groups; + private final AltersgruppePersonMap groups; public EventMeldung(ClubEvent event) { super(); this.event = event; - groups = new HashMap<>(); - for (Person p : event.getPersons()) { - group(p); - } - } - - private void group(Person p) { - for (Altersgruppe g : event.getAltersgruppen()) { - if (g.isBetween(p.getBirth())) { - if (!groups.containsKey(g)) { - groups.put(g, new ArrayList<>()); - } - groups.get(g).add(p); - return; - } - } - throw new IllegalStateException("No Group found for " + p); + groups = AltersgruppePersonMap.parse(event); } public String getCaption() { return event.getCaption(); } - public Map> getGroups() { - return Collections.unmodifiableMap(groups); + public AltersgruppePersonMap getGroups() { + return groups; } @Override diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java new file mode 100644 index 0000000..e4fe5cb --- /dev/null +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java @@ -0,0 +1,14 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung; + +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; + +class MeldungDmtWettkampfGenerator extends AbstractMeldungGenerator { + + @Override + public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) { + txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t") + .append(p.getBirth().getYear()).append("\t").append(g.getPflicht().getName()); + } + +} diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java index 1b1798e..b12d84d 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java @@ -1,36 +1,14 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe; -import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; -class MeldungEinzelWettkampfGenerator implements MeldungGenerator { +class MeldungEinzelWettkampfGenerator extends AbstractMeldungGenerator { - /* - * (non-Javadoc) - * - * @see de.kreth.vaadin.clubhelper.vaadinclubhelper.business.MeldungGenerator# - * printMeldung() - */ @Override - public CharSequence printMeldung(ClubEvent event, Map> groups) { - StringBuilder txt = new StringBuilder(); - txt.append("\n\n für den Wettkampf "); - txt.append(event.getCaption()).append(" am ").append(event.getStart().toLocalDate().toString()) - .append(" melden wir für den MTV Groß-Buchholz folgende Starter:"); - List groupList = new ArrayList<>(groups.keySet()); - groupList.sort((o1, o2) -> Integer.compare(o2.getStart(), o1.getStart())); - for (Altersgruppe g : groupList) { - txt.append("\n\n").append(g.getBezeichnung()); - for (Person p : groups.get(g)) { - txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t") - .append(p.getBirth().getYear()).append("\t").append(g.getPflicht().getName()); - } - } - return txt; + public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) { + txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t") + .append(p.getBirth().getYear()).append("\t"); } + } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGenerator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGenerator.java index 2857031..6701685 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGenerator.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGenerator.java @@ -1,14 +1,9 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung; -import java.util.List; -import java.util.Map; - -import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; -import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; public interface MeldungGenerator { - CharSequence printMeldung(ClubEvent event, Map> groups); + CharSequence printMeldung(ClubEvent event, AltersgruppePersonMap groups); } \ No newline at end of file diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGeneratorFactory.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGeneratorFactory.java index f82c81d..e66b49b 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGeneratorFactory.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGeneratorFactory.java @@ -7,7 +7,7 @@ public class MeldungGeneratorFactory { public static MeldungGenerator forType(CompetitionType.Type type) { switch (type) { case DOPPELMINI: -// break; + return new MeldungDmtWettkampfGenerator(); case LIGA: // break; case MANNSCHAFT: diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Gender.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Gender.java index 05f7148..6337561 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Gender.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Gender.java @@ -25,4 +25,17 @@ public enum Gender { } throw new IllegalArgumentException("No Gender for id=" + id + " defined."); } + + public String localized() { + switch (this) { + case FEMALE: + return "Weiblich"; + case MALE: + return "Männlich"; + default: + break; + + } + throw new IllegalStateException("No localized String for " + this); + } } diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessTest.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessTest.java index b64a69c..c269520 100644 --- a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessTest.java +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessTest.java @@ -1,5 +1,6 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.business; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -11,19 +12,20 @@ import java.time.ZonedDateTime; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung.AltersgruppePersonMap; import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung.EventMeldung; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.AltersgruppeDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.ClubEventDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEventBuilder; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.CompetitionType.Type; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Gender; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.tests.TestAltersgruppen; @@ -55,6 +57,8 @@ class EventBusinessTest { .withCaption("caption").withDescription("description").withOrganizerDisplayName("organizerDisplayName") .withStart(startDate).withEnd(startDate).withAllDay(true).build(); + ev.setType(Type.EINZEL); + List altersgruppen = TestAltersgruppen.getAltersgruppen(); List personen = TestPersonGenerator.generatePersonen(10); int count = 1; @@ -72,7 +76,8 @@ class EventBusinessTest { eventBusiness.setSelected(ev); EventMeldung meldung = eventBusiness.createMeldung(); assertNotNull(meldung); - Map> groups = meldung.getGroups(); + AltersgruppePersonMap groups = meldung.getGroups(); + assertEquals(5, groups.altersgruppen().size()); }