Browse Source

Adding default value for Level getters in casting styles, this will avoid NPEs.

Sam Jaffe 8 years ago
parent
commit
d2fdeb13fa

+ 11 - 6
src/org/leumasjaffe/charsheet/model/magic/impl/Inspired.java

@@ -1,6 +1,7 @@
 package org.leumasjaffe.charsheet.model.magic.impl;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -37,29 +38,33 @@ public class Inspired implements DDSpellbook {
 
 	@Override
 	public int numSpellsPerDayAtLevel( int level ) {
-		return spellInfo.get( level ).spellsPerDay;
+		return get(level).spellsPerDay;
 	}
 
 	@Override
 	public Collection<DDSpell> spellsKnownAtLevel(int level) {
-		return classRef.ref.getSpellList( level );
+		return Collections.unmodifiableCollection(classRef.ref.getSpellList( level ));
 	}
 	
 	@Override
 	public int numSpellsKnownAtLevel( int level ) {
-		return -1;
+		return numSpellsPerDayAtLevel(level) != 0 ? -1 : 0;
 	}
 
 	@Override
 	public List<DDSpell> spellsPreparedAtLevel(int level) {
-		return spellInfo.get( level ).spellsPrepared;
+		return Collections.unmodifiableList(get(level).spellsPrepared);
 	}
 
 	@Override
 	public void castSpell(int level, DDSpell spell) {
-		if ( ! spellInfo.get( level ).spellsPrepared.remove( spell ) ) {
+		if ( ! get(level).spellsPrepared.remove( spell ) ) {
 			throw new IllegalStateException("Attempting to cast an unprepared spell");
 		}
-		--spellInfo.get( level ).spellsPerDay;
+		--get(level).spellsPerDay;
+	}
+	
+	private Level get(int level) {
+		return spellInfo.getOrDefault(level, new Level(Collections.emptyList(), 0));
 	}
 }

+ 11 - 5
src/org/leumasjaffe/charsheet/model/magic/impl/Researched.java

@@ -1,6 +1,7 @@
 package org.leumasjaffe.charsheet.model.magic.impl;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -28,24 +29,29 @@ public class Researched implements DDSpellbook {
 
 	@Override
 	public int numSpellsPerDayAtLevel( int level ) {
-		return spellInfo.get( level ).spellsPerDay;
+		return get(level).spellsPerDay;
 	}
 
 	@Override
 	public Collection<DDSpell> spellsKnownAtLevel(int level) {
-		return spellInfo.get( level ).spellsKnown;
+		return Collections.unmodifiableCollection(get(level).spellsKnown);
 	}
 
 	@Override
 	public List<DDSpell> spellsPreparedAtLevel(int level) {
-		return spellInfo.get( level ).spellsPrepared;
+		return Collections.unmodifiableList(get(level).spellsPrepared);
 	}
 
 	@Override
 	public void castSpell(int level, DDSpell spell) {
-		if ( ! spellInfo.get( level ).spellsPrepared.remove( spell ) ) {
+		if ( ! get(level).spellsPrepared.remove( spell ) ) {
 			throw new IllegalStateException("Attempting to cast an unprepared spell");
 		}
-		--spellInfo.get( level ).spellsPerDay;
+		--get(level).spellsPerDay;
+	}
+	
+
+	private Level get(int level) {
+		return spellInfo.getOrDefault(level, new Level(Collections.emptySet(), Collections.emptyList(), 0));
 	}
 }

+ 12 - 7
src/org/leumasjaffe/charsheet/model/magic/impl/Spontaneous.java

@@ -1,6 +1,7 @@
 package org.leumasjaffe.charsheet.model.magic.impl;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -26,23 +27,23 @@ public class Spontaneous implements DDSpellbook {
 	@NonNull Map<Integer, Spontaneous.Level> spellInfo;
 	
 	@Override
-	public int numSpellsPerDayAtLevel( int level ) {
-		return spellInfo.get( level ).spellsPerDay;
+	public int numSpellsPerDayAtLevel(int level) {
+		return get(level).spellsPerDay;
 	}
 	
 	@Override
-	public int numSpellsPerDayRemainingAtLevel( int level ) {
-		return spellInfo.get( level ).spellsPerDayRemaining;
+	public int numSpellsPerDayRemainingAtLevel(int level) {
+		return get(level).spellsPerDayRemaining;
 	}
 
 	@Override
 	public Collection<DDSpell> spellsKnownAtLevel(int level) {
-		return spellsPreparedAtLevel( level );
+		return spellsPreparedAtLevel(level);
 	}
 
 	@Override
 	public List<DDSpell> spellsPreparedAtLevel(int level) {
-		return spellInfo.get( level ).spellsKnown;
+		return Collections.unmodifiableList(get(level).spellsKnown);
 	}
 
 	@Override
@@ -50,6 +51,10 @@ public class Spontaneous implements DDSpellbook {
 		if (numSpellsPerDayRemainingAtLevel(level) == 0) {
 			throw new IllegalStateException("Attempting to cast a spell while out of slots");
 		}
-		--spellInfo.get( level ).spellsPerDayRemaining;
+		--get(level).spellsPerDayRemaining;
+	}
+
+	private Level get(int level) {
+		return spellInfo.getOrDefault(level, new Level(Collections.emptyList(), 0, 0));
 	}
 }