Meldung with gender, DMT Meldung Generator.

master
Markus Kreth 7 years ago
parent d6a4d4d857
commit ee74411009
  1. 41
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AbstractMeldungGenerator.java
  2. 58
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/AltersgruppePersonMap.java
  3. 32
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/EventMeldung.java
  4. 14
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java
  5. 30
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java
  6. 7
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGenerator.java
  7. 2
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungGeneratorFactory.java
  8. 13
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Gender.java
  9. 9
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessTest.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<Altersgruppe> 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<Gender, List<Person>> 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;
}
}

@ -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<Altersgruppe, Map<Gender, List<Person>>> 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<Gender, List<Person>> 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<Altersgruppe> altersgruppen() {
return groups.keySet();
}
public Map<Gender, List<Person>> getGenderMapFor(Altersgruppe g) {
return groups.get(g);
}
@Override
public String toString() {
return groups.toString();
}
}

@ -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<Altersgruppe, List<Person>> 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<Altersgruppe, List<Person>> getGroups() {
return Collections.unmodifiableMap(groups);
public AltersgruppePersonMap getGroups() {
return groups;
}
@Override

@ -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());
}
}

@ -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<Altersgruppe, List<Person>> 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<Altersgruppe> 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)) {
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());
}
}
return txt;
.append(p.getBirth().getYear()).append("\t");
}
}

@ -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<Altersgruppe, List<Person>> groups);
CharSequence printMeldung(ClubEvent event, AltersgruppePersonMap groups);
}

@ -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:

@ -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);
}
}

@ -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<Altersgruppe> altersgruppen = TestAltersgruppen.getAltersgruppen();
List<Person> personen = TestPersonGenerator.generatePersonen(10);
int count = 1;
@ -72,7 +76,8 @@ class EventBusinessTest {
eventBusiness.setSelected(ev);
EventMeldung meldung = eventBusiness.createMeldung();
assertNotNull(meldung);
Map<Altersgruppe, List<Person>> groups = meldung.getGroups();
AltersgruppePersonMap groups = meldung.getGroups();
assertEquals(5, groups.altersgruppen().size());
}

Loading…
Cancel
Save