package org.leumasjaffe.charsheet.model; import java.io.File; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import org.leumasjaffe.charsheet.model.features.DDFeature; import org.leumasjaffe.charsheet.model.magic.DDSpell; import org.leumasjaffe.charsheet.model.magic.DDSpellList; import org.leumasjaffe.charsheet.model.magic.DDSpellList.SpellList; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import lombok.AccessLevel; import lombok.Data; import lombok.Getter; import lombok.NonNull; import lombok.SneakyThrows; import lombok.experimental.FieldDefaults; @Data @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true) @JsonIgnoreProperties(ignoreUnknown=true) public class DDClass { @NonNull String name; int skillPoints; @NonNull AttackQuality bab; @NonNull SaveQuality fort; @NonNull SaveQuality ref; @NonNull SaveQuality will; @Getter(AccessLevel.NONE) @NonNull List> features; @NonNull Set skills; @NonNull Optional spells; static Map store = new HashMap<>(); @SneakyThrows public static DDClass getFromResource(final String name) { if (!store.containsKey(name)) { final ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Jdk8Module()); store.put(name, mapper.readValue(new File("resources/classes/" + name + ".json"), DDClass.class)); } return store.get(name); } public Collection getSpellList( int level ) { List list = spells.get().getSpellList(); return list.size() <= level ? Collections.emptySet() : list.get( level ).getSpellList(); } public boolean isClassSkill(final String skillName) { if (skillName.contains("(")) { return skills.contains(skillName) || skills.contains(skillName.replaceFirst("\\(.*\\)", "(*)")); } return skills.contains(skillName); } }