| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package org.leumasjaffe.charsheet.model.features;
- import com.fasterxml.jackson.annotation.JsonSubTypes;
- import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
- import com.fasterxml.jackson.annotation.JsonTypeInfo;
- import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
- import lombok.AllArgsConstructor;
- @JsonTypeInfo(use=Id.NAME)
- @JsonSubTypes({
- @Type(name="Simple", value=DDProperty.Simple.class),
- @Type(name="Flat", value=DDProperty.Flat.class),
- @Type(name="SpellLevel", value=DDProperty.PerSpellLevel.class)
- })
- public interface DDProperty {
- public enum Group {
- NONE
- }
- boolean appliesTo(String key);
- <T> T value();
-
- @AllArgsConstructor
- public class Simple implements DDProperty {
- String name;
- @Override public boolean appliesTo(String key) { return false; }
- @Override public <T> T value() { return null; }
- }
- @AllArgsConstructor
- public static class Flat implements DDProperty {
- String applies;
- Group group;
- int value;
-
- @Override
- public boolean appliesTo(String key) {
- return applies.equals(key);
- }
- @SuppressWarnings("unchecked")
- @Override
- public Object value() {
- return this.value;
- }
- }
-
- @AllArgsConstructor
- public static class PerSpellLevel implements DDProperty {
- String applies;
- Group group;
- int value;
-
- @Override
- public boolean appliesTo(String key) {
- return applies.equals(key);
- }
- @SuppressWarnings("unchecked")
- @Override
- public Object value() {
- return this.value; // TODO consume spell level information
- }
- }
- }
|