| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package org.leumasjaffe.charsheet.model.features;
- import java.util.Collections;
- import java.util.List;
- import org.leumasjaffe.charsheet.model.DDCharacterClass;
- import com.fasterxml.jackson.annotation.JsonTypeInfo;
- import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
- import lombok.AccessLevel;
- import lombok.RequiredArgsConstructor;
- import lombok.experimental.FieldDefaults;
- import lombok.experimental.NonFinal;
- @JsonTypeInfo(use=Id.MINIMAL_CLASS)
- public interface DDPropertyChooser {
- default int getTimes() { return 1; }
- String getHeader();
- default List<String> getChoices() { return Collections.emptyList(); }
- public DDProperty get(int selectedIndex);
- default boolean applySideEffects(DDCharacterClass to, int selectedIndex) {
- to.addFeature(get(selectedIndex));
- return true;
- }
- default void undoSideEffects(DDCharacterClass to, int selectedIndex) {
- to.removeFeature(get(selectedIndex));
- }
-
- @RequiredArgsConstructor
- @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
- public static class State {
- DDCharacterClass ddCharacter;
- DDPropertyChooser chooser;
- @NonFinal boolean hasApplied = false;
- @NonFinal int previousIndex = -1;
-
- public void apply(int selectedIndex) {
- if (hasApplied) { chooser.undoSideEffects(ddCharacter, previousIndex); }
- hasApplied = chooser.applySideEffects(ddCharacter, previousIndex = selectedIndex);
- }
- }
- }
|