ReplaceChildrenController.java 1011 B

1234567891011121314151617181920212223242526272829303132
  1. package org.leumasjaffe.recipe.controller;
  2. import java.awt.Component;
  3. import java.awt.Container;
  4. import java.util.Collection;
  5. import java.util.function.BiConsumer;
  6. import java.util.function.Function;
  7. import lombok.AccessLevel;
  8. import lombok.RequiredArgsConstructor;
  9. import lombok.experimental.FieldDefaults;
  10. @RequiredArgsConstructor
  11. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  12. public class ReplaceChildrenController<T, V> implements BiConsumer<Container, T> {
  13. Function<T, ? extends Collection<V>> getChildren;
  14. Function<? super V, ? extends Component> makeView;
  15. @Override
  16. public void accept(final Container parent, final T model) {
  17. final Collection<V> children = getChildren.apply(model);
  18. if (parent.getComponents().length == children.size()) {
  19. return;
  20. }
  21. // Make sure that our components disappear correctly
  22. for (final Component comp : parent.getComponents()) {
  23. comp.setVisible(false);
  24. }
  25. parent.removeAll();
  26. children.stream().map(makeView).forEach(parent::add);
  27. }
  28. }