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; 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.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
public class EventMeldung { public class EventMeldung {
private final ClubEvent event; private final ClubEvent event;
private final Map<Altersgruppe, List<Person>> groups; private final AltersgruppePersonMap groups;
public EventMeldung(ClubEvent event) { public EventMeldung(ClubEvent event) {
super(); super();
this.event = event; this.event = event;
groups = new HashMap<>(); groups = AltersgruppePersonMap.parse(event);
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);
} }
public String getCaption() { public String getCaption() {
return event.getCaption(); return event.getCaption();
} }
public Map<Altersgruppe, List<Person>> getGroups() { public AltersgruppePersonMap getGroups() {
return Collections.unmodifiableMap(groups); return groups;
} }
@Override @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; 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.Altersgruppe;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; 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 @Override
public CharSequence printMeldung(ClubEvent event, Map<Altersgruppe, List<Person>> groups) { public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) {
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)) {
txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t") txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t")
.append(p.getBirth().getYear()).append("\t").append(g.getPflicht().getName()); .append(p.getBirth().getYear()).append("\t");
}
}
return txt;
} }
} }

@ -1,14 +1,9 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.business.meldung; 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.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
public interface MeldungGenerator { 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) { public static MeldungGenerator forType(CompetitionType.Type type) {
switch (type) { switch (type) {
case DOPPELMINI: case DOPPELMINI:
// break; return new MeldungDmtWettkampfGenerator();
case LIGA: case LIGA:
// break; // break;
case MANNSCHAFT: case MANNSCHAFT:

@ -25,4 +25,17 @@ public enum Gender {
} }
throw new IllegalArgumentException("No Gender for id=" + id + " defined."); 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; package de.kreth.vaadin.clubhelper.vaadinclubhelper.business;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
@ -11,19 +12,20 @@ import java.time.ZonedDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; 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.business.meldung.EventMeldung;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.AltersgruppeDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.AltersgruppeDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.ClubEventDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.ClubEventDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Altersgruppe;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEventBuilder; 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.Gender;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.tests.TestAltersgruppen; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.tests.TestAltersgruppen;
@ -55,6 +57,8 @@ class EventBusinessTest {
.withCaption("caption").withDescription("description").withOrganizerDisplayName("organizerDisplayName") .withCaption("caption").withDescription("description").withOrganizerDisplayName("organizerDisplayName")
.withStart(startDate).withEnd(startDate).withAllDay(true).build(); .withStart(startDate).withEnd(startDate).withAllDay(true).build();
ev.setType(Type.EINZEL);
List<Altersgruppe> altersgruppen = TestAltersgruppen.getAltersgruppen(); List<Altersgruppe> altersgruppen = TestAltersgruppen.getAltersgruppen();
List<Person> personen = TestPersonGenerator.generatePersonen(10); List<Person> personen = TestPersonGenerator.generatePersonen(10);
int count = 1; int count = 1;
@ -72,7 +76,8 @@ class EventBusinessTest {
eventBusiness.setSelected(ev); eventBusiness.setSelected(ev);
EventMeldung meldung = eventBusiness.createMeldung(); EventMeldung meldung = eventBusiness.createMeldung();
assertNotNull(meldung); assertNotNull(meldung);
Map<Altersgruppe, List<Person>> groups = meldung.getGroups(); AltersgruppePersonMap groups = meldung.getGroups();
assertEquals(5, groups.altersgruppen().size());
} }

Loading…
Cancel
Save