DDProperty.java 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package org.leumasjaffe.charsheet.model.features;
  2. import com.fasterxml.jackson.annotation.JsonSubTypes;
  3. import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
  4. import com.fasterxml.jackson.annotation.JsonTypeInfo;
  5. import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
  6. import lombok.AllArgsConstructor;
  7. @JsonTypeInfo(use=Id.NAME)
  8. @JsonSubTypes({
  9. @Type(name="Simple", value=DDProperty.Simple.class),
  10. @Type(name="Flat", value=DDProperty.Flat.class),
  11. @Type(name="SpellLevel", value=DDProperty.PerSpellLevel.class)
  12. })
  13. public interface DDProperty {
  14. public enum Group {
  15. NONE
  16. }
  17. boolean appliesTo(String key);
  18. <T> T value();
  19. @AllArgsConstructor
  20. public class Simple implements DDProperty {
  21. String name;
  22. @Override public boolean appliesTo(String key) { return false; }
  23. @Override public <T> T value() { return null; }
  24. }
  25. @AllArgsConstructor
  26. public static class Flat implements DDProperty {
  27. String applies;
  28. Group group;
  29. int value;
  30. @Override
  31. public boolean appliesTo(String key) {
  32. return applies.equals(key);
  33. }
  34. @SuppressWarnings("unchecked")
  35. @Override
  36. public Object value() {
  37. return this.value;
  38. }
  39. }
  40. @AllArgsConstructor
  41. public static class PerSpellLevel implements DDProperty {
  42. String applies;
  43. Group group;
  44. int value;
  45. @Override
  46. public boolean appliesTo(String key) {
  47. return applies.equals(key);
  48. }
  49. @SuppressWarnings("unchecked")
  50. @Override
  51. public Object value() {
  52. return this.value; // TODO consume spell level information
  53. }
  54. }
  55. }