Explorar el Código

Add an isWildcard property to DDSkill.
Get rid of stupid Optional in DDSkillPrototype
Create a skill if one that does not exist is requested.

Sam Jaffe hace 8 años
padre
commit
9560ee7df3

+ 4 - 0
src/main/lombok/org/leumasjaffe/charsheet/model/skill/DDSkill.java

@@ -23,6 +23,10 @@ public class DDSkill extends Observable.Instance {
 	// Unless you gain it as a class skill later, in which case it might be in-between
 	@Setter(value=AccessLevel.PRIVATE) int pointsSpent = 0;
 	
+	public DDSkill(String name) {
+		this(new DDSkillPrototype(name));
+	}
+	
 	public DDSkill(DDSkillPrototype proto) {
 		this.name = proto;
 	}

+ 15 - 9
src/main/lombok/org/leumasjaffe/charsheet/model/skill/DDSkillPrototype.java

@@ -6,7 +6,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -20,10 +19,11 @@ import lombok.experimental.FieldDefaults;
 
 @AllArgsConstructor @Data
 @FieldDefaults(level=AccessLevel.PRIVATE)
-public class DDSkillPrototype {
+class DDSkillPrototype {
 	final String name;
 	final boolean requiresTraining;
 	String ability = "";
+	boolean fromWildcardSkill = false;
 	
 	private static final Map<String, DDSkillPrototype> prototypes;
 	
@@ -42,20 +42,26 @@ public class DDSkillPrototype {
 	}
 	
 	public DDSkillPrototype(String name) {
-		DDSkillPrototype base = getPrototype(name).get();
+		DDSkillPrototype base = getPrototype(name);
 		this.name = name;
 		this.requiresTraining = base.requiresTraining;
 		this.ability = base.ability;
+		this.fromWildcardSkill = base.fromWildcardSkill;
 	}
 	
-	public static Optional<DDSkillPrototype> getPrototype(String name) {
+	public boolean isWildcardSkill() {
+		return name.contains("(*)");
+	}
+	
+	public static DDSkillPrototype getPrototype(String name) {
 		if (name.contains("(")) {
 			DDSkillPrototype proto = prototypes.get(name.replaceFirst("\\(.*\\)", "(*)"));
-			if ( proto == null ) return Optional.empty();
-			return Optional.of(new DDSkillPrototype(name, proto.requiresTraining, proto.ability));
-		} else {
-			return Optional.ofNullable(prototypes.get(name));
+			if (proto != null) { return new DDSkillPrototype(name, proto.requiresTraining, proto.ability, true); }
+		} 
+		if (prototypes.containsKey(name)) {
+			return prototypes.get(name);
 		}
+		throw new IllegalStateException("Unknown skill '" + name + "'");
 	}
 	
 	public static Stream<DDSkillPrototype> all() {
@@ -64,5 +70,5 @@ public class DDSkillPrototype {
 
 	public static Stream<DDSkillPrototype> untrained() {
 		return prototypes.values().stream().filter(p -> !p.requiresTraining && !p.getName().contains("(*)"));
-	}
+	}	
 }

+ 3 - 4
src/main/lombok/org/leumasjaffe/charsheet/model/skill/DDSkills.java

@@ -3,7 +3,6 @@ package org.leumasjaffe.charsheet.model.skill;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
-import java.util.Optional;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
 
@@ -34,8 +33,8 @@ public class DDSkills extends Observable.Instance {
 		return Collections.unmodifiableCollection(skills.values());
 	}
 
-	public Optional<DDSkill> getSkill(String name) {
-		// TODO: Put if absent?
-		return Optional.ofNullable(skills.get(name));
+	public DDSkill getSkill(String name) {
+		skills.computeIfAbsent(name, DDSkill::new);
+		return skills.get(name);
 	}
 }