reorganized menus

master
Markus Kreth 6 years ago
parent f9d156de36
commit a9fdd219c3
  1. 2
      .settings/org.eclipse.jdt.core.prefs
  2. 8
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java
  3. 22
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/GroupDef.java
  4. 3
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Person.java
  5. 4
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/commands/ClubCommand.java
  6. 56
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java
  7. 17
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/menu/LoggedOffState.java
  8. 42
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/menu/LoggedinMenuitemState.java
  9. 5
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonFilterTest.java
  10. 3
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGroupValidatorTest.java

@ -4,7 +4,9 @@ org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
org.eclipse.jdt.core.compiler.compliance=11
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=11

@ -9,6 +9,7 @@ import javax.persistence.TypedQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.transaction.annotation.Transactional;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.EntityAccessor;
@ -34,6 +35,8 @@ public abstract class AbstractDaoImpl<T extends EntityAccessor> implements IDao<
public void save(T obj) {
Date now = new Date();
obj.setChanged(now);
try {
if (entityManager.contains(obj) || obj.hasValidId()) {
entityManager.merge(obj);
}
@ -42,6 +45,11 @@ public abstract class AbstractDaoImpl<T extends EntityAccessor> implements IDao<
entityManager.persist(obj);
}
}
catch (DataAccessException e) {
entityManager.refresh(obj);
throw e;
}
}
@Override
public T get(Object primaryKey) {

@ -1,13 +1,10 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.data;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@ -25,13 +22,6 @@ public class GroupDef extends BaseEntity implements Serializable {
private String name;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "groups")
private List<Person> persongroups;
public void addPersongroup(Person persongroup) {
persongroups.add(persongroup);
}
public String getName() {
return name;
}
@ -40,18 +30,6 @@ public class GroupDef extends BaseEntity implements Serializable {
this.name = name;
}
public List<Person> getPersongroups() {
return persongroups;
}
public void setPersongroups(List<Person> persongroups) {
this.persongroups = persongroups;
}
public void removePersongroup(Person persongroup) {
getPersongroups().remove(persongroup);
}
@Override
public int hashCode() {
final int prime = 31;

@ -68,7 +68,7 @@ public class Person extends BaseEntity implements Serializable {
private List<Contact> contacts;
// bi-directional many-to-many association to Persongroup
@ManyToMany(fetch = FetchType.EAGER)
@ManyToMany(targetEntity = GroupDef.class, fetch = FetchType.EAGER)
@JoinTable(name = "persongroup", joinColumns = { @JoinColumn(name = "person_id") }, inverseJoinColumns = {
@JoinColumn(name = "group_id") })
private Set<GroupDef> groups;
@ -104,7 +104,6 @@ public class Person extends BaseEntity implements Serializable {
if (this.groups == null) {
this.groups = new HashSet<>();
}
group.addPersongroup(this);
this.groups.add(group);
}

@ -1,8 +1,10 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands;
import java.io.Serializable;
import com.vaadin.server.Resource;
public interface ClubCommand {
public interface ClubCommand extends Serializable {
String getLabel();

@ -1,7 +1,6 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import org.slf4j.Logger;
@ -9,11 +8,12 @@ import org.slf4j.LoggerFactory;
import org.vaadin.teemu.switchui.Switch;
import com.vaadin.data.Binder;
import com.vaadin.data.Binder.BindingBuilder;
import com.vaadin.data.BinderValidationStatus;
import com.vaadin.data.HasValue.ValueChangeEvent;
import com.vaadin.data.HasValue.ValueChangeListener;
import com.vaadin.data.ValidationResult;
import com.vaadin.data.ValueProvider;
import com.vaadin.server.Setter;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
@ -44,8 +44,6 @@ public class PersonEditDetails extends HorizontalLayout {
private final Binder<Person> binder;
private final Binder<Set<GroupDef>> binderGroups;
private Consumer<Person> personChangeHandler;
private Button okButton;
@ -130,7 +128,6 @@ public class PersonEditDetails extends HorizontalLayout {
VerticalLayout layout = new VerticalLayout(textPrename, textSureName, birthday, genderBox, textStartPass, close,
okButton);
binderGroups = new Binder<Set<GroupDef>>();
Component groupLayout = createGroupPanel(groups);
contactLayout = new ContactGrid();
contactLayout.setDeleteConsumer(c -> {
@ -178,6 +175,21 @@ public class PersonEditDetails extends HorizontalLayout {
iterator().forEachRemaining(comp -> comp.setEnabled(false));
}
static boolean containsGroup(Person p, GroupDef g) {
return p != null
&& p.getGroups() != null
&& p.getGroups().contains(g);
}
static void changeGroupContent(Person p, GroupDef g, boolean schouldBeContained) {
if (schouldBeContained) {
p.getGroups().add(g);
}
else {
p.getGroups().remove(g);
}
}
public Component createGroupPanel(List<GroupDef> groups) {
VerticalLayout layout = new VerticalLayout();
@ -186,17 +198,11 @@ public class PersonEditDetails extends HorizontalLayout {
Switch sw = new Switch(g.getName());
sw.setId("Group_" + g.getName());
sw.setData(g);
layout.addComponent(sw);
BindingBuilder<Set<GroupDef>, Boolean> forField = binderGroups.forField(sw);
forField.bind(p -> p.contains(g), (bean, fieldvalue) -> {
if (fieldvalue) {
bean.add(g);
}
else {
bean.remove(g);
}
});
ValueProvider<Person, Boolean> getter = p -> containsGroup(p, g);
Setter<Person, Boolean> setter = (p, b) -> changeGroupContent(p, g, b);
binder.forField(sw).bind(getter, setter);
layout.addComponent(sw);
}
binder.addValueChangeListener(new ValueChangeListener<Object>() {
@ -211,19 +217,6 @@ public class PersonEditDetails extends HorizontalLayout {
newGroups, binder.hasChanges());
}
});
binderGroups.addValueChangeListener(new ValueChangeListener<Object>() {
transient Logger log = LoggerFactory.getLogger(PersonEditDetails.this.getClass());
@Override
public void valueChange(ValueChangeEvent<Object> event) {
Component comp = event.getComponent();
Object oldGroups = event.getOldValue();
Object newGroups = event.getValue();
log.warn("Changed value in {}, old size={}, new size={}, hasChanges={}", comp.getId(), oldGroups,
newGroups, binderGroups.hasChanges());
}
});
return layout;
}
@ -234,12 +227,6 @@ public class PersonEditDetails extends HorizontalLayout {
public void setBean(Person person) {
closeWithoutSave();
binder.setBean(person);
if (person != null) {
binderGroups.setBean(person.getGroups());
}
else {
binderGroups.setBean(null);
}
contactLayout.setPerson(person);
relationshipLayout.setPerson(person);
adressLayout.setPerson(person);
@ -277,7 +264,6 @@ public class PersonEditDetails extends HorizontalLayout {
public boolean hasChanges() {
return binder.getBean() != null
&& (binder.hasChanges()
|| binderGroups.hasChanges()
|| contactLayout.hasChanges()
|| relationshipLayout.hasChanges()
|| adressLayout.hasChanges());

@ -51,20 +51,23 @@ class LoggedOffState implements MenuItemState {
}
MenuItem fileMenu = menuBar.getFileMenuItem();
fileMenu.setVisible(true);
LoginCommand loginCommand = new LoginCommand(navigator);
fileMenu.addItem(loginCommand.getLabel(), new CommandWrapper(loginCommand));
MenuItem editMenu = menuBar.getEditMenuItem();
editMenu.setVisible(true);
CommandWrapper exportCalendarMonthCommand = new CommandWrapper(
new ExportCalendarMonthCommand(startProvider, endProvider, dataProvider, printConsumer));
editMenu.addItem(exportCalendarMonthCommand.getLabel(), exportCalendarMonthCommand);
fileMenu.addItem(exportCalendarMonthCommand.getLabel(), exportCalendarMonthCommand);
ClubCommand exportCalendarYearCommand = new ExportCalendarYearCommand(startProvider, endProvider, dataProvider,
printConsumer);
editMenu.addItem(exportCalendarYearCommand.getLabel(), new CommandWrapper(exportCalendarYearCommand));
fileMenu.addItem(exportCalendarYearCommand.getLabel(), new CommandWrapper(exportCalendarYearCommand));
ClubCommand exportCsvCommand = new ExportCsvCommand(menuBar, context);
editMenu.addItem(exportCsvCommand.getLabel(), ev -> exportCsvCommand.execute());
fileMenu.addItem(exportCsvCommand.getLabel(), ev -> exportCsvCommand.execute());
fileMenu.addSeparator();
ClubCommand loginCommand = loginOutCommand();
fileMenu.addItem(loginCommand.getLabel(), new CommandWrapper(loginCommand));
}
protected ClubCommand loginOutCommand() {
return new LoginCommand(navigator);
}
}

@ -26,19 +26,15 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.security.SecurityVerifier;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands.ClubCommand;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands.CreateMeldungCommand;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands.DeleteEventCommand;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands.ExportCalendarMonthCommand;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands.ExportCalendarYearCommand;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands.ExportCsvCommand;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands.LogoutCommand;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.commands.SwitchViewCommand;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.ClubEventProvider;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.ConfirmDialog;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation.ClubhelperNavigation;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation.ClubhelperNavigation.ClubNavigator;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation.ClubhelperViews;
import net.sf.jasperreports.engine.JasperPrint;
class LoggedinMenuitemState implements MenuItemState {
class LoggedinMenuitemState extends LoggedOffState {
private ClubNavigator navigator2;
@ -48,14 +44,6 @@ class LoggedinMenuitemState implements MenuItemState {
private ApplicationContext context;
private ClubEventProvider dataProvider;
private Supplier<ZonedDateTime> startProvider;
private Supplier<ZonedDateTime> endProvider;
private BiConsumer<String, JasperPrint> printConsumer;
private MenuItem openPersonMenuItem;
private MenuItem calendarMenuItem;
@ -72,14 +60,10 @@ class LoggedinMenuitemState implements MenuItemState {
public LoggedinMenuitemState(ApplicationContext context, UI ui, Supplier<ZonedDateTime> startProvider,
Supplier<ZonedDateTime> endProvider, BiConsumer<String, JasperPrint> printConsumer) {
super();
super(context, startProvider, endProvider, printConsumer);
this.ui = ui;
this.context = context;
this.startProvider = startProvider;
this.endProvider = endProvider;
this.printConsumer = printConsumer;
this.navigator = context.getBean(ClubhelperNavigation.class);
this.dataProvider = context.getBean(ClubEventProvider.class);
this.eventBusiness = context.getBean(EventBusiness.class);
navigator.add(ev -> setSelectedMenuItem(ev.getNewView()));
@ -91,13 +75,7 @@ class LoggedinMenuitemState implements MenuItemState {
@Override
public void applyMenuStates(ClubhelperMenuBar menuBar) {
menuBar.getAllMainMenus().forEach(m -> m.setVisible(false));
MenuItem fileMenuItem = menuBar.getFileMenuItem();
fileMenuItem.setVisible(true);
CommandWrapper logout = new CommandWrapper(new LogoutCommand(navigator2, securityVerifier));
fileMenuItem.addItem(logout.getLabel(), logout);
super.applyMenuStates(menuBar);
prepareEditMenu(menuBar);
@ -110,6 +88,11 @@ class LoggedinMenuitemState implements MenuItemState {
setSelectedMenuItem(view);
}
@Override
protected ClubCommand loginOutCommand() {
return new LogoutCommand(navigator2, securityVerifier);
}
private void prepareViewMenu(ClubhelperMenuBar menuBar) {
MenuItem viewMenu = menuBar.getViewMenuItem();
viewMenu.setVisible(true);
@ -134,15 +117,6 @@ class LoggedinMenuitemState implements MenuItemState {
MenuItem editMenu = menuBar.getEditMenuItem();
editMenu.setVisible(true);
CommandWrapper exportCalendarMonthCommand = new CommandWrapper(
new ExportCalendarMonthCommand(startProvider, endProvider, dataProvider, printConsumer));
editMenu.addItem(exportCalendarMonthCommand.getLabel(), exportCalendarMonthCommand);
ClubCommand exportCalendarYearCommand = new ExportCalendarYearCommand(startProvider, endProvider, dataProvider,
printConsumer);
editMenu.addItem(exportCalendarYearCommand.getLabel(), new CommandWrapper(exportCalendarYearCommand));
ClubCommand exportCsvCommand = new ExportCsvCommand(menuBar, context);
editMenu.addItem(exportCsvCommand.getLabel(), ev -> exportCsvCommand.execute());
CreateMeldungCommand createMeldungCommand = new CreateMeldungCommand(context, this::show);
createMeldungMenuItem = editMenu.addItem(createMeldungCommand.getLabel(),
new CommandWrapper(createMeldungCommand));

@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
@ -52,22 +51,18 @@ class PersonFilterTest {
GroupDef adminGroup = new GroupDef();
adminGroup.setId(1);
adminGroup.setName("ADMIN");
adminGroup.setPersongroups(new ArrayList<>());
GroupDef competitorGroup = new GroupDef();
competitorGroup.setName("Wettkämpfer");
competitorGroup.setId(2);
competitorGroup.setPersongroups(new ArrayList<>());
GroupDef participantGroup = new GroupDef();
participantGroup.setName("ACTIVE");
participantGroup.setId(3);
participantGroup.setPersongroups(new ArrayList<>());
GroupDef judgesGroup = new GroupDef();
judgesGroup.setName("Kampfrichter");
judgesGroup.setId(4);
judgesGroup.setPersongroups(new ArrayList<>());
return Collections.unmodifiableList(Arrays.asList(adminGroup, competitorGroup, participantGroup, judgesGroup));

@ -3,8 +3,6 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import java.util.ArrayList;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@ -34,7 +32,6 @@ class PersonGroupValidatorTest {
@Test
void testOk() {
GroupDef group = new GroupDef();
group.setPersongroups(new ArrayList<>());
person.add(group);
ValidationResult result = validator.apply(person, null);
assertFalse(result.isError());

Loading…
Cancel
Save