From: <nu...@us...> - 2006-09-12 00:19:04
|
Revision: 1382 http://svn.sourceforge.net/pcgen/?rev=1382&view=rev Author: nuance Date: 2006-09-11 17:18:26 -0700 (Mon, 11 Sep 2006) Log Message: ----------- [ 1556728 ] Ability Object: Convert current feat Pool Convert all the places that add to a characters available feats to logic that uses BONUS statements. Note these are currently hard coded from the various tags that give us info about how many feats to give a character. This could all go into data, but that will break backward compatability. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/Race.java Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java Trunk/pcgen/code/src/java/plugin/bonustokens/Feat.java Trunk/pcgen/code/src/java/plugin/lsttokens/race/StartfeatsToken.java Trunk/pcgen/code/src/test/pcgen/AbstractCharacterTestCase.java Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java Trunk/pcgen/code/src/test/pcgen/io/exporttoken/SpellMemTokenTest.java Trunk/pcgen/code/src/test/pcgen/util/TestHelper.java Trunk/pcgen/code/src/test/plugin/exporttokens/SpellListTokenTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -2837,6 +2837,10 @@ return null; } + + static String getBonusFeatString() { + return SettingsHandler.getGame().getBonusFeatLevels().get(0); + } static int getBonusFeatsForLevel(final int level) { Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -30,6 +30,8 @@ import java.util.List; import java.util.Map; import java.util.StringTokenizer; + +import pcgen.core.bonus.Bonus; import pcgen.core.bonus.BonusObj; import pcgen.core.character.CharacterSpell; import pcgen.core.levelability.LevelAbility; @@ -2072,6 +2074,71 @@ } if (level == 1) { + if (level > curLevel) { + try + { + PreParserFactory factory = PreParserFactory.getInstance(); + + StringBuffer formula; + final String aString = Globals.getBonusFeatString(); + final StringTokenizer aTok = new StringTokenizer(aString, "|", false); + final int startLevel = Integer.parseInt(aTok.nextToken()); + final int rangeLevel = Integer.parseInt(aTok.nextToken()); + int divisor = 1; + + + if (aPC.getRace().getMonsterClass(aPC,false) != null && + aPC.getRace().getMonsterClass(aPC,false).equalsIgnoreCase(this.getKeyName())) + { + int monLev = aPC.getRace().getMonsterClassLevels(aPC, false); + + int MLevPerFeat = this.getLevelsPerFeat().intValue(); + divisor = (MLevPerFeat >= 1) ? MLevPerFeat : rangeLevel; + formula = new StringBuffer("max(0,floor((CL-"); + formula.append(monLev); + formula.append(")/"); + formula.append(divisor); + formula.append("))"); + + StringBuffer aBuf = new StringBuffer("0|FEAT|MONSTERPOOL|"); + aBuf.append(formula); + BonusObj bon = Bonus.newBonus(aBuf.toString()); + bon.setCreatorObject(this); + Prerequisite prereq = factory.parse("PREDEFAULTMONSTER:Y"); + bon.addPreReq(prereq); + addBonusList(bon); + + } + else + { + divisor = rangeLevel; + formula = new StringBuffer("CL/"); + formula.append(divisor); + + StringBuffer aBuf = new StringBuffer("0|FEAT|MONSTERPOOL|"); + aBuf.append(formula); + BonusObj bon = Bonus.newBonus(aBuf.toString()); + bon.setCreatorObject(this); + Prerequisite prereq = factory.parse("PREDEFAULTMONSTER:Y"); + bon.addPreReq(prereq); + addBonusList(bon); + } + + StringBuffer aBuf = new StringBuffer("0|FEAT|PCPOOL|CL/"); + aBuf.append(rangeLevel); + BonusObj bon = Bonus.newBonus(aBuf.toString()); + bon.setCreatorObject(this); + Prerequisite prereq = factory.parse("PREDEFAULTMONSTER:N"); + bon.addPreReq(prereq); + addBonusList(bon); + } + + catch (PersistenceLayerException e) + { + Logging.errorPrint("Caught " + e); + } + } + chooseClassSkillList(); } @@ -2097,8 +2164,9 @@ protected void removeKnownSpellsForClassLevel(final PlayerCharacter aPC) { final String spellKey = getSpellKey(); - if ((knownSpellsList.size() == 0) || aPC.isImporting() - || !aPC.getAutoSpells()) { + if (((knownSpellsList != null) && (knownSpellsList.size() == 0)) || + aPC.isImporting() || !aPC.getAutoSpells()) + { return; } @@ -3886,9 +3954,12 @@ // Add the level to the current character int total = aPC.getTotalLevels(); - if (total == 0) { - aPC.setFeats(aPC.getInitialFeats()); - } + // No longer need this since the race now sets a bonus itself and Templates + // are not able to reassign their feats. There was nothing else returned in + // this number + // if (total == 0) { + // aPC.setFeats(aPC.getInitialFeats()); + // } setLevel(newLevel, aPC); // the level has now been added to the character, @@ -3943,7 +4014,7 @@ } /* - * If we are usign default monsters and we have not yet added + * If we are using default monsters and we have not yet added * all of the racial monster levels then we can not add any * feats. i.e. a default monster Ogre will not get a feat at 1st * or 3rd level because they have already been allocated in the @@ -3965,14 +4036,13 @@ // number and the stat point pool are // already saved in the import file. - if (processBonusFeats) { - final double bonusFeats = aPC - .getBonusFeatsForNewLevel(this); - if (bonusFeats > 0) { - // aPC.setFeats(aPC.getFeats() + bonusFeats); - aPC.adjustFeats(bonusFeats); - } - } +// if (processBonusFeats) { +// final double bonusFeats = aPC.getBonusFeatsForNewLevel(this); +// if (bonusFeats > 0) { +// // aPC.setFeats(aPC.getFeats() + bonusFeats); +// aPC.adjustFeats(bonusFeats); +// } +// } if (processBonusStats) { final int bonusStats = Globals.getBonusStatsForLevel(total); @@ -4373,7 +4443,7 @@ setHitPoint(level - 1, zeroInt); } - aPC.adjustFeats(-aPC.getBonusFeatsForNewLevel(this)); +// aPC.adjustFeats(-aPC.getBonusFeatsForNewLevel(this)); setLevel(newLevel, aPC); removeKnownSpellsForClassLevel(aPC); @@ -4426,7 +4496,7 @@ if (!isMonster() && (total == 0)) { aPC.setSkillPoints(0); - aPC.setFeats(0); + // aPC.setFeats(0); aPC.getSkillList().clear(); aPC.clearRealFeats(); aPC.getWeaponProfList().clear(); Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -32,7 +32,6 @@ import java.io.InputStreamReader; import java.io.IOException; import java.math.BigDecimal; -import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -1672,9 +1671,44 @@ return retVal; } + /** + * Get a number that represents the number of feats added to this character + * by BONUS statements. + * + * @return the number of feats added by bonus statements + */ private double getBonusFeatPool() { - return getTotalBonusTo("FEAT", "POOL"); + String aString = Globals.getBonusFeatString(); + + final StringTokenizer aTok = new StringTokenizer(aString, "|", false); + final int startLevel = Integer.parseInt(aTok.nextToken()); + final int rangeLevel = Integer.parseInt(aTok.nextToken()); + + double pool = getTotalBonusTo("FEAT", "POOL"); + double pcpool = getTotalBonusTo("FEAT", "PCPOOL"); + double mpool = getTotalBonusTo("FEAT", "MONSTERPOOL"); + + Logging.debugPrint(""); + Logging.debugPrint("=============="); + Logging.debugPrint("level " + this.getTotalPlayerLevels()); + + Logging.debugPrint("POOL: " + pool); + Logging.debugPrint("PCPOOL: " + pcpool); + Logging.debugPrint("MPOOL: " + mpool); + + double startAdjust = startLevel/rangeLevel; + + pool += Math.floor((this.getTotalCharacterLevel() >= startLevel) ? + 1.0d + pcpool - startAdjust + 0.0001 : 0); + pool += Math.floor(mpool + 0.0001); + + Logging.debugPrint(""); + Logging.debugPrint("Total Bonus: " + pool); + Logging.debugPrint("=============="); + Logging.debugPrint(""); + + return pool; } /** @@ -1877,28 +1911,33 @@ * feats from levelling. * * @return count of initial, non-leveling feats + * @deprecated */ public double getInitialFeats() { double initFeats = 0.0; - final String monsterRace = getRace().getMonsterClass(this, false); - if (monsterRace==null || !isMonsterDefault()) - { - initFeats = getRace().getBonusInitialFeats(); - } + // This is used by the PCClass to add any initial feats from a + // Creature's race. The bonus is now doing that itself, so no + // need to duplicate it in this figure. +// final String monsterRace = getRace().getMonsterClass(this, false); +// if (monsterRace==null || !isMonsterDefault()) +// { +// Race r = getRace(); +// initFeats = r.bonusTo("FEAT", "POOL", r, this); +// } +// +// if (PlayerCharacterUtilities.canReassignTemplateFeats()) +// { +// for (PCTemplate template : getTemplateList()) +// { +// if (template != null) +// { +// initFeats += template.getBonusInitialFeats(); +// } +// } +// } - if (PlayerCharacterUtilities.canReassignTemplateFeats()) - { - for (PCTemplate template : getTemplateList()) - { - if (template != null) - { - initFeats += template.getBonusInitialFeats(); - } - } - } - return initFeats; } @@ -4476,6 +4515,7 @@ * If the class passed in has the Levels * @param newLevelClass The class the new level has been taken in. * @return bonus feats for new level + * @deprecated */ public double getBonusFeatsForNewLevel(final PCClass newLevelClass) { @@ -10064,9 +10104,13 @@ // only specific bonuses can actually be fractional // -> TODO should define this in external file - if (!bonusType.startsWith("ITEMWEIGHT") && !bonusType.startsWith("ITEMCOST") - && !bonusType.startsWith("ACVALUE") && !bonusType.startsWith("ITEMCAPACITY") - && !bonusType.startsWith("LOADMULT") && (bonusType.indexOf("DAMAGEMULT") < 0)) + if (!bonusType.startsWith("ITEMWEIGHT") && + !bonusType.startsWith("ITEMCOST") && + !bonusType.startsWith("ACVALUE") && + !bonusType.startsWith("ITEMCAPACITY") && + !bonusType.startsWith("LOADMULT") && + !bonusType.startsWith("FEAT") && + (bonusType.indexOf("DAMAGEMULT") < 0)) { bonus = ((int) bonus); // TODO: never used } @@ -10516,7 +10560,7 @@ if (regVal != null) { - return Float.parseFloat(regVal); + return Double.parseDouble(regVal); } return defaultValue; Modified: Trunk/pcgen/code/src/java/pcgen/core/Race.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Race.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/java/pcgen/core/Race.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -30,10 +30,15 @@ import java.util.List; import java.util.Map; import java.util.StringTokenizer; + +import pcgen.core.bonus.BonusObj; import pcgen.core.prereq.Prerequisite; import pcgen.core.utils.CoreUtility; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; +import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.prereq.PreParserFactory; +import pcgen.util.Logging; /** * <code>Race</code>. @@ -83,7 +88,7 @@ private int reach = 5; private String raceType = "None"; private ArrayList<String> racialSubTypes = new ArrayList<String>(); - + { vision = new HashMap<String, String>(); } @@ -108,9 +113,9 @@ BAB = newBAB; } - public void setBonusInitialFeats(final int i) + public void setBonusInitialFeats(final BonusObj bon) { - bonusInitialFeats = i; + addBonusList(bon); } public int getBonusInitialFeats() Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -23,6 +23,8 @@ package pcgen.gui.editor; import pcgen.core.*; +import pcgen.core.bonus.Bonus; +import pcgen.core.bonus.BonusObj; import pcgen.gui.utils.JComboBoxEx; import pcgen.util.Logging; import pcgen.util.PropertyFactory; @@ -413,7 +415,12 @@ public void updateData(PObject thisPObject) { Race thisRace = (Race) thisPObject; - thisRace.setBonusInitialFeats(getBonusFeats()); + + StringBuffer sb = new StringBuffer(); + sb.append("FEAT|POOL|").append(getBonusFeats()); + final BonusObj bon = Bonus.newBonus(sb.toString()); + thisRace.setBonusInitialFeats(bon); + thisRace.setBonusSkillsPerLevel(getBonusSkillPoints()); thisRace.setCR(getCR()); thisRace.setDisplayName(getDisplayName()); Modified: Trunk/pcgen/code/src/java/plugin/bonustokens/Feat.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/bonustokens/Feat.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/java/plugin/bonustokens/Feat.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -43,7 +43,7 @@ protected boolean parseToken(final String token) { - if ("POOL".equals(token)) + if ("POOL".equals(token) || "MONSTERPOOL".equals(token) || "PCPOOL".equals(token)) { addBonusInfo(token); return true; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/race/StartfeatsToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/race/StartfeatsToken.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/race/StartfeatsToken.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -1,7 +1,13 @@ package plugin.lsttokens.race; import pcgen.core.Race; +import pcgen.core.bonus.Bonus; +import pcgen.core.bonus.BonusObj; +import pcgen.core.prereq.Prerequisite; +import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.RaceLstToken; +import pcgen.persistence.lst.prereq.PreParserFactory; +import pcgen.util.Logging; /** * Class deals with STARTFEATS Token @@ -14,11 +20,28 @@ public boolean parse(Race race, String value) { try { - race.setBonusInitialFeats(Integer.parseInt(value)); + StringBuffer sb = new StringBuffer(); + sb.append("FEAT|POOL|").append(Integer.parseInt(value)); + + final BonusObj bon = Bonus.newBonus(sb.toString()); + final PreParserFactory factory = PreParserFactory.getInstance(); + final StringBuffer buf = new StringBuffer(); + + buf.append("PREMULT:1,[PREDEFAULTMONSTER:N],[PREHD:1]"); + + final Prerequisite prereq = factory.parse(buf.toString()); + bon.addPreReq(prereq); + + race.setBonusInitialFeats(bon); return true; } catch(NumberFormatException nfe) { return false; } + catch (PersistenceLayerException e) + { + Logging.errorPrint("Caught " + e); + return false; + } } } Modified: Trunk/pcgen/code/src/test/pcgen/AbstractCharacterTestCase.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/AbstractCharacterTestCase.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/test/pcgen/AbstractCharacterTestCase.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -140,6 +140,8 @@ gamemode.addToAlignmentList(createAlignment("None", "NONE")); gamemode.addToAlignmentList(createAlignment("Deity's", "Deity")); + gamemode.setBonusFeatLevels("3|3"); + SettingsHandler.setGame("3.5"); PluginLoader ploader = PluginLoader.inst(); ploader.startSystemPlugins(Constants.s_SYSTEM_TOKENS); Modified: Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -42,9 +42,11 @@ import pcgen.core.bonus.BonusObj; import pcgen.core.character.CharacterSpell; import pcgen.core.character.SpellBook; +import pcgen.core.prereq.Prerequisite; import pcgen.core.spell.Spell; import pcgen.io.exporttoken.AttackToken; import pcgen.io.exporttoken.StatToken; +import pcgen.persistence.lst.prereq.PreParserFactory; import pcgen.util.Logging; import pcgen.util.TestHelper; import pcgen.util.chooser.ChooserFactory; @@ -74,6 +76,106 @@ return new TestSuite(PlayerCharacterTest.class); } + /* (non-Javadoc) + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + final PreParserFactory factory = PreParserFactory.getInstance(); + + // Human + human = new Race(); + final BonusObj humanRaceFeatBonus = Bonus.newBonus("FEAT|POOL|2"); + final StringBuffer buf = new StringBuffer(); + + buf.append("PREMULT:1,[PREDEFAULTMONSTER:N],[!PREHD:1]"); + + final Prerequisite humanFeatPrereq = factory.parse(buf.toString()); + + humanRaceFeatBonus.addPreReq(humanFeatPrereq); + human.setBonusInitialFeats(humanRaceFeatBonus); + + + // Giant Race + giantRace = new Race(); + giantRace.setName("Ogre"); + giantRace.setMonsterClass("Giant"); + giantRace.setMonsterClassLevels(4); + giantRace.setHitDiceAdvancement(new int[] {100}); + final BonusObj babBonus = Bonus.newBonus("COMBAT|BAB|3|PREDEFAULTMONSTER:Y|TYPE=Base.REPLACE"); + giantRace.addBonusList(babBonus); + + final BonusObj giantRaceFeatBonus = Bonus.newBonus("FEAT|POOL|1"); + final Prerequisite giantFeatPrereq = factory.parse(buf.toString()); + giantRaceFeatBonus.addPreReq(giantFeatPrereq); + + giantRace.setBonusInitialFeats(giantRaceFeatBonus); + + Globals.getRaceMap().put("Ogre", giantRace); + + // Giant Class + giantClass = new PCClass(); + giantClass.setName("Giant"); + giantClass.setAbbrev("Gnt"); + giantClass.addMyType("MONSTER"); + final BonusObj babClassBonus = Bonus.newBonus("1|COMBAT|BAB|CL*3/4"); + giantClass.addBonusList(babClassBonus); + giantClass.setLevelsPerFeat(new Integer(4)); + Globals.getClassList().add(giantClass); + + + pcClass = new PCClass(); + pcClass.setName("MyClass"); + pcClass.setAbbrev("My"); + pcClass.setSpellType("ARCANE"); + Globals.getClassList().add(pcClass); + + classWarmind = new PCClass(); + classWarmind.setName("Warmind"); + classWarmind.setAbbrev("WM"); + Globals.getClassList().add(classWarmind); + + Ability toughness = new Ability(); + toughness.setName("Toughness"); + toughness.setMultiples("Y"); + toughness.setStacks("Y"); + toughness.setChoiceString("NOCHOICE"); + toughness.setCategory("FEAT"); + Globals.addAbility(toughness); + + Ability exoticWpnProf = TestHelper.makeAbility("Exotic Weapon Proficiency", "FEAT", "General.Fighter"); + exoticWpnProf.setMultiples("YES"); + exoticWpnProf.setChoiceString("CHOOSE:PROFICIENCY|WEAPON|UNIQUE|TYPE.Exotic"); + exoticWpnProf.addAutoArray("WEAPONPROF|%LIST"); + + WeaponProf wpnProfTestA = new WeaponProf(); + wpnProfTestA.setName("Weapon A"); + wpnProfTestA.setKeyName("Weapon A"); + wpnProfTestA.setTypeInfo("Exotic"); + Globals.addWeaponProf(wpnProfTestA); + + WeaponProf wpnProfTestB = new WeaponProf(); + wpnProfTestB.setName("Weapon B"); + wpnProfTestB.setKeyName("Weapon B"); + wpnProfTestB.setTypeInfo("Exotic"); + Globals.addWeaponProf(wpnProfTestB); + + WeaponProf wpnProfTestC = new WeaponProf(); + wpnProfTestC.setName("Weapon C"); + wpnProfTestC.setKeyName("Weapon C"); + wpnProfTestC.setTypeInfo("Exotic"); + Globals.addWeaponProf(wpnProfTestC); + + + SettingsHandler .setSingleChoicePreference(Constants.CHOOSER_SINGLECHOICEMETHOD_SELECTEXIT); + ChooserFactory.setInterfaceClassname(SwingChooser.class.getName()); + + pcClass.addAddList(1, "FEAT(KEY_Exotic Weapon Proficiency (Weapon A))"); + pcClass.addAddList(2, "FEAT(KEY_Exotic Weapon Proficiency (Weapon B))"); + pcClass.addAddList(3, "FEAT(KEY_Exotic Weapon Proficiency (Weapon C))"); + } + /** * @throws Exception */ @@ -84,7 +186,7 @@ character.setRace(human); character.incrementClassLevel(1, pcClass); - assertEquals(2, (int) character.getFeats()); + assertEquals(2, (int) character.getRawFeats(true)); } /** @@ -97,7 +199,7 @@ character.setRace(human); character.incrementClassLevel(1, pcClass); - assertEquals(2, (int) character.getFeats()); + assertEquals(2, (int) character.getRawFeats(true)); } /** @@ -110,7 +212,7 @@ character.setRace(human); character.incrementClassLevel(3, pcClass); - assertEquals(3, (int) character.getFeats()); + assertEquals(3, (int) character.getRawFeats(true)); } @@ -124,7 +226,7 @@ character.setRace(human); character.incrementClassLevel(3, pcClass); - assertEquals(3, (int) character.getFeats()); + assertEquals(3, (int) character.getRawFeats(true)); } @@ -137,15 +239,19 @@ final PlayerCharacter character = new PlayerCharacter(); character.setRace(giantRace); - assertEquals(2, (int) character.getFeats()); character.incrementClassLevel(1, pcClass); - assertEquals(2, (int) character.getFeats()); + is((int) character.getRawFeats(true), eq(2), "One level of PCClass, PC has two feats"); character.incrementClassLevel(1, pcClass); - assertEquals(3, (int) character.getFeats()); + is((int) character.getRawFeats(true), eq(3), "Two levels of PCClass, feats increment"); } /** * @throws Exception + * + * This test is currently broken because with default Monster mode on, although the program + * gives the Ogre 4 racial HD, HD returns 0 instead of 4, so the !PREHD to turn off the + * racial feat doesn;t work. I consider this a bug, but Default Monster mode is going away + * and I've wasted more time than I cared to on this already. ARW 2006-11-09 */ public void testGetMonsterBonusFeatsForNewLevel1Default() throws Exception { @@ -153,8 +259,13 @@ final PlayerCharacter character = new PlayerCharacter(); character.setRace(giantRace); - character.incrementClassLevel(1, pcClass); - assertEquals(0, (int) character.getFeats()); + character.incrementClassLevel(4, giantClass); + + is((int) character.getRawFeats(true), eq(0), "2 Default monster doesn't get feats from initial levels"); + character.incrementClassLevel(3, giantClass); + is((int) character.getRawFeats(true), eq(0), "Default monster doesn't get feats up to level 7 (4 monster + 3 extra)"); + character.incrementClassLevel(1, giantClass); + is((int) character.getRawFeats(true), eq(1), "Default monster gets first feat at level 8 (4 monster + 4 extra)"); } public void testBabDefaultOgre() throws Exception @@ -318,11 +429,11 @@ .setSingleChoicePreference(Constants.CHOOSER_SINGLECHOICEMETHOD_SELECTEXIT); ChooserFactory.setInterfaceClassname(SwingChooser.class.getName()); - is((int) character.getFeats(), eq(2), "Start with 2 feats"); + is((int) character.getRawFeats(true), eq(2), "Start with 2 feats"); try { - AbilityUtilities.modFeat(character, null, "Toughness", true, false); - is((int) character.getFeats(), eq(1), "Only 1 feat used"); + AbilityUtilities.modFeat(character, null, "Toughness", true, true); + is((int) character.getRawFeats(true), eq(1), "Only 1 feat used"); } catch(HeadlessException e) { @@ -360,91 +471,6 @@ assertTrue("Proficient in Weapon B", character.hasWeaponProfKeyed("Weapon B")); assertTrue("Proficient in Weapon C", character.hasWeaponProfKeyed("Weapon C")); } - - /* (non-Javadoc) - * @see junit.framework.TestCase#setUp() - */ - protected void setUp() throws Exception - { - super.setUp(); - - // Human - human = new Race(); - human.setBonusInitialFeats(2); - - - // Giant Race - giantRace = new Race(); - giantRace.setName("Ogre"); - giantRace.setBonusInitialFeats(1); - giantRace.setMonsterClass("Giant"); - giantRace.setMonsterClassLevels(4); - giantRace.setHitDiceAdvancement(new int[] {100}); - final BonusObj babBonus = Bonus.newBonus("COMBAT|BAB|3|PREDEFAULTMONSTER:Y|TYPE=Base.REPLACE"); - giantRace.addBonusList(babBonus); - Globals.getRaceMap().put("Ogre", giantRace); - - // Giant Class - giantClass = new PCClass(); - giantClass.setName("Giant"); - giantClass.setAbbrev("Gnt"); - giantClass.addMyType("MONSTER"); - final BonusObj babClassBonus = Bonus.newBonus("1|COMBAT|BAB|CL*3/4"); - giantClass.addBonusList(babClassBonus); - Globals.getClassList().add(giantClass); - - - pcClass = new PCClass(); - pcClass.setName("MyClass"); - pcClass.setAbbrev("My"); - pcClass.setSpellType("ARCANE"); - Globals.getClassList().add(pcClass); - - classWarmind = new PCClass(); - classWarmind.setName("Warmind"); - classWarmind.setAbbrev("WM"); - Globals.getClassList().add(classWarmind); - - Ability toughness = new Ability(); - toughness.setName("Toughness"); - toughness.setMultiples("Y"); - toughness.setStacks("Y"); - toughness.setChoiceString("NOCHOICE"); - toughness.setCategory("FEAT"); - Globals.addAbility(toughness); - - Ability exoticWpnProf = TestHelper.makeAbility("Exotic Weapon Proficiency", "FEAT", "General.Fighter"); - exoticWpnProf.setMultiples("YES"); - exoticWpnProf.setChoiceString("CHOOSE:PROFICIENCY|WEAPON|UNIQUE|TYPE.Exotic"); - exoticWpnProf.addAutoArray("WEAPONPROF|%LIST"); - - WeaponProf wpnProfTestA = new WeaponProf(); - wpnProfTestA.setName("Weapon A"); - wpnProfTestA.setKeyName("Weapon A"); - wpnProfTestA.setTypeInfo("Exotic"); - Globals.addWeaponProf(wpnProfTestA); - - WeaponProf wpnProfTestB = new WeaponProf(); - wpnProfTestB.setName("Weapon B"); - wpnProfTestB.setKeyName("Weapon B"); - wpnProfTestB.setTypeInfo("Exotic"); - Globals.addWeaponProf(wpnProfTestB); - - WeaponProf wpnProfTestC = new WeaponProf(); - wpnProfTestC.setName("Weapon C"); - wpnProfTestC.setKeyName("Weapon C"); - wpnProfTestC.setTypeInfo("Exotic"); - Globals.addWeaponProf(wpnProfTestC); - - - SettingsHandler .setSingleChoicePreference(Constants.CHOOSER_SINGLECHOICEMETHOD_SELECTEXIT); - ChooserFactory.setInterfaceClassname(SwingChooser.class.getName()); - - pcClass.addAddList(1, "FEAT(KEY_Exotic Weapon Proficiency (Weapon A))"); - pcClass.addAddList(2, "FEAT(KEY_Exotic Weapon Proficiency (Weapon B))"); - pcClass.addAddList(3, "FEAT(KEY_Exotic Weapon Proficiency (Weapon C))"); - } - public void testGetClassVar() throws Exception { Logging.setDebugMode(true); @@ -513,8 +539,8 @@ } /** - * Test the skills visibility fucntionality. We want to ensure that - * each call retreives the right set of skills. + * Test the skills visibility functionality. We want to ensure that + * each call retrieves the right set of skills. */ public void testSkillsVisibility() { @@ -545,7 +571,7 @@ defaultSkill.modRanks(1.0, pcClass, true, pc); pc.addSkill(defaultSkill); - // Test retreived list + // Test retrieved list List <Skill>skillList = pc.getSkillList(); assertEquals("Full skill list should have all 3 skills", 3, skillList .size()); @@ -585,7 +611,7 @@ assertEquals("Add spell should be rejected due to no book", "Invalid spell list/book name.", response); - // Add a non existant spell to a non existant spellbook + // Add a non existant spell to a non existent spellbook String spellBookName = "Test book"; response = character.addSpell(charSpell, none, pcClass.getKeyName(), spellBookName, 1, 1); assertEquals("Add spell should be rejected due to book not existing", @@ -635,7 +661,7 @@ PCClass c = character.getClassKeyed(pcClass.getKeyName()); List<CharacterSpell> aList = c.getSpellSupport().getCharacterSpell(null, spellBookName, 1); - CharacterSpell addedSpell = (CharacterSpell) (aList.get(0)); + CharacterSpell addedSpell = aList.get(0); response = character.delSpell(addedSpell.getSpellInfoFor(spellBookName, 1, -1, none), pcClass, spellBookName); assertEquals( @@ -644,7 +670,7 @@ response); aList = giantClass.getSpellSupport().getCharacterSpell(null, spellBookName, 1); - addedSpell = (CharacterSpell) (aList.get(0)); + addedSpell = aList.get(0); response = character.delSpell(addedSpell.getSpellInfoFor(spellBookName, 1, -1), giantClass, spellBookName); assertEquals( Modified: Trunk/pcgen/code/src/test/pcgen/io/exporttoken/SpellMemTokenTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/io/exporttoken/SpellMemTokenTest.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/test/pcgen/io/exporttoken/SpellMemTokenTest.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -33,6 +33,8 @@ import pcgen.core.PlayerCharacter; import pcgen.core.Race; import pcgen.core.SettingsHandler; +import pcgen.core.bonus.Bonus; +import pcgen.core.bonus.BonusObj; import pcgen.core.character.CharacterSpell; import pcgen.core.spell.Spell; import plugin.exporttokens.SpellMemToken; @@ -81,7 +83,8 @@ // Human human = new Race(); - human.setBonusInitialFeats(2); + final BonusObj bon = Bonus.newBonus("FEAT|POOL|2"); + human.setBonusInitialFeats(bon); testSpell = new Spell(); testSpell.setName("Test Spell"); Modified: Trunk/pcgen/code/src/test/pcgen/util/TestHelper.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/util/TestHelper.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/test/pcgen/util/TestHelper.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -47,7 +47,10 @@ import pcgen.core.WeaponProf; import pcgen.core.bonus.Bonus; import pcgen.core.bonus.BonusObj; +import pcgen.core.prereq.Prerequisite; +import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.EquipmentLoader; +import pcgen.persistence.lst.prereq.PreParserFactory; /** * Helps Junit tests @@ -230,7 +233,22 @@ Race aRace = new Race(); aRace.setName(name); aRace.setKeyName("KEY_" + name); - aRace.setBonusInitialFeats(1); + + try + { + final BonusObj bon = Bonus.newBonus("FEAT|POOL|1"); + final PreParserFactory factory = PreParserFactory.getInstance(); + final Prerequisite prereq = factory.parse("PREDEFAULTMONSTER:N"); + bon.addPreReq(prereq); + bon.setCreatorObject(aRace); + + aRace.setBonusInitialFeats(bon); + } + catch (PersistenceLayerException e) + { + Logging.errorPrint("Caught " + e); + } + Globals.getRaceMap().put(name, aRace); return aRace; } Modified: Trunk/pcgen/code/src/test/plugin/exporttokens/SpellListTokenTest.java =================================================================== --- Trunk/pcgen/code/src/test/plugin/exporttokens/SpellListTokenTest.java 2006-09-12 00:10:18 UTC (rev 1381) +++ Trunk/pcgen/code/src/test/plugin/exporttokens/SpellListTokenTest.java 2006-09-12 00:18:26 UTC (rev 1382) @@ -34,6 +34,8 @@ import pcgen.core.Race; import pcgen.core.SettingsHandler; import pcgen.core.StatList; +import pcgen.core.bonus.Bonus; +import pcgen.core.bonus.BonusObj; import pcgen.core.prereq.Prerequisite; /** @@ -79,8 +81,10 @@ // Human human = new Race(); - human.setBonusInitialFeats(2); + final BonusObj bon = Bonus.newBonus("FEAT|POOL|2"); + human.setBonusInitialFeats(bon); + arcaneClass = new PCClass(); arcaneClass.setName("TestArcane"); arcaneClass.setAbbrev("TA"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2006-10-15 00:21:58
|
Revision: 1476 http://svn.sourceforge.net/pcgen/?rev=1476&view=rev Author: jdempsey Date: 2006-10-14 17:21:49 -0700 (Sat, 14 Oct 2006) Log Message: ----------- Fix feat pool calculations to allow additions to the pool for characters that do not qualify for the first bonus feat due to level. Define monster class type in PlayerCharacterTest and correct 4 tests to match expected results. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-14 23:33:32 UTC (rev 1475) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-15 00:21:49 UTC (rev 1476) @@ -1536,8 +1536,8 @@ double startAdjust = startLevel/rangeLevel; - pool += Math.floor((this.getTotalCharacterLevel() >= startLevel) ? - 1.0d + pcpool - startAdjust + 0.0001 : 0); + pool += Math.floor((this.getTotalCharacterLevel() >= startLevel) ? 1.0d + + pcpool - startAdjust + 0.0001 : pcpool + 0.0001); pool += Math.floor(mpool + 0.0001); Logging.debugPrint(""); //$NON-NLS-1$ @@ -3648,6 +3648,7 @@ final Set<String> profKeyList = new TreeSet<String>(pobj.getSafeListFor(ListKey.SELECTED_WEAPON_PROF_BONUS)); // TODO - Need to handle more crap here. pobj.addAutoTagsToList("WEAPONPROF", profKeyList, this, true); + //TODO: Selected bonus weapon prof is stored in the associated list for ( final String profKey : profKeyList ) { final WeaponProf prof = Globals.getWeaponProfKeyed(profKey); Modified: Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java 2006-10-14 23:33:32 UTC (rev 1475) +++ Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java 2006-10-15 00:21:49 UTC (rev 1476) @@ -31,6 +31,7 @@ import java.awt.HeadlessException; import java.util.List; import java.util.Collections; +import java.util.logging.Logger; import junit.framework.Test; import junit.framework.TestSuite; @@ -136,27 +137,27 @@ /** + * Test bonus monster feats where there default monster mode is off. + * Note: As PCClass grants feats which do not exist, the feat pool gets + * incremented instead. * @throws Exception */ public void testGetMonsterBonusFeatsForNewLevel1() throws Exception { SettingsHandler.setMonsterDefault(false); final PlayerCharacter character = new PlayerCharacter(); - + character.setRace(giantRace); character.incrementClassLevel(1, pcClass); - is((int) character.getRawFeats(true), eq(2), "One level of PCClass, PC has two feats"); + is((int) character.getRawFeats(true), eq(2), "One level of PCClass, PC has one feat for level and one for a missing feat."); character.incrementClassLevel(1, pcClass); is((int) character.getRawFeats(true), eq(3), "Two levels of PCClass, feats increment"); } /** + * Test the number of feats a monster class gets when default monster + * mode is on. * @throws Exception - * - * This test is currently broken because with default Monster mode on, although the program - * gives the Ogre 4 racial HD, HD returns 0 instead of 4, so the !PREHD to turn off the - * racial feat doesn;t work. I consider this a bug, but Default Monster mode is going away - * and I've wasted more time than I cared to on this already. ARW 2006-11-09 */ public void testGetMonsterBonusFeatsForNewLevel1Default() throws Exception { @@ -166,11 +167,11 @@ character.setRace(giantRace); character.incrementClassLevel(4, giantClass); - is((int) character.getRawFeats(true), eq(0), "2 Default monster doesn't get feats from initial levels"); - character.incrementClassLevel(3, giantClass); - is((int) character.getRawFeats(true), eq(0), "Default monster doesn't get feats up to level 7 (4 monster + 3 extra)"); + is((int) character.getRawFeats(true), eq(0), "Default monster doesn't get feats from initial levels"); + character.incrementClassLevel(2, giantClass); + is((int) character.getRawFeats(true), eq(0), "Default monster doesn't get feats up to level 6 (4 monster + 2 extra)"); character.incrementClassLevel(1, giantClass); - is((int) character.getRawFeats(true), eq(1), "Default monster gets first feat at level 8 (4 monster + 4 extra)"); + is((int) character.getRawFeats(true), eq(1), "Default monster gets first feat at level 7 (4 monster + 3 extra)"); } /** @@ -233,7 +234,6 @@ */ public void testGetVariableValue1() throws Exception { - //Logging.setDebugMode(true); SettingsHandler.setMonsterDefault(false); Logging.debugPrint("\n\n\ntestGetVariableValue1()"); giantRace.addVariable(-9, "GiantVar1", "0"); @@ -246,13 +246,13 @@ final PlayerCharacter character = new PlayerCharacter(); + // NOTE: This will add 4 levels of giantClass to the character character.setRace(giantRace); character.incrementClassLevel(4, giantClass); - assertEquals(new Float(7.0), character.getVariableValue("GiantVar1", "CLASS:Giant")); + assertEquals(new Float(15.0), character.getVariableValue("GiantVar1", "CLASS:Giant")); assertEquals(new Float(8.0), character.getVariableValue("GiantClass1", "CLASS:Giant")); - } /** @@ -276,7 +276,7 @@ character.setRace(giantRace); character.incrementClassLevel(4, giantClass); - assertEquals(new Float(7.0), character.getVariableValue("GiantVar1", "CLASS:Giant")); + assertEquals(new Float(11.0), character.getVariableValue("GiantVar1", "CLASS:Giant")); assertEquals(new Float(4.0), character.getVariableValue("GiantClass1", "CLASS:Giant")); final AttackToken token = new AttackToken(); @@ -447,6 +447,9 @@ Globals.addRace(giantRace); + // Create the monster class type + SettingsHandler.getGame().addClassType("Monster CRFORMULA:0 ISMONSTER:YES XPPENALTY:NO"); + // Giant Class giantClass = new PCClass(); giantClass.setName("Giant"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-10-19 00:13:19
|
Revision: 1494 http://svn.sourceforge.net/pcgen/?rev=1494&view=rev Author: thpr Date: 2006-10-18 17:12:56 -0700 (Wed, 18 Oct 2006) Log Message: ----------- Change Boolean usage from new Boolean() to Boolean.valueOf() (see Java 1.5 docs: Recommended change for speed & memory use) Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoGear.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRaces.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSkills.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/AvailableFollowerModel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/SelectedFollowerModel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellBooks.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/SpellModel.java Trunk/pcgen/code/src/java/pcgen/util/FOPHandler.java Trunk/pcgen/code/src/test/pcgen/util/testchecker/CompareEqualBoolean.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -2559,7 +2559,7 @@ */ public void setMonsterFlag(final boolean aFlag) { if (monsterFlag == null) { - monsterFlag = new Boolean(aFlag); + monsterFlag = Boolean.valueOf(aFlag); } monsterFlag = aFlag; } Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -1576,21 +1576,21 @@ resetModel(mode, available); displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); + displayList.add(Boolean.TRUE); if(modelType == 0) { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[1], true))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[2], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[1], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[2], false))); } else { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[1], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[2], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[1], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[2], true))); } - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[3], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[4], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[5], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[6], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[7], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[8], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[3], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[4], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[5], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[6], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[7], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[8], true))); } public boolean isCellEditable(Object node, int column) @@ -1976,7 +1976,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption(modelType + "." + colNameList[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } public int getMColumnOffset() Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -1706,10 +1706,10 @@ resetModel(mode); displayList = new ArrayList<Boolean>(); int i = 1; - displayList.add(new Boolean(true)); - displayList.add(new Boolean(getColumnViewOption(deityNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(deityNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(deityNameList[i++], true))); + displayList.add(Boolean.TRUE); + displayList.add(Boolean.valueOf(getColumnViewOption(deityNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(deityNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(deityNameList[i++], true))); } /** @@ -2136,7 +2136,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption(deityNameList[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } public int getMColumnOffset() @@ -2193,8 +2193,8 @@ private DomainModel() { displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); - displayList.add(new Boolean(getColumnViewOption(domainColList[1], true))); + displayList.add(Boolean.TRUE); + displayList.add(Boolean.valueOf(getColumnViewOption(domainColList[1], true))); } /** @@ -2360,7 +2360,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption(domainColList[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } public int getMColumnOffset() Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -4254,15 +4254,15 @@ resetModel(mode, model); String[] colNameList = getNameList(); displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[1], true))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[2], true))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[3], true))); + displayList.add(Boolean.TRUE); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[1], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[2], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[3], true))); if(modelType == 0) { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[4], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[4], true))); } else { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + colNameList[4], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + colNameList[4], false))); } } @@ -4964,7 +4964,7 @@ { String[] colNameList = getNameList(); setColumnViewOption(modelType + "." + colNameList[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } public int getMColumnOffset() Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoGear.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoGear.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoGear.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -3247,21 +3247,21 @@ resetModel(mode, available); int i = 1; displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); + displayList.add(Boolean.TRUE); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); if(available) { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); } else { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); } } @@ -3823,7 +3823,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption(modelType + "." + names[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } public int getMColumnOffset() Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRaces.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRaces.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRaces.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -938,14 +938,14 @@ super(null); resetModel(mode); displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); - displayList.add(new Boolean(getColumnViewOption(raceNameList[1], true))); - displayList.add(new Boolean(getColumnViewOption(raceNameList[2], true))); - displayList.add(new Boolean(getColumnViewOption(raceNameList[3], true))); - displayList.add(new Boolean(getColumnViewOption(raceNameList[4], false))); - displayList.add(new Boolean(getColumnViewOption(raceNameList[5], false))); - displayList.add(new Boolean(getColumnViewOption(raceNameList[6], false))); - displayList.add(new Boolean(getColumnViewOption(raceNameList[7], true))); + displayList.add(Boolean.TRUE); + displayList.add(Boolean.valueOf(getColumnViewOption(raceNameList[1], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(raceNameList[2], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(raceNameList[3], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(raceNameList[4], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(raceNameList[5], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(raceNameList[6], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(raceNameList[7], true))); } /** @@ -1555,7 +1555,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption(raceNameList[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } public int getMColumnOffset() { Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSkills.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSkills.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSkills.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -2465,24 +2465,24 @@ resetModel(mode, available); int i = 1; displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); // Skill + displayList.add(Boolean.TRUE); // Skill if (available) { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); // Modifier - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); // Rank - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); // Total - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); // Cost - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); // Source - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); // Order + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); // Modifier + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); // Rank + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); // Total + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); // Cost + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); // Source + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); // Order } else { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); // Modifier - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); // Rank - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); // Total - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); // Cost - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], false))); // Source - displayList.add(new Boolean(getColumnViewOption(modelType + "." + names[i++], true))); // Order + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); // Modifier + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); // Rank + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); // Total + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); // Cost + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], false))); // Source + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + names[i++], true))); // Order } } @@ -3088,7 +3088,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption(modelType + "." + names[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } private void setColumnViewOption(String colName, boolean val) { Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -990,18 +990,18 @@ } resetModel(viewMode, available); displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); + displayList.add(Boolean.TRUE); if(available) { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + COL_NAMES[1], true))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + COL_NAMES[2], true))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + COL_NAMES[3], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + COL_NAMES[1], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + COL_NAMES[2], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + COL_NAMES[3], true))); } else { - displayList.add(new Boolean(getColumnViewOption(modelType + "." + COL_NAMES[1], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + COL_NAMES[2], false))); - displayList.add(new Boolean(getColumnViewOption(modelType + "." + COL_NAMES[3], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + COL_NAMES[1], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + COL_NAMES[2], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + COL_NAMES[3], false))); } - displayList.add(new Boolean(getColumnViewOption(modelType + "." + COL_NAMES[4], false))); + displayList.add(Boolean.valueOf(getColumnViewOption(modelType + "." + COL_NAMES[4], false))); } public boolean isCellEditable(Object node, int column) @@ -1302,7 +1302,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption(modelType + "." + COL_NAMES[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } public int getMColumnOffset() { Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/AvailableFollowerModel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/AvailableFollowerModel.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/AvailableFollowerModel.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -96,14 +96,14 @@ int i = 1; displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); - displayList.add(new Boolean(getColumnViewOption(avaNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(avaNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(avaNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(avaNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(avaNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(avaNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(avaNameList[i++], true))); + displayList.add(Boolean.TRUE); + displayList.add(Boolean.valueOf(getColumnViewOption(avaNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(avaNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(avaNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(avaNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(avaNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(avaNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(avaNameList[i++], true))); } /** @@ -456,7 +456,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption( avaNameList[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } /** Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/SelectedFollowerModel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/SelectedFollowerModel.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/SelectedFollowerModel.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -78,9 +78,9 @@ int i = 1; displayList = new ArrayList<Boolean>(); - displayList.add(new Boolean(true)); - displayList.add(new Boolean(getColumnViewOption(selNameList[i++], true))); - displayList.add(new Boolean(getColumnViewOption(selNameList[i++], true))); + displayList.add(Boolean.TRUE); + displayList.add(Boolean.valueOf(getColumnViewOption(selNameList[i++], true))); + displayList.add(Boolean.valueOf(getColumnViewOption(selNameList[i++], true))); } /** @@ -423,7 +423,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption( selNameList[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } /** Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellBooks.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellBooks.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellBooks.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -415,9 +415,9 @@ colNameList.add(PropertyFactory.getString("InfoSpellBooks.Descriptor")); //$NON-NLS-1$ colNameList.add(PropertyFactory.getString("InfoSpellBooks.SourceFile")); //$NON-NLS-1$ List<Boolean> colActiveList = new ArrayList<Boolean>(); - colActiveList.add(new Boolean(true)); - colActiveList.add(new Boolean(true)); - colActiveList.add(new Boolean(true)); + colActiveList.add(Boolean.TRUE); + colActiveList.add(Boolean.TRUE); + colActiveList.add(Boolean.TRUE); // Build the Top Panel buildTopPanel(); Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/SpellModel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/SpellModel.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/SpellModel.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -224,46 +224,46 @@ private List<Boolean> makeDisplayList(boolean available) { List<Boolean> retList = new ArrayList<Boolean>(); - retList.add(new Boolean(true)); + retList.add(Boolean.TRUE); if(available) { int i = 1; - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_SCHOOL - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_SUBSCHOOL - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_DESCRIPTOR + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_SCHOOL + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_SUBSCHOOL + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_DESCRIPTOR if (Spell.hasPPCost()) { - retList.add(new Boolean(getColumnViewOption(colNameList[i++], true))); //COL_PPCOST + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], true))); //COL_PPCOST } - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_COMPONENT - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_CASTTIME - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_RANGE - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_DESCRIPTION - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_TARGET - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_DURATION - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_SAVE - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_SR - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_SRC + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_COMPONENT + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_CASTTIME + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_RANGE + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_DESCRIPTION + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_TARGET + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_DURATION + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_SAVE + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_SR + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_SRC } else { int i = 1; - retList.add(new Boolean(getColumnViewOption(colNameList[i++], true))); //COL_SCHOOL - retList.add(new Boolean(getColumnViewOption(colNameList[i++], true))); //COL_SUBSCHOOL - retList.add(new Boolean(getColumnViewOption(colNameList[i++], true))); //COL_DESCRIPTOR + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], true))); //COL_SCHOOL + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], true))); //COL_SUBSCHOOL + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], true))); //COL_DESCRIPTOR if (Spell.hasPPCost()) { - retList.add(new Boolean(getColumnViewOption(colNameList[i++], true))); //COL_PPCOST + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], true))); //COL_PPCOST } - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_COMPONENT - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_CASTTIME - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_RANGE - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_DESCRIPTION - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_TARGET - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_DURATION - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_SAVE - retList.add(new Boolean(getColumnViewOption(colNameList[i++], false))); //COL_SR - retList.add(new Boolean(getColumnViewOption(colNameList[i++], true))); //COL_SRC + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_COMPONENT + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_CASTTIME + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_RANGE + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_DESCRIPTION + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_TARGET + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_DURATION + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_SAVE + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], false))); //COL_SR + retList.add(Boolean.valueOf(getColumnViewOption(colNameList[i++], true))); //COL_SRC } return retList; @@ -1159,7 +1159,7 @@ public void setMColumnDisplayed(int col, boolean disp) { setColumnViewOption(colNameList[col], disp); - displayList.set(col, new Boolean(disp)); + displayList.set(col, Boolean.valueOf(disp)); } Modified: Trunk/pcgen/code/src/java/pcgen/util/FOPHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/FOPHandler.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/java/pcgen/util/FOPHandler.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -254,7 +254,7 @@ driver.setRenderer(renderer); /* Hashtable rendererOptions = new Hashtable(); - rendererOptions.put("fineDetail", new Boolean(false)); + rendererOptions.put("fineDetail", Boolean.FALSE); driver.getRenderer().setOptions(rendererOptions); driver.getRenderer().setProducer("PC Gen Character Generator"); */ Modified: Trunk/pcgen/code/src/test/pcgen/util/testchecker/CompareEqualBoolean.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/util/testchecker/CompareEqualBoolean.java 2006-10-18 23:53:23 UTC (rev 1493) +++ Trunk/pcgen/code/src/test/pcgen/util/testchecker/CompareEqualBoolean.java 2006-10-19 00:12:56 UTC (rev 1494) @@ -41,7 +41,7 @@ } public boolean check( Object obj ) { - return obj.equals(new Boolean(this.bool)); + return obj.equals(Boolean.valueOf(this.bool)); } public StringBuffer scribe( StringBuffer buf ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-10-24 22:40:34
|
Revision: 1522 http://svn.sourceforge.net/pcgen/?rev=1522&view=rev Author: thpr Date: 2006-10-24 15:40:09 -0700 (Tue, 24 Oct 2006) Log Message: ----------- Part of 1460794: Remove token processing from core Removes PCClass DOMAIN: tag to DomainToken Removes PCClass PROHIBITSPELL: tag to ProhibitspellToken Typesafe Enumeration Project: Makes XPPenalty TypeSafe Makes ProhibitedSpell types TypeSafe Corrects DOMAIN token to take PRExxx in brackets, as per documentation Also eliminates PreParser.java (useless class) Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/Domain.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/SpellProhibitor.java Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreMultParser.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/XppenaltyToken.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/output/prereq/PrerequisiteWriterTest.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreStatParserTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/util/enumeration/DefaultTriState.java Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParser.java Modified: Trunk/pcgen/code/src/java/pcgen/core/Domain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Domain.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/core/Domain.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -201,7 +201,7 @@ return "DOMAIN|" + keyName; } - public Object clone() + public Domain clone() { Domain aObj = null; Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -52,6 +52,7 @@ import pcgen.util.Logging; import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; +import pcgen.util.enumeration.DefaultTriState; /** * <code>PCClass</code>. @@ -104,11 +105,6 @@ protected int numSpellsFromSpecialty = 0; /* - * STRINGREFACTOR The Domains are parsed both in PCClass.modDomainsForLevel - * as well as InfoDomain.addUnfilteredDomains, thus that processing needs to - * be avoided. - */ - /* * LEVELONEONLY Since this is for a Class Line and not a ClassLevel line, a * granting of Domains only needs to occur in first level. * @@ -116,11 +112,7 @@ * the code seems to want to allow a Domain on a Class Level line. (Not sure * if this functions correctly, though) */ - /* - * TYPESAFETY should be introduced to Domains in order to correctly - * store/process them as something other than a String - */ - private ArrayList<String> domainList = null; + private ArrayList<LevelProperty> domainList = null; /* * ALLCLASSLEVELS The automatic Feats appropriate to any given level (they @@ -360,17 +352,7 @@ */ private String CRFormula = null; // null or formula - // XPPenalty can't be boolean, because null has a meaning. - // Null means use the default (look for the types on class types) /* - * STRINGREFACTOR Make this an enumeration, so that string processing is not - * done. - * - * XPPenalty can't be boolean, because null has a meaning. Null means use - * the default (look for the types on class types). Should I dig out my - * TriState class?? - */ - /* * REFACTOR This gets really strange since this is part of a calculation * based on differences between class levels. The question is: Is there a * much more efficient way to do this calculation (it's in @@ -385,7 +367,7 @@ * PlayerCharacter. Perhaps this is best to dump into all PCClassLevels for * safety? I really hate to get into that mode. */ - private String XPPenalty = null; // Valid values are null, "YES", "NO" + private DefaultTriState XPPenalty = DefaultTriState.DEFAULT; /* * ALLCLASSLEVELS The abbrev simply needs to be directly loaded into each @@ -1523,15 +1505,32 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public final List<String> getDomainList() { + /** + * Returns the Domains provided to a character up to and including + * the given level + * + * There is a contract on the users of getDomainList: If you take + * a Domain out of the List returned, you MUST clone the Domain or you + * can cause problems for PCClass. This is allowed for speed today and + * in the hopes that Domain and the PObjects become immutable soon :) + */ + public final List<Domain> getDomainList(int domainLevel) { if (domainList == null) { - final List<String> ret = Collections.emptyList(); - return Collections.unmodifiableList(ret); + final List<Domain> ret = Collections.emptyList(); + return ret; } - return Collections.unmodifiableList(domainList); + List<Domain> returnList = new ArrayList<Domain>(); + for (LevelProperty prop : domainList) + { + if (prop.getLevel() <= domainLevel) + { + returnList.add((Domain) prop.getObject()); + } + } + return returnList; } /* @@ -3279,22 +3278,15 @@ } /* - * STRINGREFACTOR currently this is passed in as a String, and should - * probably be processed in the tag (NOT in SpellProhibitor's constructor) - * and then passed in as a fully formed SpellProhibitor - */ - /* * PCCLASSANDLEVEL Since this is set in Level one of a PCClassLevel, it * will need to be present in the PCClass (to handle import from the Tag) * and PCClassLevel */ - public void setProhibitSpell(String aString) { - SpellProhibitor aProhibitor = new SpellProhibitor(aString); - + public void setProhibitSpell(SpellProhibitor prohibitor) { if (prohibitSpellDescriptorList == null) { prohibitSpellDescriptorList = new ArrayList<SpellProhibitor>(); } - prohibitSpellDescriptorList.add(aProhibitor); + prohibitSpellDescriptorList.add(prohibitor); } /** @@ -4098,8 +4090,15 @@ "\tADDDOMAINS:", lineSep); } - buildPccText(pccTxt, getDomainList().iterator(), Constants.PIPE, - "\tDOMAIN:", lineSep); + if (domainList != null) + { + for (LevelProperty domainProp : domainList) + { + pccTxt.append(lineSep).append(domainProp.getLevel()); + pccTxt.append("\tDOMAIN:").append( + domainProp.getObject().getKeyName()); + } + } buildPccText(pccTxt, getFeatList().iterator(), ":", "\tFEAT:", lineSep); @@ -4199,7 +4198,7 @@ return super.getVision(); } - public void setXPPenalty(final String argXPPenalty) { + public void setXPPenalty(final DefaultTriState argXPPenalty) { XPPenalty = argXPPenalty; } @@ -4264,11 +4263,11 @@ * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public void addDomainList(final String domainItem) { + public void addDomain(final Domain domain, int domainLevel) { if (domainList == null) { - domainList = new ArrayList<String>(); + domainList = new ArrayList<LevelProperty>(); } - domainList.add(domainItem); + domainList.add(new LevelProperty(domainLevel, domain)); } /* @@ -4806,7 +4805,8 @@ // aClass.ageSet = ageSet; if (domainList != null) { - aClass.domainList = new ArrayList<String>(domainList); + //This is ok as a shallow copy - contract on readers of domainList + aClass.domainList = new ArrayList<LevelProperty>(domainList); } if (addDomains != null) { aClass.addDomains = new ArrayList<String>(addDomains); @@ -5075,22 +5075,19 @@ * interact with a PlayerCharacter being reimported if those rules change? */ public boolean hasXPPenalty() { - String wXPPenalty = "YES"; + if (XPPenalty.equals(DefaultTriState.DEFAULT)) + { + for (String type : getSafeListFor(ListKey.TYPE)) { + final ClassType aClassType = SettingsHandler.getGame() + .getClassTypeByName(type); - if (XPPenalty != null) { - return "YES".equals(XPPenalty); - } - - for (String type : getSafeListFor(ListKey.TYPE)) { - final ClassType aClassType = SettingsHandler.getGame() - .getClassTypeByName(type); - - if ((aClassType != null) && !aClassType.getXPPenalty()) { - wXPPenalty = "NO"; + if ((aClassType != null) && !aClassType.getXPPenalty()) { + return false; + } } + return true; } - - return "YES".equals(wXPPenalty); + return XPPenalty.booleanValue(); } /* @@ -5439,71 +5436,21 @@ * PlayerCharacter... */ public boolean isProhibited(final Spell aSpell, final PlayerCharacter aPC) { - final StringTokenizer aTok = new StringTokenizer(prohibitedString, ",", - false); - if (!PrereqHandler.passesAll(aSpell.getPreReqList(), aPC, this)) { return true; } if (prohibitSpellDescriptorList != null) { for (SpellProhibitor prohibit : prohibitSpellDescriptorList) { - if (PrereqHandler - .passesAll(prohibit.getPrereqList(), aPC, null)) { - /* - * CONSIDER Should this Globals Check be outside this IF in - * such a way as to do NONE of the three types of - * prohibitor? This seems inconsistent? - */ - - /* - * CONSIDER This seems inappropriate to have this processing - * HERE in PCClass, rather than in the SpellProhibitor, and - * hiding the internal functionality from other people. I - * don't CARE how it was rejected, just do it... right?? - */ - if (prohibit.getType() == SpellProhibitor.TYPE_ALIGNMENT - && Globals.checkRule(RuleConstants.PROHIBITSPELLS)) { - int hits = 0; - for (String desc : aSpell.getDescriptorList()) { - for (String prohib : prohibit.getValueList()) { - if (prohib.equals(desc.toUpperCase())) { - hits++; - } - } - } - if (hits == prohibit.getValueList().size()) { - return true; - } - } else if (prohibit.getType() == SpellProhibitor.TYPE_DESCRIPTOR) { - int hits = 0; - for (String desc : aSpell.getDescriptorList()) { - for (String prohib : prohibit.getValueList()) { - if (prohib.equals(desc.toUpperCase())) { - hits++; - } - } - } - if (hits == prohibit.getValueList().size()) { - return true; - } - } else if (prohibit.getType() == SpellProhibitor.TYPE_SCHOOL) { - int hits = 0; - for (String desc : aSpell.getSchools()) { - for (String prohib : prohibit.getValueList()) { - if (prohib.equals(desc.toUpperCase())) { - hits++; - } - } - } - if (hits == prohibit.getValueList().size()) { - return true; - } - } + if (prohibit.isProhibited(aSpell, aPC)) { + return true; } } } + final StringTokenizer aTok = new StringTokenizer(prohibitedString, ",", + false); + while (aTok.hasMoreTokens()) { final String a = aTok.nextToken(); @@ -5515,7 +5462,7 @@ return false; } - + /** * Get the unarmed Damage for this class at the given level. * @@ -7380,80 +7327,38 @@ return; } - int c = 2; + /* + * Note this uses ALL of the domains up to and including this level, + * because there is the possibility (albeit strange) that the PC was not + * qualified at a previous level change, but the PlayerCharacter is now + * qualified for the given Domain. Even this has quirks, since it is + * only applied at the time of level increase, but I think that quirk + * should be resolved by a CDOM system around 6.0 - thpr 10/23/06 + */ + for (final Domain dom : getDomainList(aLevel)) { + if (dom.qualifies(aPC)) + { + String domKey = dom.getKeyName(); + if (adding) + { + if (!aPC.containsCharacterDomain(domKey)) + { + Domain aDomain = dom.clone(); - if (aLevel > 9) { - c = 3; - } - - if (getDomainList().isEmpty()) { - return; - } - - for (final String domainKey : getDomainList()) { - final StringTokenizer aTok = new StringTokenizer(domainKey, "|"); - final int bLevel = Integer.parseInt(aTok.nextToken()); - int d = c; - - if (aLevel == bLevel) { - final StringTokenizer bTok = new StringTokenizer(domainKey - .substring(c), "[]|", true); - boolean addNow = true; - String subKey = ""; - boolean inPreReqs = false; - - while (bTok.hasMoreTokens()) { - final String bString = bTok.nextToken(); - - if (!inPreReqs && !"[".equals(bString) - && !"|".equals(bString)) { - subKey = bString; + final CharacterDomain aCD = aPC + .getNewCharacterDomain(getKeyName()); + aCD.setDomain(aDomain, aPC); + aPC.addCharacterDomain(aCD); + aDomain = aCD.getDomain(); + aDomain.setIsLocked(true, aPC); } - - d += bString.length(); - - if (bTok.hasMoreTokens()) { - if ("[".equals(domainKey.substring(d, d + 1))) { - addNow = false; - } - } else { - addNow = true; + } + else + { + if (aPC.containsCharacterDomain(domKey)) + { + aPC.removeCharacterDomain(domKey); } - - if ("[".equals(bString)) { - inPreReqs = true; - } else if ("]".equals(bString)) { // this ends a PRExxx - // tag so next time - // through we can add - // name - addNow = true; - inPreReqs = false; - } - - if (addNow && !adding) { - final int l = aPC.getCharacterDomainIndex(subKey); - - if (l > -1) { - aPC.removeCharacterDomain(subKey); - } - } else if (adding && addNow && (subKey.length() > 0)) { - if (aPC.getCharacterDomainIndex(subKey) == -1) { - Domain aDomain = Globals.getDomainKeyed(subKey); - - if (aDomain != null) { - aDomain = (Domain) aDomain.clone(); - - final CharacterDomain aCD = aPC - .getNewCharacterDomain(getKeyName()); - aCD.setDomain(aDomain, aPC); - aPC.addCharacterDomain(aCD); - aDomain = aCD.getDomain(); - aDomain.setIsLocked(true, aPC); - } - } - - subKey = ""; - } } } } Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -10357,11 +10357,30 @@ // } /** + * Returns true if this PlayerCharacter contains a Domain with a key that + * matches the given Domain + */ + public boolean containsCharacterDomain(String aDomainKey) + { + for (CharacterDomain cd : characterDomainList) + { + Domain d = cd.getDomain(); + if (d.getKeyName().equalsIgnoreCase(aDomainKey)) + { + return true; + } + } + return false; + } + + /** * return the index of CharacterDomain matching domainName * else return -1 * @param domainName * @return character domain index + * @deprecated 10/21/06 thpr as part of PCClass rebuilding */ + @Deprecated public int getCharacterDomainIndex(final String domainKey) { for (int i = 0; i < characterDomainList.size(); ++i) Modified: Trunk/pcgen/code/src/java/pcgen/core/SpellProhibitor.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpellProhibitor.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/core/SpellProhibitor.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -25,14 +25,13 @@ */ package pcgen.core; +import pcgen.core.prereq.PrereqHandler; import pcgen.core.prereq.Prerequisite; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.prereq.PreParserFactory; -import pcgen.util.Logging; +import pcgen.core.spell.Spell; +import pcgen.util.enumeration.ProhibitedSpellType; import java.util.ArrayList; import java.util.List; -import java.util.StringTokenizer; /** * @author stefan @@ -42,76 +41,13 @@ */ public class SpellProhibitor { - public static final String[] typeTags = - { - "ALIGNMENT", - "DESCRIPTOR", - "SCHOOL" - }; - public final static int TYPE_UNDEFINED = -1; - public final static int TYPE_ALIGNMENT = 0; - public final static int TYPE_DESCRIPTOR = 1; - public final static int TYPE_SCHOOL = 2; - - private int type = TYPE_UNDEFINED; + private ProhibitedSpellType type = null; private List<String> valueList = null; private List<Prerequisite> prereqList = null; - public SpellProhibitor(String prohibitString) + public SpellProhibitor() { - final StringTokenizer aTok = new StringTokenizer(prohibitString, "|", false); - - while (aTok.hasMoreTokens()) - { - final String aString = aTok.nextToken().toUpperCase(); - - if (aString.startsWith("!PRE") || aString.startsWith("PRE")) - { - try - { - final PreParserFactory factory = PreParserFactory.getInstance(); - addPreReq(factory.parse(aString) ); - } - catch (PersistenceLayerException ple) - { - Logging.errorPrint(ple.getMessage(), ple); - } - } - else - { - final StringTokenizer elements = new StringTokenizer(aString, ".", false); - final String aType = elements.nextToken(); - - for (int idx = 0; idx < typeTags.length; idx++) - { - if (typeTags[idx].equals(aType)) - { - type = idx; - while (elements.hasMoreTokens()) - { - String aValue = elements.nextToken(); - if (type == TYPE_ALIGNMENT && (! aValue.equals("GOOD")) && (! aValue.equals("EVIL")) && - (! aValue.equals("LAWFUL")) && (! aValue.equals("CHAOTIC"))) - { - Logging.errorPrint("Illegal PROHIBITSPELL:ALIGNMENT subtag '" + aValue + "'"); - } - else - { - if (valueList == null) - { - valueList = new ArrayList<String>(); - } - valueList.add(aValue); - } - } - } - } - if (type == TYPE_UNDEFINED) - { - Logging.errorPrint("Illegal PROHIBITSPELL subtag '" + aString + "'"); - } - } - } + //Empty Construtor } public void addPreReq(final Prerequisite prereq) @@ -132,7 +68,7 @@ return prereqList; } - public int getType() + public ProhibitedSpellType getType() { return type; } @@ -141,4 +77,52 @@ { return valueList; } + + public void setType(ProhibitedSpellType prohibitedType) + { + type = prohibitedType; + } + + public void addValue(String value) + { + if (valueList == null) + { + valueList = new ArrayList<String>(); + } + valueList.add(value); + } + + public boolean isProhibited(Spell s, PlayerCharacter aPC) + { + /* + * Note the rule is only "Prohibit Cleric/Druid spells based on + * Alignment" - thus this Globals check is only relevant to the + * Alignment type + */ + if (type.equals(ProhibitedSpellType.ALIGNMENT) + && !Globals.checkRule(RuleConstants.PROHIBITSPELLS)) + { + return false; + } + + if (prereqList != null && !PrereqHandler.passesAll(prereqList, aPC, null)) + { + return false; + } + + int hits = 0; + + for (String typeDesc : type.getCheckList(s)) + { + for (String prohib : valueList) + { + if (prohib.equalsIgnoreCase(typeDesc)) + { + hits++; + } + } + } + + return hits == valueList.size(); + } } Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -373,7 +373,7 @@ { final String domainKey = (String) i.next(); - if (aPC.getCharacterDomainIndex(domainKey) == -1) + if (!aPC.containsCharacterDomain(domainKey)) { Domain aDom = Globals.getDomainKeyed(domainKey); @@ -382,7 +382,7 @@ continue; } - aDom = (Domain) aDom.clone(); + aDom = aDom.clone(); final CharacterDomain aCD = aPC.getNewCharacterDomain( classKey); Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -448,7 +448,7 @@ { for (Domain aDomain : pcDeity.getDomainList()) { - aDomain = (Domain) aDomain.clone(); + aDomain = aDomain.clone(); if (!availDomainList.contains(aDomain)) { @@ -475,7 +475,7 @@ if (prestigeDomain != null) { - prestigeDomain = (Domain) prestigeDomain.clone(); + prestigeDomain = prestigeDomain.clone(); } if (!availDomainList.contains(prestigeDomain)) @@ -486,29 +486,17 @@ } } - for (String prestigeString : aClass.getDomainList()) + for (Domain prestigeDomain : aClass.getDomainList(aClass.getLevel())) { - final StringTokenizer domainTok = new StringTokenizer(prestigeString, "|", false); - - final int level = Integer.parseInt(domainTok.nextToken()); - - if (aClass.getLevel() >= level) + //CONSIDER Should this be gated by null? - thpr 10/23/06 + if (prestigeDomain != null) { - while (domainTok.hasMoreTokens()) - { - final String prestigeKey = domainTok.nextToken(); - Domain prestigeDomain = Globals.getDomainKeyed(prestigeKey); + prestigeDomain = prestigeDomain.clone(); + } - if (prestigeDomain != null) - { - prestigeDomain = (Domain) prestigeDomain.clone(); - } - - if (!availDomainList.contains(prestigeDomain)) - { - availDomainList.add(prestigeDomain); - } - } + if (!availDomainList.contains(prestigeDomain)) + { + availDomainList.add(prestigeDomain); } } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -434,8 +434,8 @@ featLoader.loadLstFiles(featFileList); raceLoader.loadLstFiles(raceFileList); + domainLoader.loadLstFiles(domainFileList); classLoader.loadLstFiles(classFileList); - domainLoader.loadLstFiles(domainFileList); deityLoader.loadLstFiles(deityFileList); spellLoader.loadLstFiles(spellFileList); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreMultParser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreMultParser.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreMultParser.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -63,9 +63,9 @@ } // [PREARMORPROF:1,TYPE.Medium],[PREFEAT:1,Armor Proficiency (Medium)] + PreParserFactory parser = PreParserFactory.getInstance(); for (String s : splitOnTopLevelToken(formula, '[', ']')) { - PreParser parser = new PreParser(); prereq.addPrerequisite(parser.parse(s)); } Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParser.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParser.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -1,44 +0,0 @@ -/* - * PreParser.java - * - * Copyright 2003 (C) Chris Ward <fr...@pu...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on 18-Dec-2003 - * - * Current Ver: $Revision$ - * - * Last Editor: $Author$ - * - * Last Edited: $Date$ - * - */ -package pcgen.persistence.lst.prereq; - -import pcgen.core.prereq.Prerequisite; -import pcgen.persistence.PersistenceLayerException; - -/** - * @author wardc - * - */ -public class PreParser -{ - public Prerequisite parse(String input) throws PersistenceLayerException - { - return PreParserFactory.getInstance().parse(input); - } -} Added: Trunk/pcgen/code/src/java/pcgen/util/enumeration/DefaultTriState.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/enumeration/DefaultTriState.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/enumeration/DefaultTriState.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -0,0 +1,15 @@ +package pcgen.util.enumeration; + +public enum DefaultTriState { + YES { public boolean booleanValue() { return true; } }, + + NO { public boolean booleanValue() { return false; } }, + + DEFAULT { public boolean booleanValue() { throw new IllegalResolutionException(); } }; + + public abstract boolean booleanValue(); + + public static class IllegalResolutionException extends RuntimeException { + //Just use the defaults + } +} Added: Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -0,0 +1,27 @@ +package pcgen.util.enumeration; + +import java.util.Collection; +import pcgen.core.spell.Spell; + +public enum ProhibitedSpellType { + + ALIGNMENT("Alignment") { public Collection<String>getCheckList(Spell s) { return s.getDescriptorList(); }}, + + DESCRIPTOR("Descriptor") { public Collection<String>getCheckList(Spell s) { return s.getDescriptorList(); }}, + + SCHOOL("Export") { public Collection<String>getCheckList(Spell s) { return s.getSchools(); }}; + + private final String text; + + ProhibitedSpellType(String s) + { + text = s; + } + + public abstract Collection<String> getCheckList(Spell s); + + public String toString() + { + return text; + } +} Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -1,8 +1,14 @@ package plugin.lsttokens.pcclass; +import java.util.StringTokenizer; + +import pcgen.core.Domain; +import pcgen.core.Globals; import pcgen.core.PCClass; -import pcgen.persistence.lst.PCClassLoader; +import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.PCClassLstToken; +import pcgen.persistence.lst.prereq.PreParserFactory; +import pcgen.util.Logging; /** * Class deals with DOMAIN Token @@ -14,7 +20,52 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.addDomainList(PCClassLoader.fixParameter(level, value)); + final StringTokenizer aTok = new StringTokenizer(value, "|"); + + while (aTok.hasMoreTokens()) + { + final String aString = aTok.nextToken(); + String domainKey; + String prereq = null; //Do not initialize, null is significant! + + //Note: May contain PRExxx + if (aString.indexOf("[") == -1) + { + domainKey = aString; + } + else + { + int openBracketLoc = aString.indexOf("["); + domainKey = aString.substring(0, openBracketLoc); + if (!aString.endsWith("]")) + { + Logging.errorPrint("Unresolved Prerequisite on Domain " + + aString + " in " + getTokenName()); + } + prereq = aString.substring(openBracketLoc + 1, + aString.length() - openBracketLoc - 2); + } + + Domain thisDomain = Globals.getDomainKeyed(domainKey); + + if (thisDomain == null) { + Logging.errorPrint("Unresolved Domain " + domainKey + " in " + + getTokenName()); + } else { + Domain clonedDomain = thisDomain.clone(); + if (prereq != null) + { + try { + clonedDomain.addPreReq(PreParserFactory.getInstance().parse(prereq)); + } catch (PersistenceLayerException e) { + Logging.errorPrint("Error generating Prerequisite " + + prereq + " in " + getTokenName()); + } + } + pcclass.addDomain(clonedDomain, level); + } + } + return true; } } \ No newline at end of file Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -1,7 +1,15 @@ package plugin.lsttokens.pcclass; +import java.util.ArrayList; +import java.util.StringTokenizer; + import pcgen.core.PCClass; +import pcgen.core.SpellProhibitor; +import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.PCClassLstToken; +import pcgen.persistence.lst.prereq.PreParserFactory; +import pcgen.util.Logging; +import pcgen.util.enumeration.ProhibitedSpellType; /** * Class deals with PROHIBITSPELL Token @@ -13,7 +21,61 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setProhibitSpell(value); + final StringTokenizer aTok = new StringTokenizer(value, "|", false); + + SpellProhibitor spellProb = new SpellProhibitor(); + + while (aTok.hasMoreTokens()) + { + final String aString = aTok.nextToken().toUpperCase(); + + if (aString.startsWith("!PRE") || aString.startsWith("PRE")) + { + try + { + final PreParserFactory factory = PreParserFactory.getInstance(); + spellProb.addPreReq(factory.parse(aString) ); + } + catch (PersistenceLayerException ple) + { + Logging.errorPrint(ple.getMessage(), ple); + } + } + else + { + final StringTokenizer elements = new StringTokenizer(aString, ".", false); + final String aType = elements.nextToken(); + + for (ProhibitedSpellType type : ProhibitedSpellType.values()) + { + if (type.toString().equalsIgnoreCase(aType)) + { + spellProb.setType(type); + while (elements.hasMoreTokens()) + { + String aValue = elements.nextToken(); + if (type.equals(ProhibitedSpellType.ALIGNMENT) + && (!aValue.equals("GOOD")) + && (!aValue.equals("EVIL")) + && (!aValue.equals("LAWFUL")) + && (!aValue.equals("CHAOTIC"))) + { + Logging.errorPrint("Illegal PROHIBITSPELL:ALIGNMENT subtag '" + aValue + "'"); + } + else + { + spellProb.addValue(aValue); + } + } + } + } + if (spellProb.getType() == null) + { + Logging.errorPrint("Illegal PROHIBITSPELL subtag '" + aString + "'"); + } + } + } + pcclass.setProhibitSpell(spellProb); return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/XppenaltyToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/XppenaltyToken.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/XppenaltyToken.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -2,6 +2,7 @@ import pcgen.core.PCClass; import pcgen.persistence.lst.PCClassLstToken; +import pcgen.util.enumeration.DefaultTriState; /** * Class deals with XPPENALTY Token @@ -25,7 +26,7 @@ * @return true */ public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setXPPenalty(value); + pcclass.setXPPenalty(DefaultTriState.valueOf(value)); return true; } } Modified: Trunk/pcgen/code/src/test/pcgen/persistence/lst/output/prereq/PrerequisiteWriterTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/persistence/lst/output/prereq/PrerequisiteWriterTest.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/test/pcgen/persistence/lst/output/prereq/PrerequisiteWriterTest.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -44,7 +44,7 @@ import pcgen.core.SystemCollections; import pcgen.core.prereq.Prerequisite; import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.prereq.PreParser; +import pcgen.persistence.lst.prereq.PreParserFactory; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -481,14 +481,12 @@ */ private void PreTest(final String aPreString, final String expectedOutput) { - PreParser parser = new PreParser(); - Prerequisite prereq = null; boolean bExceptionThrown = false; boolean bExceptionExpected = (expectedOutput.length() == 0); try { - prereq = parser.parse(aPreString); + prereq = PreParserFactory.getInstance().parse(aPreString); } catch (PersistenceLayerException ple) { Modified: Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreStatParserTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreStatParserTest.java 2006-10-24 21:07:28 UTC (rev 1521) +++ Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreStatParserTest.java 2006-10-24 22:40:09 UTC (rev 1522) @@ -89,7 +89,7 @@ */ public void testDex9a() throws Exception { - PreParser parser = new PreParser(); + PreParserFactory parser = PreParserFactory.getInstance(); Prerequisite prereq = parser.parse("PRESTAT:1,DEX=9"); System.out.println(prereq); assertEquals("<prereq kind=\"stat\" key=\"DEX\" operator=\"gteq\" operand=\"9\" >\n" + "</prereq>\n", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-10-26 03:11:11
|
Revision: 1530 http://svn.sourceforge.net/pcgen/?rev=1530&view=rev Author: thpr Date: 2006-10-25 20:10:42 -0700 (Wed, 25 Oct 2006) Log Message: ----------- Part of 1460794: Remove token processing from core Removes Global VISION: tag to VisionLst Removes PCClass ADDDOMAINS: tag to AdddomainsToken Typesafe Enumeration Project: Adds AbstractConstant (this is a Serializable safe Java 1.4 TypeSafe Enumeration Class) To be used for expandable TypeSafe classes (e.g. VisionType) Creates a Vision Object Required change in PreVisionTest construction of Vision Makes VisionType TypeSafe Makes PCClass.addDomains use Domain rather than Strings Remove Vision Map from Globals - redundant to VisionType Class Other: Delete VisionToken.getVisionToken() as the intent reproduces List.subList() Deprecate VISION:2,* VISION:0,* and (I'm guessing?) VISION:1,* formats (use .CLEAR. and .SET.) Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/Race.java Trunk/pcgen/code/src/java/pcgen/core/VariableProcessorPC.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/pcgen/gui/editor/VisionPanel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/VisionLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/AdddomainsToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreVisionTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/core/Vision.java Trunk/pcgen/code/src/java/pcgen/util/enumeration/AbstractConstant.java Trunk/pcgen/code/src/java/pcgen/util/enumeration/VisionType.java Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -62,6 +62,7 @@ import pcgen.util.enumeration.Load; import pcgen.util.enumeration.Tab; import pcgen.util.enumeration.Visibility; +import pcgen.util.enumeration.VisionType; import pcgen.util.PropertyFactory; /** @@ -117,7 +118,6 @@ private static SortedMap<String, Race> raceMap = new TreeMap<String, Race>(); private static Map<String, Object> spellMap = new TreeMap<String, Object>(); private static Map<String, String> eqSlotMap = new HashMap<String, String>(); - private static Map<String, String> visionMap = new HashMap<String, String>(); private static Map<String, List<CompanionMod>> companionModMap = new TreeMap<String, List<CompanionMod>>(); /** We use lists for efficient iteration */ @@ -2003,15 +2003,6 @@ } /** - * Get map of VISIONs - * @return map of VISIONs - */ - public static Map<String, String> getVisionMap() - { - return visionMap; - } - - /** * Get copy of weapon prof array * @return copy of weapon prof array */ @@ -2412,7 +2403,7 @@ domainMap = new HashMap<String, Domain>(); raceMap = new TreeMap<String, Race>(); spellMap = new HashMap<String, Object>(); - visionMap = new HashMap<String, String>(); + VisionType.clearConstants(); // Clear Sets (not strictly necessary, but done for consistency) clearSpellSets(); @@ -2577,15 +2568,6 @@ } /** - * Store a list of all vision types (such as Darkvision) - * @param aKey - */ - public static void putVisionMap(final String aKey) - { - visionMap.put(aKey, "0"); - } - - /** * Remove a weapon prof by key * @param name */ Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -53,6 +53,7 @@ import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.DefaultTriState; +import pcgen.util.enumeration.VisionType; /** * <code>PCClass</code>. @@ -183,7 +184,7 @@ * ALLCLASSLEVELS Since this seems to allow for class dependent additions of * Domains, this needs to occur in each class level as appropriate. */ - private ArrayList<String> addDomains = null; + private ArrayList<LevelProperty<Domain>> addDomains = null; /* * ALLCLASSLEVELS This is pretty obvious, as these are already in a @@ -311,15 +312,10 @@ // really working properly /* - * TYPESAFETY The VisionList should be something other than String! There - * should probably be a Typesafe Enumeration of Vision Types. This would - * then be stored in a VisionMap with the value being the vision distance. - */ - /* * ALLCLASSLEVELS The Vision List is level dependent - heck, it's in a * LevelProperty, so that should be pretty obvious :) */ - private List<LevelProperty<String>> visionList = null; + private List<LevelProperty<Vision>> visionList = null; /* * STRINGREFACTOR Need to rebuild this String into a List<Integer> @@ -909,24 +905,36 @@ /** * Returns the list of domains that this class grants access to. * - * <p> - * The list returned actually consists of a level|domainkey|domainkey - * series. - * <p> - * TODO - Fix this. - * - * @return List of strings representing additional domain choices for this - * class. + * @return List of Domain choices for this class. */ /* * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public final List<String> getAddDomains() { + public final List<Domain> getAddDomains(int domainLevel) { if (addDomains == null) { - final List<String> ret = Collections.emptyList(); + final List<Domain> ret = Collections.emptyList(); return Collections.unmodifiableList(ret); } + List<Domain> returnList = new ArrayList<Domain>(); + for (LevelProperty<Domain> prop : addDomains) + { + if (prop.getLevel() <= domainLevel) + { + returnList.add(prop.getObject()); + } + } + return returnList; + } + + /* + * PCCLASSONLY This is only for editing of a PCClass; therefore + * not required for a PCClassLevel + */ + public List<LevelProperty<Domain>> getAddDomains() { + if (addDomains == null) { + return null; + } return Collections.unmodifiableList(addDomains); } @@ -1857,34 +1865,15 @@ specialtyList.add(aSpecialty); } - /** - * - * @param level - * @param aString - * <p> - * TODO - Fix this to not store level|key. Ideally should store a - * <tt>LevelProperty</tt> object with a <tt>Domain</tt> - * reference. - */ /* - * STRINGREFACTOR This needs to store a LevelProperty object that contains a - * Domain, NOT a String, especially a | delimited String... !! - */ - /* - * TYPESAFETY should also be introduced by String refactoring from - * domainList - */ - /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method (of course, a level independent version for PCClassLevel */ - public void addAddDomain(final int level, final String aString) { - final String prefix = Integer.toString(level) + Constants.PIPE; - + public void addAddDomain(final int aLevel, final Domain aDomain) { if (addDomains == null) { - addDomains = new ArrayList<String>(); + addDomains = new ArrayList<LevelProperty<Domain>>(); } - addDomains.add(prefix + aString); + addDomains.add(LevelProperty.getLevelProperty(aLevel, aDomain)); } /* @@ -3301,42 +3290,43 @@ * @param aPC */ /* - * REFACTOR The PlayerCharacter here is NEVER used in production code, only - * test code - that is bad behavior, and thus the reference to - * PlayerCharacter in this method should be removed from both PCClass and - * PObject - */ - /* * PCCLASSANDLEVEL This is required in PCClassLevel PCClass since it is * a Tag [with level dependence differences, of course) */ - public final void setVision(final String aString, final PlayerCharacter aPC) { - /* - * STRINGREFACTOR This can be refactored out of PCClass and put into the - * VISION tag. Then the tag needs to build the visionMap (below) and - * properly load that map into PCClass. - */ - // Class based vision lines are of the form: - // 1|Darkvision(60'),Lowlight - if (".CLEAR".equals(aString)) { - visionList = null; - - return; + public final void addVision(int aLevel, Vision vis) { + if (visionList == null) { + visionList = new ArrayList<LevelProperty<Vision>>(); } + visionList.add(LevelProperty.getLevelProperty(aLevel, vis)); + } - final StringTokenizer aTok = new StringTokenizer(aString, - Constants.PIPE, false); - final int lvl = Integer.parseInt(aTok.nextToken()); - final String newString = aString.substring(aString - .indexOf(Constants.PIPE) + 1); - + /* + * PCCLASSONLY This is an editor and loader requirement, therefore + * PCClass only + */ + public void clearVisionList() { + if (visionList != null) + { + visionList.clear(); + } + } + + /* + * PCCLASSONLY This is an editor and loader requirement, therefore + * PCClass only + */ + public boolean removeVisionType(VisionType type) { if (visionList == null) { - visionList = new ArrayList<LevelProperty<String>>(); + return false; } - - visionList.add(LevelProperty.getLevelProperty(lvl, newString)); + for (LevelProperty<Vision> lp : visionList) { + if (lp.getObject().getType().equals(type)) { + return visionList.remove(lp); + } + } + return false; } - + /* * PCCLASSLEVELONLY This calculation is dependent upon the class level * and is therefore appropriate only for PCClassLevel @@ -4060,18 +4050,23 @@ } } - if ((addDomains != null) && (addDomains.size() != 0)) { - buildPccText(pccTxt, addDomains.iterator(), Constants.PIPE, - "\tADDDOMAINS:", lineSep); + if (addDomains != null) + { + for (LevelProperty<Domain> domainLP : addDomains) + { + pccTxt.append(lineSep).append(domainLP.getLevel()); + pccTxt.append("\tADDDOMAINS:").append( + domainLP.getObject().getKeyName()); + } } if (domainList != null) { - for (LevelProperty<Domain> domainProp : domainList) + for (LevelProperty<Domain> domainLP : domainList) { - pccTxt.append(lineSep).append(domainProp.getLevel()); + pccTxt.append(lineSep).append(domainLP.getLevel()); pccTxt.append("\tDOMAIN:").append( - domainProp.getObject().getKeyName()); + domainLP.getObject().getKeyName()); } } @@ -4164,16 +4159,17 @@ * differences, of course] */ @Override - public Map<String, String> getVision(final PlayerCharacter aPC) { + public List<Vision> getVision() { + List<Vision> returnList = super.getVision(); if (visionList != null) { - for (LevelProperty<String> vis : visionList) { + for (LevelProperty<Vision> vis : visionList) { if (vis.getLevel() <= level) { - super.setVision(vis.getObject(), aPC); + returnList.add(vis.getObject()); } } } - return super.getVision(aPC); + return returnList; } public void setXPPenalty(final DefaultTriState argXPPenalty) { @@ -4787,7 +4783,8 @@ aClass.domainList = new ArrayList<LevelProperty<Domain>>(domainList); } if (addDomains != null) { - aClass.addDomains = new ArrayList<String>(addDomains); + //This is ok as a shallow copy - contract on readers of domainList + aClass.addDomains = new ArrayList<LevelProperty<Domain>>(addDomains); } aClass.setHitPointMap(this); aClass.hasSubClass = hasSubClass; Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -67,6 +67,7 @@ import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.Load; import pcgen.util.enumeration.Visibility; +import pcgen.util.enumeration.VisionType; /** * <code>PObject</code><br> @@ -104,7 +105,7 @@ * A map of vision types associated with the object, * Key: vision type, Value: vision range. */ - protected Map<String, String> vision = null; + protected List<Vision> vision = null; private HashMap<String, String> pluginDataMap = new HashMap<String, String>(); /** The Non-internationalized name to use to refer to this object. */ @@ -1171,134 +1172,40 @@ * @param aString * @param aPC */ - public void setVision(final String aString, final PlayerCharacter aPC) + public void addVision(Vision v) { - final StringTokenizer aTok = new StringTokenizer(aString, "|"); - - while (aTok.hasMoreTokens()) + //CONSIDER Need null check? + if (vision == null) { + vision = new ArrayList<Vision>(); + } + vision.add(v); + } + + public void clearVisionList() { + if (vision != null) { - final String bString = aTok.nextToken(); - - // This is a hack to fix a specific bug. It is - // unintelligent. FIXME XXX - if (".CLEAR".equals(bString)) - { - vision = null; - - continue; + vision.clear(); + } + } + + public boolean removeVisionType(VisionType type) { + if (vision == null) { + return false; + } + for (Vision vis : vision) { + if (vis.getType().equals(type)) { + return vision.remove(vis); } - - final String cString; - String dString; - - if (bString.indexOf(',') < 0) - { - cString = bString; - dString = bString; - } - else - { - final StringTokenizer bTok = new StringTokenizer(bString, ","); - cString = bTok.nextToken(); - dString = bTok.nextToken(); - } - - if (cString.startsWith(".CLEAR.") || "2".equals(cString)) - { - if (vision == null) - { - continue; - } - - if (cString.startsWith(".CLEAR.")) - { - // Strip off the .CLEAR. - dString = dString.substring(7); - } - - final Object aKey = vision.get(dString); - - if (aKey != null) - { - vision.remove(dString); - } - } - else if (cString.startsWith(".SET.") || "0".equals(cString)) - { - if (vision == null) - { - vision = new HashMap<String, String>(); - } - - vision.clear(); - - if (cString.startsWith(".SET.")) - { - // Strip off the .SET. - dString = dString.substring(5); - } - - // expecting value in form of Darkvision (60') - final StringTokenizer cTok = new StringTokenizer(dString, "(')"); - final String aKey = cTok.nextToken().trim(); // e.g. Darkvision - final String aVal = cTok.nextToken(); // e.g. 60 - vision.put(aKey, aVal); - } - else - { - if (vision == null) - { - vision = new HashMap<String, String>(); - } - - // expecting value in form of: Darkvision (60') - final StringTokenizer cTok = new StringTokenizer(dString, "(')"); - final String aKey = cTok.nextToken().trim(); // e.g. Darkvision - Globals.putVisionMap(aKey); - - String aVal = "0"; - - if (cTok.hasMoreTokens()) - { - aVal = cTok.nextToken(); // e.g. 60 - } - - final Object bObj = vision.get(aKey); - - if (bObj == null) - { - vision.put(aKey, aVal); - } - else - { - if (aPC != null) - { - final int b = aPC.getVariableValue(bObj.toString(), "").intValue(); - - if (b < aPC.getVariableValue(aVal, "").intValue()) - { - vision.put(aKey, aVal); - } - } - else - { - vision.put(aKey, aVal); - } - } - } } + return false; } /** * Retrieve the vision types associated with the object. - * Key: vision type, Value: vision range. * - * add PlayerCharacter argument to allow PCClass to override - * - Tracker 1489300 - thpr 10/24/06 - * - * @return Map of the vision types associated with the object. + * @return List of Vision objects associated with the object. */ - public Map<String, String> getVision(final PlayerCharacter aPC) + public List<Vision> getVision() { return vision; } @@ -2988,19 +2895,15 @@ { final StringBuffer sb = new StringBuffer(); - for (String key : vision.keySet()) + for (Vision vis : vision) { - final String val = vision.get(key); - - if ((val.length() > 0) && !"0".equals(val)) + if (!"0".equals(vis.getDistance())) { if (sb.length() > 0) { sb.append('|'); } - - sb.append(key).append(" ("); - sb.append(val).append("')"); + sb.append(vis); } } Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -85,6 +85,7 @@ import pcgen.util.PropertyFactory; import pcgen.util.enumeration.Load; import pcgen.util.enumeration.Visibility; +import pcgen.util.enumeration.VisionType; /** * <code>PlayerCharacter</code>. @@ -6850,98 +6851,61 @@ } - private Map<String, String> getVisionMap() + public List<Vision> getVisionList() { - Map<String, String> visMap = new HashMap<String, String>(); + List<Vision> visionList = new ArrayList<Vision>(); for ( PObject pObj : getPObjectList() ) { if (pObj != null) { - visMap = addStringToVisionMap(visMap, pObj.getVision(this)); + visionList = addStringToVisionList(visionList, pObj.getVision()); } } // parse through the global list of vision tags and see // if this PC has any BONUS:VISION tags which will create // a new visionMap entry - for (String aKey : Globals.getVisionMap().keySet()) + for (VisionType vType : VisionType.getAllVisionTypes()) { - final int aVal = (int) getTotalBonusTo("VISION", aKey); + final int aVal = (int) getTotalBonusTo("VISION", vType.toString()); if (aVal > 0) { // add a 0 value, as the bonus is added // in the addStringToVisionMap() routine - final HashMap<String, String> newMap = new HashMap<String, String>(); - newMap.put(aKey, "0"); - visMap = addStringToVisionMap(visMap, newMap); + final List<Vision> newList = new ArrayList<Vision>(); + newList.add(new Vision(vType, "0")); + visionList = addStringToVisionList(visionList, newList); } } - return visMap; + + //CONSIDER Is this sort really necessary? + if (visionList.size() > 1) { + Collections.sort(visionList); + } + + return visionList; } public String getVision() { - final StringBuffer vision = new StringBuffer(); + final StringBuffer visionString = new StringBuffer(); - final Map<String, String> visMap = getVisionMap(); - for ( String aKey : visMap.keySet() ) + final List<Vision> visionList = getVisionList(); + for ( Vision vision : visionList ) { - final String bObj = visMap.get(aKey); - - if (bObj == null) + if (visionString.length() > 0) { - continue; + visionString.append(", "); } - - final int val = Integer.parseInt(bObj); - - if (vision.length() > 0) - { - vision.append(", "); - } - - vision.append(aKey); - - if (val > 0) - { - vision.append(" (").append(val).append("')"); - } + + visionString.append(vision); } - return vision.toString(); + return visionString.toString(); } - public TreeSet<String> getVisiontypeList() - { - final TreeSet<String> visions = new TreeSet<String>(); - - final Map<String, String> visMap = getVisionMap(); - for ( String aKey : visMap.keySet() ) - { - final String bObj = visMap.get(aKey); - - if (bObj == null) - { - continue; - } - - final int val = Integer.parseInt(bObj); - - final StringBuffer vision = new StringBuffer(); - vision.append(aKey); - - if (val > 0) - { - vision.append(" (").append(val).append("')"); - } - visions.add(vision.toString()); - } - - return visions; - } - public int abilityAC() { return calcACOfType("Ability"); @@ -11403,36 +11367,47 @@ * @param aMap * @return Map */ - private Map<String, String> addStringToVisionMap(final Map<String, String> visMap, final Map<String, String> aMap) + private List<Vision> addStringToVisionList(final List<Vision> visionList, final List<Vision> addList) { - if ((aMap == null) || (aMap.size() == 0)) + if ((addList == null) || (addList.size() == 0)) { - return visMap; + return visionList; } - for (String aKey : aMap.keySet()) + for (Vision vis : addList) { - final String aVal = aMap.get(aKey); - final String bObj = visMap.get(aKey); - int b = 0; - - if (bObj != null) + final VisionType visType = vis.getType(); + if (!vis.qualifies(this)) { + continue; + } + Vision foundVision = null; + for (Vision baseVis : visionList) { - b = getVariableValue(bObj, "").intValue(); + if (baseVis.getType() == visType) + { + foundVision = baseVis; + break; + } } - int a = getVariableValue(aVal, "").intValue(); - + int a = getVariableValue(vis.getDistance(), "").intValue(); // Add any bonuses to new value - a += (int) getTotalBonusTo("VISION", aKey); - - if (a >= b) + a += (int) getTotalBonusTo("VISION", visType.toString()); + + if (foundVision == null) { + visionList.add(new Vision(visType, String.valueOf(a))); + } + else { - visMap.put(aKey, String.valueOf(a)); + if (a > Integer.parseInt(foundVision.getDistance())) + { + visionList.remove(foundVision); + visionList.add(new Vision(visType, String.valueOf(a))); + } } } - return visMap; + return visionList; } Modified: Trunk/pcgen/code/src/java/pcgen/core/Race.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Race.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/core/Race.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.StringTokenizer; @@ -88,10 +87,6 @@ private ArrayList<String> racialSubTypes = new ArrayList<String>(); private Map<AbilityCategory, List<String>> theAutoAbilities; - { - vision = new HashMap<String, String>(); - } - /** * Sets this races advancement to not be limited. * @@ -172,28 +167,19 @@ return ""; } - final StringBuffer vis = new StringBuffer(25); + final StringBuffer visionString = new StringBuffer(25); - for (Iterator<String> i = vision.keySet().iterator(); i.hasNext();) + for (Vision vis : vision) { - final String aKey = i.next(); - final String aVal = vision.get(aKey); - final int val = aPC.getVariableValue(aVal, "").intValue(); - - if (vis.length() > 0) + if (visionString.length() > 0) { - vis.append(';'); + visionString.append(';'); } - vis.append(aKey); - - if (val != 0) - { - vis.append(" (").append(val).append("')"); - } + visionString.append(vis.toString(aPC)); } - return vis.toString(); + return visionString.toString(); } public void setFace(final double width, final double height) @@ -911,11 +897,6 @@ startingAC = anInt; } - public void setVisionTable(final Map<String, String> visionTable) - { - vision = visionTable; - } - public Object clone() { Race aRace = null; Modified: Trunk/pcgen/code/src/java/pcgen/core/VariableProcessorPC.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/VariableProcessorPC.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/core/VariableProcessorPC.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -1093,7 +1093,7 @@ } else if ("COUNT[VISION]".equals(valString)) { - valString = Integer.toString(getPc().getVisiontypeList().size()); + valString = Integer.toString(getPc().getVisionList().size()); } else if (valString.startsWith("COUNT[FOLLOWERTYPE.") && valString.endsWith("]")) { Added: Trunk/pcgen/code/src/java/pcgen/core/Vision.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Vision.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/core/Vision.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -0,0 +1,81 @@ +/* + * PCClass.java + * Copyright 2006 (C) Tom Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on October 25, 2006 + * + * $Id: PCClass.java 1526 2006-10-25 03:56:08Z thpr $ + */ +package pcgen.core; + +import pcgen.util.enumeration.VisionType; + +public class Vision extends PrereqObject implements Comparable<Vision> { + + private final VisionType visionType; + + private final String distance; + + public Vision(VisionType type, String dist) { + if (type == null) { + throw new IllegalArgumentException("Vision Type cannot be null"); + } + visionType = type; + distance = dist; + } + + public String getDistance() { + return distance; + } + + public VisionType getType() { + return visionType; + } + + public String toString() { + try { + return toString(Integer.parseInt(distance)); + } catch (NumberFormatException e) { + return visionType + " (" + distance + "')"; + } + } + + private String toString(int d) { + if (d <= 0) { + return visionType.toString(); + } else { + return visionType + " (" + d + "')"; + } + } + + public boolean equals(Vision v) { + return distance.equals(v.distance) && visionType.equals(v.visionType); + } + + public int hashCode() { + return distance.hashCode() ^ visionType.hashCode(); + } + + public String toString(PlayerCharacter aPC) { + return toString(aPC.getVariableValue(distance, "").intValue()); + } + + public int compareTo(Vision v) { + //CONSIDER This is potentially a slow method, but definitely works - thpr 10/26/06 + return toString().compareTo(v.toString()); + } +} Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -747,7 +747,14 @@ Movement cm = Movement.getMovementFrom(pnlMovement.getMoveValues()); cm.setMovementTypes(pnlMovement.getMoveTypes()); thisRace.setMovement(cm); - thisRace.setVisionTable(pnlVision.getVision()); + + thisRace.clearVisionList(); + List<Vision> visionList = pnlVision.getVision(); + for (Vision vis : visionList) + { + thisRace.addVision(vis); + } + thisRace.setNaturalWeapons(pnlNaturalAttacks.getNaturalWeapons()); pnlAppearance.updateData(thisPObject); pnlAge.updateData(thisPObject); @@ -1165,7 +1172,7 @@ List aList; List movementValues; List visionValues; - Map vision; + List<Vision> vision; List naturalAttacks; pnlMainTab.setNameText(thisPObject.getKeyName()); @@ -1531,22 +1538,18 @@ // // Populate the vision panel // - vision = thisPObject.getVision(null); + vision = thisPObject.getVision(); visionValues = new ArrayList(); if (vision != null) { - for (Iterator i = vision.keySet().iterator(); i.hasNext();) + for (Vision vis : vision) { - final StringBuffer vis = new StringBuffer(25); - final String aKey = i.next().toString(); - final String aVal = vision.get(aKey).toString(); - - vis.append(aKey); - vis.append(',').append(aVal); - - visionValues.add(vis.toString()); + final StringBuffer visionString = new StringBuffer(25); + visionString.append(vis.getType()); + visionString.append(',').append(vis.getDistance()); + visionValues.add(visionString.toString()); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/VisionPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/VisionPanel.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/VisionPanel.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -23,11 +23,13 @@ package pcgen.gui.editor; import pcgen.core.Constants; +import pcgen.core.Vision; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; import pcgen.gui.utils.IconUtilitities; import pcgen.gui.utils.JComboBoxEx; import pcgen.util.PropertyFactory; +import pcgen.util.enumeration.VisionType; import javax.swing.*; import javax.swing.border.Border; @@ -102,22 +104,21 @@ } /** - * Returns the selected vision data as a hashmap + * Returns the selected vision data * - * @return HashMap The vision table. + * @return The vision List */ - Map getVision() + List<Vision> getVision() { - Map vision = new HashMap(); + List<Vision> vision = new ArrayList<Vision>(); - //vision.put("Normal", "0"); - Object[] selected = getSelectedList(); - - for (int index = 0; index < selected.length; index++) + for(Object visionObj : getSelectedList()) { - final String moveString = (String) selected[index]; - final int idx = moveString.indexOf(","); - vision.put(moveString.substring(0, idx), moveString.substring(idx + 1)); + String visionString = (String) visionObj; + final int idx = visionString.indexOf(","); + VisionType visionType = VisionType.getVisionType(visionString + .substring(0, idx)); + vision.add(new Vision(visionType, visionString.substring(idx + 1))); } return vision; Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -79,6 +79,7 @@ import pcgen.core.Domain; import pcgen.core.GameMode; import pcgen.core.Globals; +import pcgen.core.LevelProperty; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; import pcgen.core.SettingsHandler; @@ -460,29 +461,17 @@ // Loop through the available prestige domains for (PCClass aClass : pc.getClassList()) { - for (String prestigeString : aClass.getAddDomains()) + for (Domain prestigeDomain : aClass.getAddDomains(aClass.getLevel())) { - final StringTokenizer domainTok = new StringTokenizer(prestigeString, "|", false); - - final int level = Integer.parseInt(domainTok.nextToken()); - - if (aClass.getLevel() >= level) + //CONSIDER Should this be gated by null? - thpr 10/26/06 + if (prestigeDomain != null) { - while (domainTok.hasMoreTokens()) - { - final String prestigeKey = domainTok.nextToken(); - Domain prestigeDomain = Globals.getDomainKeyed(prestigeKey); + prestigeDomain = prestigeDomain.clone(); + } - if (prestigeDomain != null) - { - prestigeDomain = prestigeDomain.clone(); - } - - if (!availDomainList.contains(prestigeDomain)) - { - availDomainList.add(prestigeDomain); - } - } + if (!availDomainList.contains(prestigeDomain)) + { + availDomainList.add(prestigeDomain); } } Added: Trunk/pcgen/code/src/java/pcgen/util/enumeration/AbstractConstant.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/enumeration/AbstractConstant.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/enumeration/AbstractConstant.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2006 Tom Parker <th...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * + * Created on Apr 24, 2006 + */ +package pcgen.util.enumeration; + +import java.io.IOException; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamException; +import java.io.Serializable; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +public abstract class AbstractConstant implements Serializable { + + private transient String _fieldName; + + private void writeObject(ObjectOutputStream out) throws IOException { + Field[] f = getClass().getDeclaredFields(); + for (int i = 0; i < f.length; i++) { + try { + int mod = f[i].getModifiers(); + if (Modifier.isStatic(mod) && Modifier.isFinal(mod) + && Modifier.isPublic(mod)) { + //Use == to get exact object match (do not use .equals()) + if (this == f[i].get(null)) { + out.writeObject(f[i].getName()); + } + } + } catch (IllegalAccessException e) { + throw new IOException(e.getLocalizedMessage()); + } + } + } + + private void readObject(ObjectInputStream in) throws IOException { + try { + _fieldName = (String) in.readObject(); + } catch (ClassNotFoundException e) { + throw new IOException(e.getLocalizedMessage()); + } + } + + public Object readResolve() throws ObjectStreamException { + try { + return getClass().getField(_fieldName).get(null); + } catch (SecurityException e) { + throw new InvalidObjectException("Failed to resolve object: " + + e.getLocalizedMessage()); + } catch (NoSuchFieldException e) { + throw new InvalidObjectException("Failed to resolve object: " + + e.getLocalizedMessage()); + } catch (IllegalAccessException e) { + throw new InvalidObjectException("Failed to resolve object: " + + e.getLocalizedMessage()); + } + } +} \ No newline at end of file Added: Trunk/pcgen/code/src/java/pcgen/util/enumeration/VisionType.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/enumeration/VisionType.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/enumeration/VisionType.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -0,0 +1,73 @@ +package pcgen.util.enumeration; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public final class VisionType extends AbstractConstant { + + private static Map<String, VisionType> typeMap; + + public static VisionType getVisionType(String s) { + if (typeMap == null) { + buildMap(); + } + /* + * CONSIDER Right now this is CASE SENSITIVE. Should this really be the + * case? - thpr 10/25/06 + */ + VisionType o = typeMap.get(s); + if (o == null) { + o = new VisionType(); + typeMap.put(s, o); + } + return o; + } + + private static void buildMap() { + typeMap = new HashMap<String, VisionType>(); + Field[] fields = VisionType.class.getDeclaredFields(); + for (int i = 0; i < fields.length; i++) { + int mod = fields[i].getModifiers(); + + if (Modifier.isStatic(mod) && Modifier.isFinal(mod) + && Modifier.isPublic(mod)) { + try { + Object o = fields[i].get(null); + if (o instanceof VisionType) { + typeMap.put(fields[i].getName(), (VisionType) o); + } + } catch (IllegalArgumentException e) { + throw new InternalError(); + } catch (IllegalAccessException e) { + throw new InternalError(); + } + } + } + } + + public String toString() { + /* + * CLEANUP Oh my, this should NOT be this way + */ + for (Map.Entry<String, VisionType> me : typeMap.entrySet()) { + if (me.getValue().equals(this)) { + return me.getKey(); + } + } + // Error + return ""; + } + + public static void clearConstants() { + buildMap(); + } + + public static Collection<VisionType> getAllVisionTypes() { + return Collections.unmodifiableCollection(typeMap.values()); + } +} Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -26,10 +26,13 @@ package plugin.exporttokens; import pcgen.core.PlayerCharacter; +import pcgen.core.Vision; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; +import pcgen.util.CollectionUtilities; -import java.util.SortedSet; +import java.util.ArrayList; +import java.util.List; import java.util.StringTokenizer; /** @@ -63,6 +66,8 @@ StringTokenizer aTok = new StringTokenizer(tokenSource, "."); aTok.nextToken(); + List<Vision> visionList = new ArrayList<Vision>(pc.getVisionList()); + int visionIndex = 0; int startIndex = 0; @@ -70,8 +75,8 @@ { try { - visionIndex = Integer.parseInt(aTok.nextToken()); - startIndex = visionIndex; + startIndex = Integer.parseInt(aTok.nextToken()); + visionIndex = startIndex + 1; } catch (NumberFormatException e) { @@ -80,40 +85,16 @@ } else { - visionIndex = pc.getVisiontypeList().size(); + visionIndex = visionList.size(); } - StringBuffer visionBuf = new StringBuffer(); - - for (int i = startIndex; i <= visionIndex; i++) - { - if ((i > startIndex) && (i < visionIndex)) - { - visionBuf.append(", "); - } - - visionBuf.append(getVisionToken(pc, i)); + if (visionList.isEmpty()) { + return ""; } - - return visionBuf.toString(); + + List<Vision> subList = visionList.subList(Math.max(startIndex, 0), + Math.min(visionIndex, visionList.size())); + + return CollectionUtilities.joinStringRepresentations(subList, ", "); } - - /** - * Produce the output for a vision type. - * - * @param pc The character being procesed. - * @param visionIndex The index of the vision type to be output. - * @return A description of the vision type suitable for output. - */ - public static String getVisionToken(PlayerCharacter pc, int visionIndex) - { - SortedSet<String> visionSet = pc.getVisiontypeList(); - - if ((visionIndex >= 0) && (visionIndex < visionSet.size())) - { - return visionSet.toArray()[visionIndex].toString(); - } - - return ""; - } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/VisionLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/VisionLst.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/VisionLst.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -4,44 +4,95 @@ */ package plugin.lsttokens; +import java.util.StringTokenizer; + +import pcgen.core.PCClass; import pcgen.core.PObject; +import pcgen.core.Vision; import pcgen.persistence.lst.GlobalLstToken; +import pcgen.util.Logging; +import pcgen.util.enumeration.VisionType; /** - * <code>VisionLst</code> handles the processing of the VISION tag - * in LST code. - * - * Last Editor: $Author$ - * Last Edited: $Date$ - * + * <code>VisionLst</code> handles the processing of the VISION tag in LST + * code. + * + * Last Editor: $Author$ Last Edited: $Date: 2006-03-14 17:16:52 -0500 + * (Tue, 14 Mar 2006) $ + * * @author Devon Jones * @version $Revision$ */ -public class VisionLst implements GlobalLstToken -{ +public class VisionLst implements GlobalLstToken { /** * @see pcgen.persistence.lst.LstToken#getTokenName() */ - public String getTokenName() - { + public String getTokenName() { return "VISION"; } /** - * @see pcgen.persistence.lst.GlobalLstToken#parse(pcgen.core.PObject, java.lang.String, int) + * @see pcgen.persistence.lst.GlobalLstToken#parse(pcgen.core.PObject, + * java.lang.String, int) */ - public boolean parse(PObject obj, String value, int anInt) - { - if (anInt > -9) - { - obj.setVision(anInt + "|" + value, null); + public boolean parse(PObject obj, String value, int anInt) { + final StringTokenizer aTok = new StringTokenizer(value, "|"); + + while (aTok.hasMoreTokens()) { + String visionString = aTok.nextToken(); + + if (".CLEAR".equals(visionString)) { + obj.clearVisionList(); + continue; + } + + if (visionString.indexOf(',') >= 0) { + Logging + .errorPrint("Use of comma in VISION Tag is deprecated. Use .CLEAR.[Vision] instead."); + final StringTokenizer visionTok = new StringTokenizer( + visionString, ","); + String numberTok = visionTok.nextToken(); + if (numberTok == "2") { + visionString = ".CLEAR." + visionTok.nextToken(); + } else if (numberTok == "0") { + visionString = ".SET." + visionTok.nextToken(); + } else { + visionString = visionTok.nextToken(); + } + } + + Vision vis = null; + if (visionString.startsWith(".CLEAR.")) { + obj.removeVisionType(VisionType.getVisionType(visionString + .substring(7))); + } else if (visionString.startsWith(".SET.")) { + obj.clearVisionList(); + vis = getVision(anInt, visionString.substring(5)); + } else { + vis = getVision(anInt, visionString); + } + + if (vis != null) { + if (anInt > -9) { + ((PCClass) obj).addVision(anInt, vis); + } else { + obj.addVision(vis); + } + } + } - else - { - obj.setVision(value, null); - } return true; } + + private Vision getVision(int anInt, String visionType) { + // expecting value in form of Darkvision (60') + final StringTokenizer cTok = new StringTokenizer(visionType, "(')"); + final String aKey = cTok.nextToken().trim(); // e.g. Darkvision + String aVal = "0"; + if (cTok.hasMoreTokens()) { + aVal = cTok.nextToken(); // e.g. 60 + } + return new Vision(VisionType.getVisionType(aKey), aVal); + } } - Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/AdddomainsToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/AdddomainsToken.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/AdddomainsToken.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -2,8 +2,14 @@ import java.util.StringTokenizer; +import pcgen.core.Constants; +import pcgen.core.Domain; +import pcgen.core.Globals; import pcgen.core.PCClass; +import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.PCClassLstToken; +import pcgen.persistence.lst.prereq.PreParserFactory; +import pcgen.util.Logging; /** * Class deals with ADDDOMAINS Token @@ -15,11 +21,50 @@ } public boolean parse(PCClass pcclass, String value, int level) { - final StringTokenizer aTok = new StringTokenizer(value, ".", false); - + final StringTokenizer aTok = new StringTokenizer(value, Constants.PIPE); + while (aTok.hasMoreTokens()) { - pcclass.addAddDomain( level, aTok.nextToken() ); + final String aString = aTok.nextToken(); + String domainKey; + String prereq = null; //Do not initialize, null is significant! + + //Note: May contain PRExxx + if (aString.indexOf("[") == -1) + { + domainKey = aString; + } + else + { + int openBracketLoc = aString.indexOf("["); + domainKey = aString.substring(0, openBracketLoc); + if (!aString.endsWith("]")) + { + Logging.errorPrint("Unresolved Prerequisite on Domain " + + aString + " in " + getTokenName()); + } + prereq = aString.substring(openBracketLoc + 1, + aString.length() - openBracketLoc - 2); + } + + Domain thisDomain = Globals.getDomainKeyed(domainKey); + + if (thisDomain == null) { + Logging.errorPrint("Unresolved Domain " + domainKey + " in " + + getTokenName()); + } else { + Domain clonedDomain = thisDomain.clone(); + if (prereq != null) + { + try { + clonedDomain.addPreReq(PreParserFactory.getInstance().parse(prereq)); + } catch (PersistenceLayerException e) { + Logging.errorPrint("Error generating Prerequisite " + + prereq + " in " + getTokenName()); + } + } + pcclass.addAddDomain(level, clonedDomain); + } } return true; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -2,6 +2,7 @@ import java.util.StringTokenizer; +import pcgen.core.Constants; import pcgen.core.Domain; import pcgen.core.Globals; import pcgen.core.PCClass; @@ -20,7 +21,7 @@ } public boolean parse(PCClass pcclass, String value, int level) { - final StringTokenizer aTok = new StringTokenizer(value, "|"); + final StringTokenizer aTok = new StringTokenizer(value, Constants.PIPE); while (aTok.hasMoreTokens()) { Modified: Trunk/pcgen/code/src/test/pcgen/core/prereq/PreVisionTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/prereq/PreVisionTest.java 2006-10-26 02:21:48 UTC (rev 1529) +++ Trunk/pcgen/code/src/test/pcgen/core/prereq/PreVisionTest.java 2006-10-26 03:10:42 UTC (rev 1530) @@ -11,6 +11,8 @@ import pcgen.AbstractCharacterTestCase; import pcgen.core.PCTemplate; import pcgen.core.PlayerCharacter; +import pcgen.core.Vision; +import pcgen.util.enumeration.VisionType; /** * Tests PREVISION token @@ -43,11 +45,11 @@ final PlayerCharacter character = getCharacter(); final PCTemplate template = new PCTemplate(); - template.setVision("Darkvision (60')", character); + template.addVision(new Vision(VisionType.getVisionType("Darkvision"), "60")); character.addTemplate(template); final PCTemplate template2 = new PCTemplate(); - template2.setVision("Low-light (30')", character); + template2.addVision(new Vision(VisionType.getVisionType("Low-Light"), "30")); character.addTemplate(template2); final Prerequisite prereq = new Prerequisite(); @@ -68,7 +70,7 @@ final PlayerCharacter character = getCharacter(); final PCTemplate template = new PCTemplate(); - template.setVision("Normal (60')", character); + template.addVision(new Vision(VisionType.getVisionType("Normal"), "60")); character.addTemplate(template); @@ -89,7 +91,7 @@ { final PlayerCharacter character = getCharacter(); final PCTemplate template = new PCTemplate(); - template.setVision("Darkvision (60')", character); + template.addVision(new Vision(VisionType.getVisionType("Darkvision"), "60")); character.addTemplate(template); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-11-04 15:30:20
|
Revision: 1575 http://svn.sourceforge.net/pcgen/?rev=1575&view=rev Author: thpr Date: 2006-11-04 07:29:34 -0800 (Sat, 04 Nov 2006) Log Message: ----------- Part of 1460794: Move SPECIALTYKNOWN parsing into Tag Move KNOWNSPELLS functionality into Tag by creating SpellFilter class Move KNOWN parsing (String, not Formula) into Tag Enforce KNOWN not allowed outside of ClassLevel line Forces some minor changes in Test cases (to account for loading a PCClass) Move CAST parsing (String, not Formula) into Tag Forces some minor changes in Test cases (to account for loading a PCClass) Modify DEITY parsing in Tag for speed and clarity PCClass/PCClassLevel: Convert castMap into CastList (uses LevelProperty) (for consistency) Convert knownList to use LevelProperty, rather than order assumption Misc: inline CollectionUtilities.joinStringRepresentations to convert to CoreUtility.join Some null check and casting bug fixes (in the Class Editor) that I introduced in previous check-ins Modified Paths: -------------- Trunk/pcgen/code/src/java/gmgen/plugin/PlayerCharacterOutput.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java Trunk/pcgen/code/src/java/pcgen/core/utils/ChoiceList.java Trunk/pcgen/code/src/java/pcgen/core/utils/CoreUtility.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/LanguagesToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpecialListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/TemplateToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java Trunk/pcgen/code/src/java/plugin/initiative/AttackModel.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DeityToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/KnownToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/KnownspellsToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpecialtyknownToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpelllistToken.java Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java Trunk/pcgen/code/src/test/pcgen/core/PObjectUtilitiesTest.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreClassTest.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreMultTest.java Trunk/pcgen/code/src/test/pcgen/io/exporttoken/SpellMemTokenTest.java Trunk/pcgen/code/src/test/plugin/exporttokens/SpellListTokenTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/core/SpellFilter.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/util/CollectionUtilities.java Modified: Trunk/pcgen/code/src/java/gmgen/plugin/PlayerCharacterOutput.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/plugin/PlayerCharacterOutput.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/gmgen/plugin/PlayerCharacterOutput.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -1,8 +1,8 @@ package gmgen.plugin; import pcgen.core.*; +import pcgen.core.utils.CoreUtility; import pcgen.io.ExportHandler; -import pcgen.util.CollectionUtilities; import pcgen.util.enumeration.AttackType; import java.io.BufferedWriter; @@ -288,7 +288,7 @@ public String getSpecialAbilities() { - return CollectionUtilities.joinStringRepresentations(pc.getSpecialAbilityTimesList(), ", "); + return CoreUtility.join(pc.getSpecialAbilityTimesList(), ", "); } public String getSpeed() Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -23,6 +23,7 @@ package pcgen.core; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -47,11 +48,11 @@ import pcgen.core.utils.ShowMessageDelegate; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.prereq.PreParserFactory; -import pcgen.util.CollectionUtilities; import pcgen.util.DoubleKeyMap; import pcgen.util.InputFactory; import pcgen.util.InputInterface; import pcgen.util.Logging; +import pcgen.util.MapCollection; import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.AttackType; @@ -111,12 +112,7 @@ private int numSpellsFromSpecialty = 0; /* - * LEVELONEONLY Since this is for a Class Line and not a ClassLevel line, a - * granting of Domains only needs to occur in first level. - * - * Note this should be checked, as this is what the DOCUMENTATION says, but - * the code seems to want to allow a Domain on a Class Level line. (Not sure - * if this functions correctly, though) + * ALLCLASSLEVELS Since this applies to a ClassLevel line */ private ArrayList<LevelProperty<Domain>> domainList = null; @@ -151,27 +147,24 @@ private ArrayList<LevelProperty<String>> featList = null; /* - * STRINGREFACTOR This is currently storing a String with lots of gunk in it - * to identify what Spell levels, et al are known - this should really be an - * Array of Arrays or something to that effect... + * FUTURETYPESAFETY Currently can't do better than String, because each one + * of these can be a formula, or some special gunk for Psionicists (can we + * clean that up??) */ /* * ALLCLASSLEVELS Since the known list is class level dependent, it needs to * be stored into each PCClassLevel */ - private ArrayList<String> knownList = null; + private ArrayList<LevelProperty<List<String>>> knownList = null; /* - * TYPESAFETY This is throwing around Spell names as Strings. :( - */ - /* * LEVELONEONLY This variable (automatically known spells) only needs to be * loaded into the first PCClassLevel returned by PCClass, because the data * is static (doesn't change by level) and because it will be tested * dynamically (does the PCClassLevel automatically know spell A?), it only * needs to appear on one of the PlayerCharacter's PCClassLevels. */ - private ArrayList<String> knownSpellsList = null; + private ArrayList<SpellFilter> knownSpellsList = null; /* * TYPESAFETY This is an interesting case of Type Safety, that may not be @@ -187,19 +180,11 @@ private ArrayList<String> specialtyList = null; /* - * STRINGREFACTOR This should really be stored as an Array, not as a String, - * since it is listing the specialty known "spells" for a level. - * - * In reality, one needs to consider whether this is stored as an array of - * arrays or whether this is yet another LevelProperty, and searches can be - * done from there. - */ - /* * ALLCLASSLEVELS The specialtyKnownList [based on their level and/or * LevelProperty (if it gets used)] (not the raw Strings) need to be stored * in EACH individual PCClassLevel. */ - private ArrayList<LevelProperty<String>> specialtyknownList = null; + private ArrayList<LevelProperty<int[]>> specialtyknownList = null; /* * STRINGREFACTOR This is currently taking in a delimited String and should @@ -241,19 +226,15 @@ * selected subClass, if any, is structured into the PCClassLevel during the * construction of the PCClassLevel */ - private ArrayList<SubClass> subClassList = null; // list of SubClass - // objects + private ArrayList<SubClass> subClassList = null; /* * PCCLASSONLY This is really an item that the PCClass knows, and then the * selected substitutionClass, if any, is structured into the PCClassLevel * during the construction of the PCClassLevel */ - private ArrayList<SubstitutionClass> substitutionClassList = null; // list - // of - // SubstitutionClass - // objects - + private ArrayList<SubstitutionClass> substitutionClassList = null; + /* * DELETEVARIABLE There is NO use of this Tag at all in the data/* structure * today, so support for this should be removed from this class. @@ -370,14 +351,9 @@ private List<LevelProperty<Vision>> visionList = null; /* - * STRINGREFACTOR Need to rebuild this String into a List<Integer> - * - * On the other hand, this could be int[][]?? might be smaller/faster? - * - * Or what about also using LevelProperty, since if that is generally used, - * it could be looked at to optimize the speed of creation of a PCClassLevel - * as much as possible? (seems like that could be really fast in a CDOM - * environment) + * FUTURETYPESAFETY Currently can't do better than String, because each one + * of these can be a formula, or some special gunk for Psionicists (can we + * clean that up??) */ /* * ALLCLASSLEVELS This goes into each PCClassLevel, although some 'advanced' @@ -386,8 +362,7 @@ * readibility!). Remember to consider PCClassLevels where 0 spells are * acquired (vs -) since that is where ability bonuses are triggered... */ - private Map<Integer, String> castMap = null; // TODO - Convert String to - // List<Integer> + private List<LevelProperty<List<String>>> castList = null; /* * UNKNOWNDESTINATION Actually, the question becomes: Does the CR simply get @@ -822,15 +797,6 @@ protected int level = 0; // TODO - This should be moved. /* - * DELETEVARIABLE This can be refactored out of PCClass and put into the - * ATTACKCYCLE tag. Then the tag needs to build the attackCycleMap (below) - * and properly load that map into PCClass. There will also need to be - * something to UNDO the map creation (the export tags do UNTAG or - * something?) in order to convert back into the String. - */ - private String attackCycle = Constants.EMPTY_STRING; - - /* * attackCycleMap is part of PCClass (not PCClassLevel) because it is loaded * from the LST file. attackCycleMap should NOT be loaded into ANY * PCClassLevel as this is an IMPLICIT part of the Attack Bonuses of a @@ -1505,14 +1471,16 @@ * PCCLASSANDLEVEL This is appropriate for both PCClassLevel and * PCClass since it is a Tag */ - public final void setDeityList(final List<String> aDeityList) { - // deityList must be a concrete list so we can clone it, - // but we can not guarantee that the list passed in is - // a ArrayList, so we have to copy the entries. - // This should not be onerous as it is done infrequently - // and the lists are short (1-2 entries). - this.deityList = new ArrayList<String>(aDeityList); + public final void addDeity(String aDeity) { + deityList.add(aDeity); } + + /* + * PCCLASSONLY Since this is for constructing a PCClass + */ + public final void clearDeityList() { + deityList.clear(); + } /* * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in @@ -1537,8 +1505,7 @@ */ public final List<Domain> getDomainList(int domainLevel) { if (domainList == null) { - final List<Domain> ret = Collections.emptyList(); - return ret; + return Collections.emptyList(); } List<Domain> returnList = new ArrayList<Domain>(); for (LevelProperty<Domain> prop : domainList) @@ -2371,14 +2338,21 @@ * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass since * it is a Tag [with level dependent differences, of course) */ - public void setCastMap(final int aLevel, final String cast) { - if (castMap == null) { - castMap = new HashMap<Integer, String>(); + public void setCast(final int aLevel, final List<String> cast) { + if (castList == null) { + castList = new ArrayList<LevelProperty<List<String>>>(); } if (aLevel > maxCastLevel) { maxCastLevel = aLevel; } - castMap.put(aLevel, cast); + for (LevelProperty<List<String>> lp : castList) { + if (lp.getLevel() == aLevel) { + castList.remove(lp); + break; + } + } + + castList.add(LevelProperty.getLevelProperty(aLevel, cast)); } /** @@ -2393,16 +2367,16 @@ * recreating Strings out of more advanced structures. PCClass and * PCClassLevel are not the place for this */ - public String getCastStringForLevel(int aLevel) { - if (castMap != null) { + public List<String> getCastListForLevel(int aLevel) { + if (castList != null) { final int lvl = Math.min(aLevel, maxCastLevel); - - if (castMap.containsKey(lvl)) { - return castMap.get(lvl); + for (LevelProperty<List<String>> lp : castList) { + if (lp.getLevel() == lvl) { + return lp.getObject(); + } } } - - return Constants.EMPTY_STRING; + return Collections.emptyList(); } /* @@ -2415,37 +2389,27 @@ final boolean allowBonus) { int minLevel = Constants.INVALID_LEVEL; - int loopMax = castMap.keySet().size(); - for (int i = 0; i < loopMax; i++) { - final String castPerDay = castMap.get(i); - - if ((castPerDay == null) || (castPerDay.length() <= 0)) { - continue; - } - - final StringTokenizer bTok = new StringTokenizer(castPerDay, ","); + for (LevelProperty<List<String>> lp : castList) { int maxCastable = -1; if (allowBonus) { - maxCastable = bTok.countTokens() - 1; + maxCastable = lp.getObject().size() - 1; } else { int j = 0; - - while (bTok.hasMoreTokens()) { + for (String st : lp.getObject()) { try { - if (Integer.parseInt(bTok.nextToken()) != 0) { + if (Integer.parseInt(st) != 0) { maxCastable = j; } } catch (NumberFormatException ignore) { // ignore } - j++; } } if (maxCastable >= spellLevel) { - minLevel = i; + minLevel = lp.getLevel(); break; } @@ -2455,39 +2419,35 @@ return minLevel; } - loopMax = knownList.size(); + for (LevelProperty<List<String>> lp : knownList) { + final List<String> knownSpells = lp.getObject(); - for (int i = 0; i < loopMax; ++i) { - final String knownSpells = knownList.get(i); - - if ("0".equals(knownSpells)) { + if (knownSpells.size() == 0) { continue; } - final StringTokenizer bTok = new StringTokenizer(knownSpells, ","); int maxCastable = -1; if (allowBonus) { - maxCastable = bTok.countTokens() - 1; + maxCastable = knownSpells.size() - 1; } else { int j = 0; - - while (bTok.hasMoreTokens()) { + for (String st : knownSpells) { try { - if (Integer.parseInt(bTok.nextToken()) != 0) { + if (Integer.parseInt(st) != 0) { maxCastable = j; } } catch (NumberFormatException e) { // TODO: Should this really be ignored? + // CONSIDER This could be a formula, so what does THAT mean - thpr 11/3/06 Logging.errorPrint("", e); } - - j += 1; + j++; } } if (maxCastable >= spellLevel) { - minLevel = i + 1; + minLevel = lp.getLevel(); break; } @@ -2515,19 +2475,18 @@ } int highestCastable = -1; - if (castMap != null) { - for (final String entry : castMap.values()) { - highestCastable = Math.max(highestCastable, - entry.split(",").length - 1); + if (castList != null) { + for (LevelProperty<List<String>> lp : castList) { + highestCastable = Math.max(highestCastable, lp.getObject().size() - 1); } } // Highest Known spell for level - final List<String> known = getKnownList(); int highestKnown = -1; - for (final String element : known) { - highestKnown = Math - .max(highestKnown, element.split(",").length - 1); + if (knownList != null) { + for (LevelProperty<List<String>> lp : knownList) { + highestKnown = Math.max(highestKnown, lp.getObject().size() - 1); + } } int highest = Math.max(highestCastable, highestKnown); @@ -2635,11 +2594,11 @@ * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public List<String> getKnownList() { + public List<LevelProperty<List<String>>> getKnownList() { if (Constants.EMPTY_STRING.equals(castAs) || getKeyName().equals(castAs)) { if (knownList == null) { - final List<String> ret = Collections.emptyList(); + final List<LevelProperty<List<String>>> ret = Collections.emptyList(); return Collections.unmodifiableList(ret); } return knownList; @@ -2652,7 +2611,7 @@ } if (knownList == null) { - final List<String> ret = Collections.emptyList(); + final List<LevelProperty<List<String>>> ret = Collections.emptyList(); return Collections.unmodifiableList(ret); } return knownList; @@ -2673,17 +2632,16 @@ * should also be refactored (as part of the getKnownList() rebuild) to pass * around something more intelligent than a String. */ - public String getKnownStringForLevel(int aInt) { - final List<String> known = getKnownList(); - + public List<String> getKnownListForLevel(int aInt) { if (aInt > maxKnownLevel) { aInt = maxKnownLevel; } - if (aInt >= 0 && aInt < known.size()) { - return known.get(aInt); + for (LevelProperty<List<String>> lp : knownList) { + if (lp.getLevel() == aInt) { + return lp.getObject(); + } } - - return Constants.EMPTY_STRING; + return Collections.emptyList(); } /** @@ -2693,9 +2651,9 @@ * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public List<String> getKnownSpellsList() { + public List<SpellFilter> getKnownSpellsList() { if (knownSpellsList == null) { - final List<String> ret = Collections.emptyList(); + final List<SpellFilter> ret = Collections.emptyList(); return Collections.unmodifiableList(ret); } return Collections.unmodifiableList(knownSpellsList); @@ -2704,9 +2662,9 @@ /* * PCCLASSONLY This is required in PCClass for PCClass editing */ - public final Collection<LevelProperty<String>> getSpecialtyKnownList() { + public final Collection<LevelProperty<int[]>> getSpecialtyKnownList() { if (specialtyknownList == null) { - final List<LevelProperty<String>> ret = Collections.emptyList(); + final List<LevelProperty<int[]>> ret = Collections.emptyList(); return Collections.unmodifiableList(ret); } return Collections.unmodifiableList(specialtyknownList); @@ -2716,9 +2674,9 @@ * PCCLASSLEVELONLY This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public final String getSpecialtyKnownList(int aLevel) { + public final int[] getSpecialtyKnownList(int aLevel) { if (specialtyknownList != null) { - for (LevelProperty<String> lp : specialtyknownList) { + for (LevelProperty<int[]> lp : specialtyknownList) { if (lp.getLevel() == aLevel) { return lp.getObject(); } @@ -2741,11 +2699,11 @@ * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public final void addSpecialtyKnown(int aLevel, String aNumber) { + public final void addSpecialtyKnown(int aLevel, int[] array) { if (specialtyknownList == null) { - specialtyknownList = new ArrayList<LevelProperty<String>>(); + specialtyknownList = new ArrayList<LevelProperty<int[]>>(); } - specialtyknownList.add(LevelProperty.getLevelProperty(aLevel, aNumber)); + specialtyknownList.add(LevelProperty.getLevelProperty(aLevel, array)); } /** @@ -2771,39 +2729,24 @@ return aNum; } - if (castMap != null) { - if (!castMap.containsKey(iCasterLevel)) { - // Recurse in case we are actually past the end of a class's - // definition - use the last enterd value - return getNumFromCastList(iCasterLevel - 1, iSpellLevel, aPC); - } + int useCastLevel = iCasterLevel > maxCastLevel ? maxCastLevel : iCasterLevel; + + List<String> castListForLevel = getCastListForLevel(useCastLevel); + if (iSpellLevel >= castListForLevel.size()) { + return aNum; } + String aString = castListForLevel.get(iSpellLevel); - int iCount = 0; - String aString = getCastStringForLevel(iCasterLevel); - - final StringTokenizer aTok = new StringTokenizer(aString, ","); - - while (aTok.hasMoreTokens()) { - aString = aTok.nextToken(); - - if (iCount == iSpellLevel) { - if ((aPC != null) && hasSpellFormula()) { - aNum = aPC.getVariableValue(aString, "").intValue(); - } else { - try { - aNum = Integer.parseInt(aString); - } catch (NumberFormatException ex) { - // ignore - aNum = 0; - } - } - return aNum; + if ((aPC != null) && hasSpellFormula()) { + aNum = aPC.getVariableValue(aString, "").intValue(); + } else { + try { + aNum = Integer.parseInt(aString); + } catch (NumberFormatException ex) { + // ignore + aNum = 0; } - - ++iCount; } - return aNum; } @@ -2914,23 +2857,11 @@ } } - String aString = getSpecialtyKnownList(pcLevel); - if (aString != null) + int[] specKnown = getSpecialtyKnownList(pcLevel); + if (specKnown != null) { - StringTokenizer aTok = new StringTokenizer(aString, ","); - int x = spellLevel; - - while (aTok.hasMoreTokens()) { - final String spells = aTok.nextToken(); - final int t = Integer.parseInt(spells); - - if (x == 0) { - total += t; - - break; - } - - --x; + if (specKnown.length > spellLevel) { + total += specKnown[spellLevel]; } } @@ -3706,9 +3637,11 @@ * PCCLASSONLY This is for editing classes */ public LevelProperty<String> getSRforLevel(int aLevel) { - for (LevelProperty<String> lp : SR) { - if (lp.getLevel() == aLevel) { - return lp; + if (SR != null) { + for (LevelProperty<String> lp : SR) { + if (lp.getLevel() == aLevel) { + return lp; + } } } return null; @@ -3776,12 +3709,15 @@ pccTxt.append("\tHD:").append(hitDie); checkAdd(pccTxt, "ANY", "DEITY:", CoreUtility.join(deityList, '|')); - checkAdd(pccTxt, "", "ATTACKCYCLE", attackCycle); + if (attackCycleMap != null) { + checkAdd(pccTxt, "", "ATTACKCYCLE", CoreUtility.join(new MapCollection( + attackCycleMap), Constants.PIPE)); + } checkAdd(pccTxt, "", "CASTAS:", castAs); if (prohibitedSchools != null) { pccTxt.append('\t').append("PROHIBITED:"); - pccTxt.append(CollectionUtilities.joinStringRepresentations(prohibitedSchools, ",")); + pccTxt.append(CoreUtility.join(prohibitedSchools, ",")); } checkAdd(pccTxt, Constants.s_NONE, "SPELLSTAT:", spellBaseStat); @@ -3825,17 +3761,7 @@ if (!getKnownSpellsList().isEmpty()) { pccTxt.append("\tKNOWNSPELLS:"); - - boolean flag = false; - - for (String spell : knownSpellsList) { - if (flag) { - pccTxt.append(Constants.PIPE); - } - - flag = true; - pccTxt.append(spell); - } + pccTxt.append(CoreUtility.join(knownSpellsList, Constants.PIPE)); } if (itemCreationMultiplier.length() != 0) { @@ -3852,16 +3778,7 @@ if (getWeaponProfBonus().size() != 0) { pccTxt.append("\tWEAPONBONUS:"); - - boolean first = true; - for (final String prof : getWeaponProfBonus()) { - if (first != true) { - pccTxt.append(Constants.PIPE); - } - - pccTxt.append(prof); - first = false; - } + pccTxt.append(CoreUtility.join(getWeaponProfBonus(), Constants.PIPE)); } // now all the level-based stuff @@ -3891,34 +3808,27 @@ } } - /* - * CONSIDER This is different than it was before - this outputs the - * level, whereas the previous code for outputting SPECIALTYKNOWN did - * not - is this a problem??? - thpr 10/31/06 - */ if (specialtyknownList != null) { - for (LevelProperty<String> lp : specialtyknownList) { + for (LevelProperty<int[]> lp : specialtyknownList) { pccTxt.append(lineSep).append(lp.getLevel()).append("\tSPECIALTYKNOWN:") - .append(lp.getObject()); + .append(CoreUtility.join(Arrays.asList(lp.getObject()), ",")); } } pccTxt.append(lineSep); - if (castMap != null) { - for (int x = 0; x < castMap.size(); ++x) { - if (castMap.containsKey(x)) { - final String c = castMap.get(x); - final String l = lineSep + String.valueOf(x) + "\tCAST:"; - checkAdd(pccTxt, "0", l, c); - } + if (castList != null) { + for (LevelProperty<List<String>> lp : castList) { + checkAdd(pccTxt, "0", lineSep + lp.getLevel() + "\tCAST:", + CoreUtility.join(lp.getObject(), ",")); } } - for (int x = 0; x < getKnownList().size(); ++x) { - final String c = knownList.get(x); - final String l = lineSep + String.valueOf(x + 1) + "\tKNOWN:"; - checkAdd(pccTxt, "0", l, c); + if (knownList != null) { + for (LevelProperty<List<String>> lp : knownList) { + checkAdd(pccTxt, "0", lineSep + lp.getLevel() + "\tKNOWN:", + CoreUtility.join(lp.getObject(), ",")); + } } // Output the level based DR only @@ -4270,36 +4180,31 @@ * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public void addKnown(final int iLevel, final String aString) { + public void setKnown(final int iLevel, final List<String> aList) { if (knownList == null) { - knownList = new ArrayList<String>(); + knownList = new ArrayList<LevelProperty<List<String>>>(); } - if (iLevel > maxKnownLevel) { maxKnownLevel = iLevel; } - // pad to with empty entries - while (knownList.size() < (iLevel - 1)) { - knownList.add("0"); + for (LevelProperty<List<String>> lp : knownList) { + if (lp.getLevel() == iLevel) { + knownList.remove(lp); + break; + } } - - // Replace existing with new entry - if (knownList.size() >= iLevel) { - knownList.set(iLevel - 1, aString); - } else { - knownList.add(aString); - } + knownList.add(LevelProperty.getLevelProperty(iLevel, aList)); } /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public void addKnownSpell(final String aString) { + public void addKnownSpell(final SpellFilter aFilter) { if (knownSpellsList == null) { - knownSpellsList = new ArrayList<String>(); + knownSpellsList = new ArrayList<SpellFilter>(); } - knownSpellsList.add(aString); + knownSpellsList.add(aFilter); } /* @@ -4639,14 +4544,14 @@ aClass.setSpellType(spellType); // aClass.setAttackBonusType(attackBonusType); if (specialtyknownList != null) { - aClass.specialtyknownList = new ArrayList<LevelProperty<String>>( + aClass.specialtyknownList = new ArrayList<LevelProperty<int[]>>( specialtyknownList); } if (knownList != null) { - aClass.knownList = new ArrayList<String>(knownList); + aClass.knownList = new ArrayList<LevelProperty<List<String>>>(knownList); } - if (castMap != null) { - aClass.castMap = new HashMap<Integer, String>(castMap); + if (castList != null) { + aClass.castList = new ArrayList<LevelProperty<List<String>>>(castList); } // TODO - This should be removed aClass.uattList = new ArrayList<String>(uattList); @@ -4692,7 +4597,7 @@ aClass.deityList = new ArrayList<String>(deityList); aClass.maxLevel = maxLevel; if (knownSpellsList != null) { - aClass.knownSpellsList = new ArrayList<String>(knownSpellsList); + aClass.knownSpellsList = new ArrayList<SpellFilter>(knownSpellsList); } if (attackCycleMap != null) { aClass.attackCycleMap = new HashMap<AttackType, String>( @@ -5058,26 +4963,18 @@ * after all... */ public boolean zeroCastSpells() { - if (castMap == null) { + if (castList == null) { return true; } - for (final int key : castMap.keySet()) { - final String aVal = castMap.get(key); - final StringTokenizer aTok = new StringTokenizer(aVal, ","); - int numSpells = 0; - - while (aTok.hasMoreTokens()) { - final String spellNum = aTok.nextToken(); - + for (LevelProperty<List<String>> lp : castList) { + for (String st : lp.getObject()) { try { - numSpells = Integer.parseInt(spellNum); + if (Integer.parseInt(st) > 0) { + return false; + } } catch (NumberFormatException nfe) { // ignore } - - if (numSpells > 0) { - return false; - } } } @@ -5186,7 +5083,7 @@ pcLevel += (int) aPC.getTotalBonusTo("PCLEVEL", "TYPE." + getSpellType()); - if ((castMap != null) + if ((castList != null) && (getNumFromCastList(pcLevel, spellLevel, aPC) < 0)) { // Don't know any spells of this level // however, character might have a bonus spells e.g. from certain @@ -5253,59 +5150,50 @@ boolean psiSpecialty = false; - if (!getKnownList().isEmpty()) { - if (pcLevel > getKnownList().size()) { - // doesn't know any spells of this level - return 0; + if (knownList != null && !knownList.isEmpty()) { + String spells = null; + for (LevelProperty<List<String>> lp : knownList) { + if (lp.getLevel() == pcLevel) { + spells = lp.getObject().get(spellLevel); + break; + } } + + if (spells.endsWith("+d")) { + psiSpecialty = true; - final String aString = getKnownList().get(pcLevel - 1); - final StringTokenizer aTok = new StringTokenizer(aString, ","); - int iCount = 0; + if (spells.length() > 1) { + spells = spells.substring(0, spells.length() - 2); + } + } - while (aTok.hasMoreTokens()) { - String spells = aTok.nextToken(); + int t; + if (hasSpellFormula()) { + t = aPC.getVariableValue(spells, "").intValue(); + } else { + t = Integer.parseInt(spells); + } + total += (t * mult); - if (iCount == spellLevel) { - if (spells.endsWith("+d")) { - psiSpecialty = true; + // add Stat based bonus + final String bonusSpell = Globals.getBonusSpellMap().get( + String.valueOf(spellLevel)); - if (spells.length() > 1) { - spells = spells.substring(0, spells.length() - 2); - } - } + if (Globals.checkRule(RuleConstants.BONUSSPELLKNOWN) + && (bonusSpell != null) + && !bonusSpell.equals("0|0")) { + final StringTokenizer s = new StringTokenizer( + bonusSpell, "|"); + final int base = Integer.parseInt(s.nextToken()); + final int range = Integer.parseInt(s.nextToken()); - int t; - if (hasSpellFormula()) { - t = aPC.getVariableValue(spells, "").intValue(); - } else { - t = Integer.parseInt(spells); - } - total += (t * mult); - - // add Stat based bonus - final String bonusSpell = Globals.getBonusSpellMap().get( - String.valueOf(spellLevel)); - - if (Globals.checkRule(RuleConstants.BONUSSPELLKNOWN) - && (bonusSpell != null) - && !bonusSpell.equals("0|0")) { - final StringTokenizer s = new StringTokenizer( - bonusSpell, "|"); - final int base = Integer.parseInt(s.nextToken()); - final int range = Integer.parseInt(s.nextToken()); - - if (stat >= base) { - total += Math.max(0, (stat - base + range) / range); - } - } - - if (psiSpecialty) { - total += numSpellsFromSpecialty; - } + if (stat >= base) { + total += Math.max(0, (stat - base + range) / range); } + } - iCount++; + if (psiSpecialty) { + total += numSpellsFromSpecialty; } } @@ -6222,7 +6110,7 @@ private boolean isAutoKnownSpell(final String aSpellKey, final int spellLevel, final boolean useMap, final PlayerCharacter aPC) { - if (getKnownSpellsList().isEmpty()) { + if (knownSpellsList == null || knownSpellsList.size() == 0) { return false; } @@ -6243,46 +6131,13 @@ return false; } - boolean flag = true; - // iterate through the KNOWNSPELLS: tag - for (String spellStr : getKnownSpellsList()) { - flag = true; - - final StringTokenizer spellTok = new StringTokenizer(spellStr, ",", - false); - - // must satisfy all elements in a comma delimited list - while (spellTok.hasMoreTokens() && flag) { - final String bString = spellTok.nextToken(); - - // if the argument starts with LEVEL=, compare the level to the - // desired spellLevel - if (bString.startsWith("LEVEL=") - || bString.startsWith("LEVEL.")) { - flag = Integer.parseInt(bString.substring(6)) == spellLevel; - } - - // if it starts with TYPE=, compare it to the spells type list - else if (bString.startsWith("TYPE=") - || bString.startsWith("TYPE.")) { - flag = aSpell.isType(bString.substring(5)); - } - - // otherwise it must be the spell's name - else { - flag = bString.equals(aSpellKey); - } + for (SpellFilter filter : knownSpellsList) { + if (filter.matchesFilter(aSpellKey, spellLevel)) { + return true; } - - // if we found an entry in KNOWNSPELLS: that is satisfied, we can - // stop - if (flag) { - break; - } } - - return flag; + return false; } /* @@ -7105,7 +6960,7 @@ } if (otherClass.SR != null) { - SR = (ArrayList<LevelProperty<String>>) otherClass.SR.clone(); + SR = new ArrayList<LevelProperty<String>>(otherClass.SR); } if (otherClass.vision != null) { @@ -7117,8 +6972,7 @@ } if (otherClass.naturalWeapons != null) { - naturalWeapons = (ArrayList<LevelProperty<Equipment>>) otherClass.naturalWeapons - .clone(); + naturalWeapons = new ArrayList<LevelProperty<Equipment>>(otherClass.naturalWeapons); } } Added: Trunk/pcgen/code/src/java/pcgen/core/SpellFilter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpellFilter.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/core/SpellFilter.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -0,0 +1,85 @@ +/* + * SpellProhibitor.java + * Copyright 2005 (c) Tom Parker <th...@so...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on November 3, 2006 + * + * Current Ver: $Revision: 1522 $ + * Last Editor: $Author: thpr $ + * Last Edited: $Date: 2006-10-24 18:40:09 -0400 (Tue, 24 Oct 2006) $ + * + */ +package pcgen.core; + +public class SpellFilter { + + private String spellName; + + private String spellType; + + private int spellLevel = -1; + + public void setSpellLevel(int spellLevel) { + this.spellLevel = spellLevel; + } + + public void setSpellName(String spellName) { + this.spellName = spellName; + } + + public void setSpellType(String spellType) { + this.spellType = spellType; + } + + public boolean isEmpty() { + return spellLevel < 0 && spellType == null && spellName == null; + } + + public boolean matchesFilter(String spellKey, int testSpellLevel) { + if (spellLevel >= 0 && testSpellLevel != spellLevel) { + return false; + } + if (spellType != null && !Globals.getSpellKeyed(spellKey).isType(spellType)) { + return false; + } + if (spellName != null && !spellName.equals(spellKey)) { + return false; + } + return true; + } + + public String toString() { + StringBuffer sb = new StringBuffer(); + if (spellLevel >= 0) { + sb.append("LEVEL=").append(spellLevel); + } + if (spellType != null) { + if (sb.length() != 0) { + sb.append(","); + } + sb.append("TYPE=").append(spellType); + } + if (spellName != null) { + if (sb.length() != 0) { + sb.append(","); + } + sb.append(spellName); + } + return sb.toString(); + } + +} Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -31,7 +31,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.StringTokenizer; import pcgen.core.Globals; import pcgen.core.PCClass; @@ -207,13 +206,11 @@ { // some classes, like "Domain" are level 0, so this index would // be -1 - String tempString = aClass.getCastStringForLevel(aLevel); - if (tempString == null || tempString.length() == 0) + j = aClass.getCastListForLevel(aLevel).size() - 1; + if (j == -1) { - tempString = aClass.getKnownStringForLevel(aLevel); + j = aClass.getKnownListForLevel(aLevel).size() - 1; } - final StringTokenizer bTok = new StringTokenizer(tempString, ","); - j = bTok.countTokens() - 1; } return j; } @@ -241,27 +238,16 @@ aLevel += (int) aPC.getTotalBonusTo("PCLEVEL", aClass.getKeyName()); aLevel += (int) aPC.getTotalBonusTo("PCLEVEL", "TYPE." + aType); - String bString = "0"; - if (aLevel >= 0) { // some classes, like "Domain" are level 0, // so this index would be -1 - bString = aClass.getCastStringForLevel(aLevel); - if (bString == null || bString.length() == 0) + maxLevel = aClass.getCastListForLevel(aLevel).size() - 1; + if (maxLevel == -1) { - bString = aClass.getKnownStringForLevel(aLevel); + maxLevel = aClass.getKnownListForLevel(aLevel).size() - 1; } } - if ("0".equals(bString)) - { - maxLevel = -1; - } - else - { - final StringTokenizer bTok = new StringTokenizer(bString, ","); - maxLevel = bTok.countTokens() - 1; - } return maxLevel; } Modified: Trunk/pcgen/code/src/java/pcgen/core/utils/ChoiceList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/utils/ChoiceList.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/core/utils/ChoiceList.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -26,7 +26,6 @@ import java.util.List; import pcgen.core.Constants; -import pcgen.util.CollectionUtilities; public class ChoiceList<T> { @@ -48,10 +47,7 @@ } public String toString() { - return count - + Constants.PIPE - + CollectionUtilities.joinStringRepresentations(list, - Constants.PIPE); + return count + Constants.PIPE + CoreUtility.join(list, Constants.PIPE); } public static <E> ChoiceList<E> getChoiceList(int choiceCount, Modified: Trunk/pcgen/code/src/java/pcgen/core/utils/CoreUtility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/utils/CoreUtility.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/core/utils/CoreUtility.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -49,10 +49,15 @@ /** * Converts an array of Objects into a List of Objects - * @param <T> - * @param array the array to be converted. If this array is null - * then this method will return an empty list; + * + * @param <T> + * @param array + * the array to be converted. If this array is null then this + * method will return an empty list; * @return The list containing the objects passed in. + * + * CONSIDER This should really be eliminated, as the only value over + * Arrays.asList is the null check... - thpr 11/3/06 */ public static <T> List<T> arrayToList(final T[] array) { @@ -390,20 +395,22 @@ */ public static StringBuffer joinToStringBuffer(final Collection<?> strings, final String separator) { + if (strings == null) { + return new StringBuffer(); + } + final StringBuffer result = new StringBuffer(strings.size() * 10); - final Iterator<?> iter = strings.iterator(); - - while (iter.hasNext()) - { - result.append(iter.next().toString()); - - if (iter.hasNext()) - { + boolean needjoin = false; + + for (Object obj : strings) { + if (needjoin) { result.append(separator); } + needjoin = true; + result.append(obj.toString()); } - + return result; } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -28,10 +28,8 @@ import pcgen.gui.utils.JComboBoxEx; import pcgen.persistence.lst.PCClassLstToken; import pcgen.persistence.lst.TokenStore; -import pcgen.util.CollectionUtilities; import pcgen.util.MapCollection; import pcgen.util.enumeration.AttackType; -import plugin.lsttokens.pcclass.SpelllistToken; import javax.swing.*; import java.awt.GridBagConstraints; @@ -42,7 +40,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.StringTokenizer; /** * <code>ClassAbilityPanel</code> @@ -105,8 +102,9 @@ if (a.length() > 0) { - String[] deities = a.split("\\|"); - obj.setDeityList( CoreUtility.arrayToList(deities) ); + PCClassLstToken token = (PCClassLstToken) TokenStore.inst() + .getTokenMap(PCClassLstToken.class).get("DEITY"); + token.parse(obj, a, -9); } a = itemCreate.getText().trim(); @@ -138,11 +136,9 @@ if (a.length() > 0) { obj.clearKnownSpellsList(); - final StringTokenizer aTok = new StringTokenizer(a, "|", false); - - while (aTok.hasMoreTokens()) { - obj.addKnownSpell(aTok.nextToken()); - } + PCClassLstToken token = (PCClassLstToken) TokenStore.inst() + .getTokenMap(PCClassLstToken.class).get("KNOWNSPELLS"); + token.parse(obj, a, -9); } obj.setMemorizeSpells(memorize.getSelectedObjects() != null); @@ -157,7 +153,9 @@ obj.setSpellBookUsed(spellBook.getSelectedObjects() != null); - SpelllistToken.parseSpellList(obj, spellList.getText().trim()); + PCClassLstToken token = (PCClassLstToken) TokenStore.inst() + .getTokenMap(PCClassLstToken.class).get("SPELLLIST"); + token.parse(obj, spellList.getText().trim(), -9); //a = spellStat.getText().trim(); //if (a.length() > 0) @@ -204,7 +202,7 @@ Map<AttackType, String> attackCycleMap = obj.getAttackCycle(); if (attackCycleMap != null) { MapCollection mc = new MapCollection(attackCycleMap); - attackCycle.setText(CollectionUtilities.joinStringRepresentations(mc, Constants.PIPE)); + attackCycle.setText(CoreUtility.join(mc, Constants.PIPE)); } hitDice.setText(String.valueOf(obj.getBaseHitDie())); deity.setText(CoreUtility.join(obj.getDeityList(), '|')); @@ -216,18 +214,9 @@ } castAs.setText(obj.getCastAs()); - StringBuffer known = new StringBuffer(); - for (String str : obj.getKnownSpellsList()) - { - if (known.length() > 0) - { - known.append('|'); - } - known.append(str); - } - knownSpells.setText(known.toString()); + knownSpells.setText(CoreUtility.join(obj.getKnownSpellsList(), "|")); memorize.setSelected(obj.getMemorizeSpells()); - prohibited.setText(CollectionUtilities.joinStringRepresentations(obj.getProhibitedSchools(), ",")); + prohibited.setText(CoreUtility.join(obj.getProhibitedSchools(), ",")); // StringBuffer specKnown = new StringBuffer(); // for (LevelProperty<String> lp : obj.getSpecialtyKnownList()) Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -25,6 +25,7 @@ import pcgen.core.*; import pcgen.core.bonus.BonusObj; import pcgen.core.levelability.LevelAbility; +import pcgen.core.utils.CoreUtility; import pcgen.core.utils.ListKey; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; @@ -202,24 +203,20 @@ for (int x = 1; x <= obj.getMaxLevel(); ++x) { - String c = obj.getCastStringForLevel(x); + List<String> c = obj.getCastListForLevel(x); - if (!c.equals("0") && !c.equals("")) + if (!c.isEmpty()) { - LevelTag lt = new LevelTag(x, LevelTag.TAG_CAST, c); + LevelTag lt = new LevelTag(x, LevelTag.TAG_CAST, CoreUtility.join(c, ",")); levelTagList.add(lt); } } - Object[] oList = obj.getKnownList().toArray(); - - for (int x = 0; x < oList.length; ++x) + for (LevelProperty<List<String>> lp : obj.getKnownList()) { - String c = (String) oList[x]; - - if (!c.equals("0")) + if (!lp.getObject().isEmpty()) { - LevelTag lt = new LevelTag(x + 1, LevelTag.TAG_KNOWN, c); + LevelTag lt = new LevelTag(lp.getLevel(), LevelTag.TAG_KNOWN, CoreUtility.join(lp.getObject(), ",")); levelTagList.add(lt); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -62,6 +62,7 @@ import pcgen.core.character.SpellBook; import pcgen.core.character.SpellInfo; import pcgen.core.spell.Spell; +import pcgen.core.utils.CoreUtility; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; import pcgen.gui.CharacterInfoTab; @@ -78,7 +79,6 @@ import pcgen.gui.utils.LabelTreeCellRenderer; import pcgen.gui.utils.PObjectNode; import pcgen.gui.utils.Utility; -import pcgen.util.CollectionUtilities; import pcgen.util.PropertyFactory; import pcgen.util.enumeration.Tab; @@ -751,7 +751,7 @@ b.append(PropertyFactory .getString("InfoSpells.prohibited.school")); //$NON-NLS-1$ b.append("<b>"); //$NON-NLS-1$ - b.append(CollectionUtilities.joinStringRepresentations(aClass.getProhibitedSchools(), ",")); + b.append(CoreUtility.join(aClass.getProhibitedSchools(), ",")); b.append("</b><br>"); //$NON-NLS-1$ } Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -35,11 +35,11 @@ import pcgen.core.levelability.LevelAbility; import pcgen.core.pclevelinfo.PCLevelInfo; import pcgen.core.spell.Spell; +import pcgen.core.utils.CoreUtility; import pcgen.core.utils.ListKey; import java.util.*; import pcgen.core.pclevelinfo.PCLevelInfoStat; -import pcgen.util.CollectionUtilities; /** * <code>PCGVer2Creator</code><br> @@ -771,6 +771,14 @@ // determine if this class can cast spells boolean isCaster = false; + /* + * TODO WARNING: Technically, this is WRONG. A 4th level Ranger with + * good stats will show up here as as NOT being a caster, but is + * lucky enough to be considered Psionic! zeroCastSpells() is not + * accurate because it is based on the base list, not on the list + * with adjustments for stats. The method should be destroyed, and + * spell casting made more explicit. + */ if (!pcClass.zeroCastSpells()) { isCaster = true; @@ -785,7 +793,7 @@ buffer.append(EntityEncoder.encode(pcClass.getSpellBaseStat())); buffer.append('|'); buffer.append(TAG_CANCASTPERDAY).append(':'); - buffer.append(pcClass.getCastStringForLevel(classLevel)); + buffer.append(pcClass.getCastListForLevel(classLevel)); } List<String> prohibited = pcClass.getProhibitedSchools(); @@ -794,7 +802,7 @@ { buffer.append('|'); buffer.append(TAG_PROHIBITED).append(':'); - buffer.append(EntityEncoder.encode(CollectionUtilities.joinStringRepresentations(prohibited, ","))); + buffer.append(EntityEncoder.encode(CoreUtility.join(prohibited, ","))); } buffer.append(LINE_SEP); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -438,11 +438,10 @@ //Domain must load before CLASS - thpr 10/29/06 domainLoader.loadLstFiles(domainFileList); - //Spell must load before CLASS - thpr 10/30/06 spellLoader.loadLstFiles(spellFileList); + deityLoader.loadLstFiles(deityFileList); classLoader.loadLstFiles(classFileList); - deityLoader.loadLstFiles(deityFileList); // loaded before equipment to cover costs Deleted: Trunk/pcgen/code/src/java/pcgen/util/CollectionUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/CollectionUtilities.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/pcgen/util/CollectionUtilities.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -1,46 +0,0 @@ -/* - * Copyright 2006 (C) Tom Parker <th...@so...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on Oct 21, 2006 - * - * Current Ver: $Revision: 1060 $ - * Last Editor: $Author: boomer70 $ - * Last Edited: $Date: 2006-06-08 23:25:16 -0400 (Thu, 08 Jun 2006) $ - */ -package pcgen.util; - -import java.util.Collection; - -public final class CollectionUtilities { - - public static String joinStringRepresentations(Collection<?> c, - String jointext) { - if (c == null) { - return ""; - } - boolean needjoin = false; - StringBuffer sb = new StringBuffer(); - for (Object obj : c) { - if (needjoin) { - sb.append(jointext); - } - needjoin = true; - sb.append(obj.toString()); - } - return sb.toString(); - } -} Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -28,9 +28,9 @@ import pcgen.core.Constants; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; +import pcgen.core.utils.CoreUtility; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; -import pcgen.util.CollectionUtilities; import java.util.List; import java.util.StringTokenizer; @@ -154,7 +154,7 @@ { PCClass pcClass = pc.getClassList().get(classNumber); List<String> saList = pcClass.getClassSpecialAbilityList(pc); - return CollectionUtilities.joinStringRepresentations(saList, ", "); + return CoreUtility.join(saList, ", "); } return ""; Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredListToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredListToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredListToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -26,9 +26,9 @@ package plugin.exporttokens; import pcgen.core.PlayerCharacter; +import pcgen.core.utils.CoreUtility; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; -import pcgen.util.CollectionUtilities; /** * Handle the FAVOREDLIST token which produces a list of a character's @@ -67,6 +67,6 @@ */ public static String getFavoredListToken(PlayerCharacter pc) { - return CollectionUtilities.joinStringRepresentations(pc.getFavoredClasses(), ", "); + return CoreUtility.join(pc.getFavoredClasses(), ", "); } } Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/LanguagesToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/LanguagesToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/LanguagesToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -27,9 +27,9 @@ import pcgen.core.Language; import pcgen.core.PlayerCharacter; +import pcgen.core.utils.CoreUtility; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; -import pcgen.util.CollectionUtilities; import java.util.ArrayList; import java.util.List; @@ -92,6 +92,6 @@ List<Language> subList = languageList.subList(Math.max(startIndex, 0), Math.min(languageIndex, languageList.size())); - return CollectionUtilities.joinStringRepresentations(subList, ", "); + return CoreUtility.join(subList, ", "); } } Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -27,9 +27,9 @@ import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; +import pcgen.core.utils.CoreUtility; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; -import pcgen.util.CollectionUtilities; import java.util.ArrayList; import java.util.List; @@ -92,6 +92,6 @@ } } - return CollectionUtilities.joinStringRepresentations(stringList, jointext); + return CoreUtility.join(stringList, jointext); } } Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/SpecialListToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/SpecialListToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/SpecialListToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -1,9 +1,9 @@ package plugin.exporttokens; import pcgen.core.PlayerCharacter; +import pcgen.core.utils.CoreUtility; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; -import pcgen.util.CollectionUtilities; /** * @author karianna @@ -35,7 +35,7 @@ delim = ", "; } - return CollectionUtilities.joinStringRepresentations(pc.getSpecialAbilityTimesList(), delim); + return CoreUtility.join(pc.getSpecialAbilityTimesList(), delim); } } Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/TemplateToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/TemplateToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/TemplateToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -29,9 +29,9 @@ import pcgen.core.PlayerCharacter; import pcgen.core.SettingsHandler; import pcgen.core.SpecialAbility; +import pcgen.core.utils.CoreUtility; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; -import pcgen.util.CollectionUtilities; import java.util.List; import java.util.StringTokenizer; @@ -154,7 +154,7 @@ public static String getFeatToken(PCTemplate template, PlayerCharacter pc) { List<String> fList = template.feats(pc.getTotalLevels(), pc.totalHitDice(), pc, false); - return CollectionUtilities.joinStringRepresentations(fList, ", "); + return CoreUtility.join(fList, ", "); } /** @@ -219,7 +219,7 @@ public static String getSAToken(PCTemplate template, PlayerCharacter pc) { List<SpecialAbility> saList = template.getSpecialAbilityList(pc.getTotalLevels(), pc.totalHitDice()); - return CollectionUtilities.joinStringRepresentations(saList, ", "); + return CoreUtility.join(saList, ", "); } /** Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -27,9 +27,9 @@ import pcgen.core.PlayerCharacter; import pcgen.core.Vision; +import pcgen.core.utils.CoreUtility; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; -import pcgen.util.CollectionUtilities; import java.util.ArrayList; import java.util.List; @@ -95,6 +95,6 @@ List<Vision> subList = visionList.subList(Math.max(startIndex, 0), Math.min(visionIndex, visionList.size())); - return CollectionUtilities.joinStringRepresentations(subList, ", "); + return CoreUtility.join(subList, ", "); } } Modified: Trunk/pcgen/code/src/java/plugin/initiative/AttackModel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/initiative/AttackModel.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/initiative/AttackModel.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -30,7 +30,7 @@ import java.util.List; import java.util.StringTokenizer; -import pcgen.util.CollectionUtilities; +import pcgen.core.utils.CoreUtility; /** * <p>Models an attack; that is a weapon or natural weapon with its @@ -213,7 +213,7 @@ */ public String getCritMultiple() { - return CollectionUtilities.joinStringRepresentations(critMultiple, "/"); + return CoreUtility.join(critMultiple, "/"); } /** @@ -301,7 +301,7 @@ */ public String getCritRange() { - return CollectionUtilities.joinStringRepresentations(critRange, "/"); + return CoreUtility.join(critRange, "/"); } /** @@ -428,7 +428,7 @@ */ public String getDamage() { - return CollectionUtilities.joinStringRepresentations(damage, "/"); + return CoreUtility.join(damage, "/"); } /** Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -1,5 +1,9 @@ package plugin.lsttokens.pcclass; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + import pcgen.core.PCClass; import pcgen.persistence.lst.PCClassLstToken; import pcgen.util.Logging; @@ -15,7 +19,14 @@ public boolean parse(PCClass pcclass, String value, int level) { if(level > 0) { - pcclass.setCastMap(level, value); + StringTokenizer st = new StringTokenizer(value, ","); + + List<String> castList = new ArrayList<String>(st.countTokens()); + while (st.hasMoreTokens()) { + castList.add(st.nextToken()); + } + + pcclass.setCast(level, castList); return true; } Logging.errorPrint("CAST tag without level not allowed!"); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DeityToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DeityToken.java 2006-11-04 05:00:55 UTC (rev 1574) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DeityToken.java 2006-11-04 15:29:34 UTC (rev 1575) @@ -1,7 +1,9 @@ package pl... [truncated message content] |
From: <jde...@us...> - 2006-11-12 01:42:46
|
Revision: 1637 http://svn.sourceforge.net/pcgen/?rev=1637&view=rev Author: jdempsey Date: 2006-11-11 17:42:33 -0800 (Sat, 11 Nov 2006) Log Message: ----------- Fix bug #1594900 - Magic armor bonues double counted Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Added Paths: ----------- Trunk/pcgen/code/src/test/plugin/exporttokens/ACTokenTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-11 17:31:03 UTC (rev 1636) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-12 01:42:33 UTC (rev 1637) @@ -7947,7 +7947,8 @@ for ( final PObject pobj : getPObjectList() ) { - if ( pobj != null ) + // We exclude equipmods here as their bonuses are already counted in the equipment they belong to. + if ( pobj != null && !(pobj instanceof EquipmentModifier)) { pobj.activateBonuses(this); Added: Trunk/pcgen/code/src/test/plugin/exporttokens/ACTokenTest.java =================================================================== --- Trunk/pcgen/code/src/test/plugin/exporttokens/ACTokenTest.java (rev 0) +++ Trunk/pcgen/code/src/test/plugin/exporttokens/ACTokenTest.java 2006-11-12 01:42:33 UTC (rev 1637) @@ -0,0 +1,198 @@ +/* + * ACTokenTest.java + * Copyright 2006 (C) James Dempsey <jde...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on Nov 12, 2006 + * + * $Id: BioTokenTest.java 661 2006-04-06 14:35:49Z karianna $ + * + */ +package plugin.exporttokens; + +import junit.framework.Test; +import junit.framework.TestSuite; +import pcgen.AbstractCharacterTestCase; +import pcgen.core.Equipment; +import pcgen.core.EquipmentList; +import pcgen.core.EquipmentModifier; +import pcgen.core.GameMode; +import pcgen.core.PCStat; +import pcgen.core.PlayerCharacter; +import pcgen.core.SettingsHandler; +import pcgen.core.character.EquipSet; + +/** + * <code>ACTokenTest</code> tests the function of the AC token and + * thus the calculations of armor class. + * + * Last Editor: $Author: karianna $ + * Last Edited: $Date: 2006-04-07 00:35:49 +1000 (Fri, 07 Apr 2006) $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: 661 $ + */ +public class ACTokenTest extends AbstractCharacterTestCase +{ + + private EquipmentModifier masterwork; + private EquipmentModifier plus1; + private Equipment chainShirt; + + /** + * Quick test suite creation - adds all methods beginning with "test" + * @return The Test suite + */ + public static Test suite() + { + return new TestSuite(ACTokenTest.class); + } + + /* + * @see TestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + PlayerCharacter character = getCharacter(); + setPCStat(character, "DEX", 14); + PCStat stat = character.getStatList().getStatAt( + SettingsHandler.getGame().getStatFromAbbrev("DEX")); + stat.getBonusList().clear(); + stat.addBonusList("COMBAT|AC|10|TYPE=Base"); + // Ignoring max dex + stat.addBonusList("COMBAT|AC|DEX|TYPE=Ability"); + + EquipSet def = new EquipSet("0.1", "Default"); + character.addEquipSet(def); + character.setCalcEquipmentList(); + + character.calcActiveBonuses(); + + // Create non magic armor + chainShirt = new Equipment(); + chainShirt.setName("Chain Shirt"); + chainShirt.setKeyName("KEY_Chain_Shirt"); + chainShirt.setTypeInfo("Armor.Light.Suit.Standard"); + chainShirt.setACCheck("-2"); + chainShirt.addBonusList("COMBAT|AC|4|TYPE=Armor.REPLACE"); + + // Create magic armor enhancement + masterwork = new EquipmentModifier(); + masterwork.setName("Masterwork"); + masterwork.setKeyName("MWORKA"); + masterwork.setTypeInfo("Armor.Shield"); + masterwork.setItemType("Masterwork"); + masterwork.addBonusList("EQMARMOR|ACCHECK|1|TYPE=Enhancement"); + EquipmentList.getModifierList().add(masterwork); + + plus1 = new EquipmentModifier(); + plus1.setName("Plus 1 Enhancement"); + plus1.setKeyName("PLUS1A"); + plus1.setTypeInfo("Armor.Shield"); + plus1.setPlus("1"); + plus1.setItemType("Enhancement.Magic.Plus1"); + plus1.addBonusList("COMBAT|AC|1|TYPE=Armor.REPLACE"); + EquipmentList.getModifierList().add(plus1); + + // Load AC definitions - but only once + final GameMode gamemode = SettingsHandler.getGame(); + if (!gamemode.isValidACType("Total")) + { + gamemode.addACType("Total ADD:TOTAL"); + gamemode.addACType("Armor ADD:Armor"); + gamemode.addACType("Ability ADD:Ability"); + } + + } + + /* + * @see TestCase#tearDown() + */ + protected void tearDown() throws Exception + { + EquipmentList.getModifierList().remove(masterwork); + EquipmentList.getModifierList().remove(plus1); + masterwork = null; + plus1 = null; + + super.tearDown(); + } + + /** + * Test the character's AC calcs with no armor. + * @throws Exception + */ + public void testBase() throws Exception + { + assertEquals("Total AC no armor", "12", new ACToken().getToken( + "AC.Total", getCharacter(), null)); + + assertEquals("Armor AC no armor", "0", new ACToken().getToken( + "AC.Armor", getCharacter(), null)); + + assertEquals("Ability AC no armor", "2", new ACToken().getToken( + "AC.Ability", getCharacter(), null)); + } + + /** + * Test the character's AC calcs with armor with no equip mods applied. + * @throws Exception + */ + public void testNonMagic() throws Exception + { + PlayerCharacter character = getCharacter(); + EquipSet es = new EquipSet("0.1.2", "Chain Shirt", + chainShirt.getName(), chainShirt); + character.addEquipSet(es); + character.setCalcEquipmentList(); + character.calcActiveBonuses(); + + assertEquals("Ability AC normal armor", "2", new ACToken().getToken( + "AC.Ability", getCharacter(), null)); + + assertEquals("Armor AC with normal armor", "4", new ACToken().getToken( + "AC.Armor", getCharacter(), null)); + + assertEquals("Total AC with normal armor", "16", new ACToken() + .getToken("AC.Total", getCharacter(), null)); + } + + /** + * Test the character's AC calcs with armor with equipmods applied, including magic. + * @throws Exception + */ + public void testMagic() throws Exception + { + PlayerCharacter character = getCharacter(); + chainShirt.addEqModifiers("MWORKA.PLUS1A", true); + EquipSet es = new EquipSet("0.1.2", "Chain Shirt", + chainShirt.getName(), chainShirt); + character.addEquipSet(es); + character.setCalcEquipmentList(); + character.calcActiveBonuses(); + + assertEquals("Ability AC magic armor", "2", new ACToken().getToken( + "AC.Ability", getCharacter(), null)); + + assertEquals("Armor AC with magic armor", "5", new ACToken().getToken( + "AC.Armor", getCharacter(), null)); + + assertEquals("Total AC with magic armor", "17", new ACToken().getToken( + "AC.Total", getCharacter(), null)); + } + +} \ No newline at end of file Property changes on: Trunk/pcgen/code/src/test/plugin/exporttokens/ACTokenTest.java ___________________________________________________________________ Name: keywords + "Author Revision Date Id" Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-11-13 01:41:18
|
Revision: 1650 http://svn.sourceforge.net/pcgen/?rev=1650&view=rev Author: thpr Date: 2006-11-12 17:40:28 -0800 (Sun, 12 Nov 2006) Log Message: ----------- Break Spell Progression out of PCClass, into helper class. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/Domain.java Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/SubClass.java Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java Trunk/pcgen/code/src/java/pcgen/core/chooser/SpellLevelChoiceManager.java Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java Trunk/pcgen/code/src/java/pcgen/gui/ChooseSpellDialog.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/BonusSpellLoader.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterPanel.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ClassSpellLevelPane.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpellListCastToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpellListKnownToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/KnownspellsfromspecialtyToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpecialtyknownToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpelltypeToken.java Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/core/SpellProgressionInfo.java Trunk/pcgen/code/src/test/pcgen/core/SpellProgressionInfoTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/Domain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Domain.java 2006-11-12 21:47:59 UTC (rev 1649) +++ Trunk/pcgen/code/src/java/pcgen/core/Domain.java 2006-11-13 01:40:28 UTC (rev 1650) @@ -108,7 +108,7 @@ for (maxLevel = 0; maxLevel < 10; maxLevel++) { - if (aClass.getCastForLevel(aClass.getLevel(), maxLevel, aPC) == 0) + if (aClass.getCastForLevel(maxLevel, aPC) == 0) { break; } @@ -119,7 +119,7 @@ addSpellsToClassForLevels(aClass, 0, maxLevel - 1); } - if ((maxLevel > 1) && (aClass.getNumSpellsFromSpecialty() == 0)) + if ((maxLevel > 1) && (aClass.getKnownSpellsFromSpecialty() == 0)) { final List<Spell> aList = Globals.getSpellsIn(-1, "", keyName); @@ -127,9 +127,9 @@ { if (gcs.levelForKey("DOMAIN", keyName, aPC) < maxLevel) { - if (aClass.getNumSpellsFromSpecialty() == 0) + if (aClass.getKnownSpellsFromSpecialty() == 0) { - aClass.setNumSpellsFromSpecialty(1); + aClass.setKnownSpellsFromSpecialty(1); break; } } Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-11-12 21:47:59 UTC (rev 1649) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-11-13 01:40:28 UTC (rev 1650) @@ -2556,84 +2556,6 @@ } /** - * Get the minimum level for a spell level - * @param castingClass - * @param spellLevel - * @param allowBonus - * @return minimum level for a spell level - */ - public static int minLevelForSpellLevel(final PCClass castingClass, final int spellLevel, final boolean allowBonus) - { - int minLevel = Constants.INVALID_LEVEL; - - for (LevelProperty<List<String>> lp : castingClass.getCastList()) { - int maxCastable = -1; - - if (allowBonus) { - maxCastable = lp.getObject().size() - 1; - } else { - int j = 0; - for (String st : lp.getObject()) { - try { - if (Integer.parseInt(st) != 0) { - maxCastable = j; - } - } catch (NumberFormatException ignore) { - // ignore - } - j++; - } - } - - if (maxCastable >= spellLevel) { - minLevel = lp.getLevel(); - - break; - } - } - - if (minLevel < Constants.INVALID_LEVEL) { - return minLevel; - } - - for (LevelProperty<List<String>> lp : castingClass.getKnownList()) { - final List<String> knownSpells = lp.getObject(); - - if (knownSpells.size() == 0) { - continue; - } - - int maxCastable = -1; - - if (allowBonus) { - maxCastable = knownSpells.size() - 1; - } else { - int j = 0; - for (String st : knownSpells) { - try { - if (Integer.parseInt(st) != 0) { - maxCastable = j; - } - } catch (NumberFormatException e) { - // TODO: Should this really be ignored? - // CONSIDER This could be a formula, so what does THAT mean - thpr 11/3/06 - Logging.errorPrint("", e); - } - j++; - } - } - - if (maxCastable >= spellLevel) { - minLevel = lp.getLevel(); - - break; - } - } - - return minLevel; - } - - /** * Remove a weapon prof by key * @param name */ Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-12 21:47:59 UTC (rev 1649) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-13 01:40:28 UTC (rev 1650) @@ -23,7 +23,6 @@ package pcgen.core; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -67,51 +66,6 @@ */ public class PCClass extends PObject { /* - * FUTURETYPESAFETY If this really is a Base stat, then this should be - * storing that Stat in a type safe form.... which is a really great idea, - * except for the fact that PCStat actually is SPECIFIC to the - * PlayerCharacter, is cloned as a result, and therefore, storing a PCStat - * here doesn't store the PCStat from the PlayerCharacter, and is therefore - * wrong. Fixing this has a prerequisite of actually 'fixing' PCStat to also - * be Involatile. - */ - /* - * FINALALLCLASSLEVELS The spellBaseStat needs to be stored in EACH individual - * PCClassLevel, since each individual PCClassLevel is granting spells, and - * will be "looked to" to determine the base 'properties' of those spells - */ - private String spellBaseStat = Constants.s_NONE; - - /* - * FUTURETYPESAFETY This should really be storing a PCStat or something else - * that is type safe, not simply a String.... which is a really great idea, - * except for the fact that PCStat actually is SPECIFIC to the - * PlayerCharacter, is cloned as a result, and therefore, storing a PCStat - * here doesn't store the PCStat from the PlayerCharacter, and is therefore - * wrong. Fixing this has a prerequisite of actually 'fixing' PCStat to also - * be Involatile. - */ - /* - * FINALALLCLASSLEVELS The challenge here is that the bonus spells must be - * calculated by the PCClassLevel based on the current Stat (which may - * change over the life of a PC and from one PC to another). However, in a - * literal check, this variable then only needs to be present in the first - * PCClassLevel that can cast any given spell level (otherwise, bonus spells - * will unreasonably stack). I think another variable is needed to indicate - * to a particular PCClassLevel whether it is allowed to grant bonus spells, - * and for what level(s) it grants those bonuses. - * - * Note this is dependent upon how PCClassLevel ends up calculating the - * known and cast spells for any given level. - */ - private String bonusSpellBaseStat = Constants.s_DEFAULT; - - /* - * UNKNOWNDESTINATION Don't know where to put this yet - */ - private int numSpellsFromSpecialty = 0; - - /* * FINALALLCLASSLEVELS Since this applies to a ClassLevel line */ private ArrayList<LevelProperty<Domain>> domainList = null; @@ -147,17 +101,6 @@ private ArrayList<LevelProperty<String>> featList = null; /* - * FUTURETYPESAFETY Currently can't do better than String, because each one - * of these can be a formula, or some special gunk for Psionicists (can we - * clean that up??) - */ - /* - * ALLCLASSLEVELS Since the known list is class level dependent, it needs to - * be stored into each PCClassLevel - */ - private ArrayList<LevelProperty<List<String>>> knownList = null; - - /* * LEVELONEONLY This variable (automatically known spells) only needs to be * loaded into the first PCClassLevel returned by PCClass, because the data * is static (doesn't change by level) and because it will be tested @@ -180,13 +123,6 @@ private ArrayList<String> specialtyList = null; /* - * ALLCLASSLEVELS The specialtyKnownList [based on their level and/or - * LevelProperty (if it gets used)] (not the raw Strings) need to be stored - * in EACH individual PCClassLevel. - */ - private ArrayList<LevelProperty<int[]>> specialtyknownList = null; - - /* * STRINGREFACTOR This is currently taking in a delimited String and should * be taking in a List or somesuch. * @@ -357,25 +293,6 @@ private List<LevelProperty<Vision>> visionList = null; /* - * FUTURETYPESAFETY Currently can't do better than String, because each one - * of these can be a formula, or some special gunk for Psionicists (can we - * clean that up??) - */ - /* - * ALLCLASSLEVELS This goes into each PCClassLevel, although some 'advanced' - * processing may need to take place to do a differential of each class - * (class tables should still be stored in their total form for human - * readibility!). Remember to consider PCClassLevels where 0 spells are - * acquired (vs -) since that is where ability bonuses are triggered... - */ - /* - * REFACTOR Should decide whether this should be LevelProperty<String> and - * allow multiple instances of the same level within the List? that is how - * other variables are working - */ - private List<LevelProperty<List<String>>> castList = null; - - /* * UNKNOWNDESTINATION Actually, the question becomes: Does the CR simply get * added to each PCClassLevel in order to be incremented (in which case the * GAMEMODE files need to change to be incremental, not Formula based - and @@ -561,21 +478,6 @@ private List<String> prohibitedSchools = null; /* - * FUTURETYPESAFETY This should NOT be a String, as Spell Types are a - * specific set of items... This, however is NON Trivial, since Spell Types - * are used WIDELY through the code base. It will be a nice thing to make - * type safe, but it is best done by itself in a checkin specifically - * focused on making Spell Types type safe. - */ - /* - * FINALALLCLASSLEVELS Because this indicates a Spell Type of a Class and - * PCClassLevels are capable of issuing Spells Known and Cast per day, this - * must be passed into each and every PCClassLevel (though it can be given - * in its pure form). - */ - private String spellType = Constants.s_NONE; - - /* * PCCLASSLEVELONLY Since this is not part of a tag and is related to how * spells are related to a PCClassLevel * @@ -626,22 +528,6 @@ private boolean hasSubstitutionClass = false; /* - * FINALALLCLASSLEVELS I think this is appropriate to put into all PCClassLevels, - * since PCClassLevel has the ability to grant known spells and cast spells - * (per day). - */ - /* - * CONSIDER This gets VERY interesting as far as prerequisite checking. - * There is a PRESPELLCASTMEMORIZE tag (or some such) that tests how many - * classes the character has that memorizes spells. That test gets MUCH more - * complicated in a PCClassLevel world, since there will be multiple - * PCClassLevels that memorize spells; all of which will use the same - * PCClass as a base (therefore does the PREREQ need to keep track of the - * matching keys? - I think so, yes.) - */ - private boolean memorizeSpells = true; - - /* * UNKNOWNDESTINATION This seems initially to be part of the Factory that * creates the PCClassLevels, and not something that would end up in * PCClassLevel. This should NOT need to be added to the PCClassLevel since @@ -678,22 +564,6 @@ private boolean multiPreReqs = false; /* - * ALLCLASSLEVELS I think this is appropriate to put into all PCClassLevels, - * since PCClassLevel has the ability to grant known spells and cast spells - * (per day). - */ - /* - * REFACTOR This gets VERY interesting as far as prerequisite checking. - * There is a PRESPELLBOOKTESTER tag (or some such) that tests how many - * classes the character has that memorizes spells. That test gets MUCH more - * complicated in a PCClassLevel world, since there will be multiple - * PCClassLevels that use a spell book; all of which will use the same - * PCClass as a base (therefore does the PREREQ need to keep track of the - * matching keys?) - */ - private boolean usesSpellbook = false; - - /* * LEVELONEONLY Because this indicates a set of prohibitions, it only needs * to be inside one of the PCClassLevels. This is true because the * prohibitions are based on School, Spell Name, etc. and are not specific @@ -759,23 +629,6 @@ private int maxLevel = 20; /* - * DELETEVARIABLE MaxCastLevel is ONLY used in capping the level at which - * the Class can cast spells. This should easily be factorable out at very - * little CPU cost and hopefully a significant increase in clarity (caching - * can be confusing)... - */ - private int maxCastLevel = -1; // max level CAST: tag is found - - /* - * DELETEVARIABLE MaxKnownLevel is ONLY used in determining the known spells - * for a given level. This represents the maximum level at which the Class - * can gain spells. This should easily be factorable out at very little CPU - * cost and hopefully a significant increase in clarity (caching can be - * confusing)... - */ - private int maxKnownLevel = -1; // max level KNOWN: tag is found - - /* * FORMULAREFACTOR This is currently processed elsewhere - should be * processed as a Formula, not a String... */ @@ -790,18 +643,6 @@ private String skillPointFormula = "0"; /* - * ALLCLASSLEVELS This needs to appear in both PCClass and PCClassLevel, on - * all class levels, since it is controlling the behavior of the castMap. - */ - /* - * REFACTOR This is actually a pretty large concern: Like the CR formula, - * this makes the castMap impossible to do in an incremental fashion, - * because the castMap becomes dependent on things that make the - * calculations rather difficult. - */ - private boolean hasSpellFormulas = false; - - /* * TYPESAFETY This is definitely something that needs to NOT be a String, * but it gets VERY complicated to do that, since the keys are widely used * in the variable processor. @@ -848,9 +689,10 @@ */ private HashMap<AttackType, String> attackCycleMap = null; - + private SpellProgressionInfo castInfo = null; + // private DoubleKeyMap<AbilityCategory, Integer, List<String>> theAutoAbilities = null; - + /** * Default Constructor. Constructs an empty PCClass. */ @@ -1023,7 +865,7 @@ * in both PCClass and PCClassLevel */ public final void setBonusSpellBaseStat(final String baseStat) { - bonusSpellBaseStat = baseStat; + getConstructingSpellProgressionInfo().setBonusSpellBaseStatAbbr(baseStat); } /** @@ -1040,7 +882,7 @@ * in both PCClass and PCClassLevel */ public final String getBonusSpellBaseStat() { - return bonusSpellBaseStat; + return castInfo == null ? Constants.s_DEFAULT : castInfo.getBonusSpellBaseStatAbbr(); } /** @@ -1143,11 +985,9 @@ } /** - * Return the number of spells a character can cast in this class for a - * specified level. + * Return the number of spells a character can cast in this class for the + * current level. * - * @param pcLevel - * The number of levels in this class that the character has * @param spellLevel * The spell level we are interested in * @param bookName @@ -1157,41 +997,9 @@ * @return The number of spells per day that this cahracter can cast of this * level. */ - /* - * REFACTOR There seems to be redundant information here (if there - * is a PC, why do we need to know the PC Level? - */ - public int getCastForLevel(final int pcLevel, final int spellLevel, - final String bookName, final PlayerCharacter aPC) { - return getCastForLevel(pcLevel, spellLevel, bookName, true, aPC); - } - - /** - * Return the number of spells a character can cast in this class for a - * specified level. - * - * @param pcLevel - * The number of levels in this class that the character has - * @param spellLevel - * The spell level we are interested in - * @param bookName - * the name of the spell book we are interested in - * @param includeAdj - * Seems to have something to do with speciality spells - * @param aPC - * The character we are interested in - * @return The number of spells per day that this cahracter can cast of this - * level. - */ - /* - * REFACTOR There seems to be redundant information here (if there - * is a PC, why do we need to know the PC Level? - */ - public int getCastForLevel(final int pcLevel, final int spellLevel, - final String bookName, final boolean includeAdj, + public int getCastForLevel(final int spellLevel, final String bookName, final PlayerCharacter aPC) { - return getCastForLevel(pcLevel, spellLevel, bookName, includeAdj, true, - aPC); + return getCastForLevel(spellLevel, bookName, true, true, aPC); } /** @@ -1214,13 +1022,10 @@ * @return The number of spells per day that this cahracter can cast of this * level. */ - /* - * REFACTOR There seems to be redundant information here (if there - * is a PC, why do we need to know the PC Level? - */ - public int getCastForLevel(int pcLevel, final int spellLevel, + public int getCastForLevel(final int spellLevel, final String bookName, final boolean includeAdj, final boolean limitByStat, final PlayerCharacter aPC) { + int pcLevel = getLevel(); int total = 0; int stat = 0; final String classKeyName = "CLASS." + getKeyName(); @@ -1304,7 +1109,9 @@ List<Spell> bList = new ArrayList<Spell>(); if (!aList.isEmpty()) { - if ((ix > 0) && "DIVINE".equalsIgnoreCase(spellType)) { + // Assume no null check on castInfo requried, because + // getNumFromCastList above would have returned -1 + if ((ix > 0) && "DIVINE".equalsIgnoreCase(castInfo.getSpellType())) { for (CharacterDomain cd : aPC.getCharacterDomainList()) { if (cd.isFromPCClass(getKeyName()) && (cd.getDomain() != null)) { @@ -1730,7 +1537,7 @@ * the individual PCClassLevels (because they grant spells) */ public final void setMemorizeSpells(final boolean memorizeSpells) { - this.memorizeSpells = memorizeSpells; + getConstructingSpellProgressionInfo().setMemorizeSpells(memorizeSpells); } /* @@ -1738,7 +1545,8 @@ * the individual PCClassLevels (because they grant spells) */ public final boolean getMemorizeSpells() { - return memorizeSpells; + //Defaults to true, so null returns true + return castInfo == null || castInfo.memorizesSpells(); } /* @@ -1927,7 +1735,7 @@ * active) */ public final void setHasSpellFormula(final boolean arg) { - hasSpellFormulas = arg; + getConstructingSpellProgressionInfo().setContainsSpellFormula(arg); } /* @@ -2168,7 +1976,7 @@ * require this method */ public final void setSpellBaseStat(final String baseStat) { - spellBaseStat = baseStat; + getConstructingSpellProgressionInfo().setSpellBaseStatAbbr(baseStat); } /* @@ -2176,7 +1984,7 @@ * PCClass for PCClassLevel creation (in the factory) */ public final String getSpellBaseStat() { - return spellBaseStat; + return castInfo == null ? Constants.s_NONE : castInfo.getSpellBaseStatAbbr(); } /* @@ -2252,7 +2060,11 @@ * it is a Tag */ public final void setSpellType(final String newType) { - spellType = newType; + if (castInfo == null && Constants.s_NONE.equals(newType)) { + //Don't create a SpellProgressionInfo to set to default!! + return; + } + getConstructingSpellProgressionInfo().setSpellType(newType); } /* @@ -2260,7 +2072,7 @@ * PCClass for PCClassLevel creation (in the factory) */ public final String getSpellType() { - return spellType; + return castInfo == null ? Constants.s_NONE : castInfo.getSpellType(); } /* @@ -2268,20 +2080,7 @@ * it is a Tag [with level dependent differences, of course) */ public void setCast(final int aLevel, final List<String> cast) { - if (castList == null) { - castList = new ArrayList<LevelProperty<List<String>>>(); - } - if (aLevel > maxCastLevel) { - maxCastLevel = aLevel; - } - for (LevelProperty<List<String>> lp : castList) { - if (lp.getLevel() == aLevel) { - castList.remove(lp); - break; - } - } - - castList.add(LevelProperty.getLevelProperty(aLevel, cast)); + getConstructingSpellProgressionInfo().setCast(aLevel, cast); } /* @@ -2292,26 +2091,24 @@ * also appear in PCClass. */ public List<String> getCastListForLevel(int aLevel) { - if (castList != null) { - final int lvl = Math.min(aLevel, maxCastLevel); - for (LevelProperty<List<String>> lp : castList) { - if (lp.getLevel() == lvl) { - return lp.getObject(); - } - } + if (castInfo == null) { + return null; } - return Collections.emptyList(); + return castInfo.getCastForLevel(aLevel); } + public boolean hasCastList() { + return castInfo != null && castInfo.hasCastProgression(); + } + /* * PCCLASSONLY For editing a PCClass and Global checks... */ - public List<LevelProperty<List<String>>> getCastList() { - if (castList == null) { - final List<LevelProperty<List<String>>> ret = Collections.emptyList(); - return Collections.unmodifiableList(ret); + public Map<Integer, List<String>> getCastProgression() { + if (castInfo == null) { + return null; } - return castList; + return castInfo.getCastProgression(); } /** @@ -2320,21 +2117,11 @@ * @return The level of the highest level spell available. */ public int getHighestLevelSpell() { - int highest = -1; - - if (castList != null) { - for (LevelProperty<List<String>> lp : castList) { - highest = Math.max(highest, lp.getObject().size() - 1); - } + if (castInfo == null) { + return -1; } - - if (knownList != null) { - for (LevelProperty<List<String>> lp : knownList) { - highest = Math.max(highest, lp.getObject().size() - 1); - } - } - - return highest; + return Math.max(castInfo.getHighestCastSpellLevel(), + castInfo.getHighestKnownSpellLevel()); } /** @@ -2370,16 +2157,9 @@ * @param aPC * @return int */ - /* - * REFACTOR This, like many of the spell counting methods, contains both - * redundant information (the PC and the PC Level) and also is rather ugly. - * This should really be part of PCClassLevel only, but some major - * rethinking of these methods needs to take place to minimize the number of - * them, and to make sure they are efficiently used. - */ - public int getKnownForLevel(final int pcLevel, final int spellLevel, + public int getKnownForLevel(final int spellLevel, final PlayerCharacter aPC) { - return getKnownForLevel(pcLevel, spellLevel, "null", aPC); + return getKnownForLevel(spellLevel, "null", aPC); } /* @@ -2420,27 +2200,21 @@ /* * PCCLASSONLY This is for PCClass construction and Global queries */ - public List<LevelProperty<List<String>>> getKnownList() { + public Map<Integer, List<String>> getKnownMap() { if (Constants.EMPTY_STRING.equals(castAs) || getKeyName().equals(castAs)) { - if (knownList == null) { - final List<LevelProperty<List<String>>> ret = Collections.emptyList(); - return Collections.unmodifiableList(ret); + if (castInfo == null) { + return null; } - return knownList; + return castInfo.getKnownProgression(); } final PCClass aClass = Globals.getClassKeyed(castAs); - if (aClass != null) { - return aClass.getKnownList(); + return aClass.getKnownMap(); } - if (knownList == null) { - final List<LevelProperty<List<String>>> ret = Collections.emptyList(); - return Collections.unmodifiableList(ret); - } - return knownList; + throw new IllegalStateException("Unknown Class for CASTAS: " + castAs); } /* @@ -2453,41 +2227,10 @@ return aClass.hasKnownList(); } } - return knownList != null && !knownList.isEmpty(); + return castInfo != null && castInfo.hasKnownProgression(); } /** - * Return KNOWN: List for a level - * - * @param aInt - * The level of the class to be retrieved - * @return String The KNOWN List, if any - */ - /* - * PCCLASSLEVELONLY This is required in PCClassLevel since it is level - * dependent (though it no longer needs the int argument :) ). Note this - * should also be refactored (as part of the getKnownList() rebuild) to pass - * around something more intelligent than a String. - */ - public List<String> getKnownListForLevel(int aInt) { - /* - * CONSIDER We need to think about where this max level check goes - if - * there is a KNOWN for Level 20 and not for Level 21, does the KNOWN - * for level 20 get applied into the PCClassLevel object for Level 21, - * or not? - thpr 11/4/06 - */ - if (aInt > maxKnownLevel) { - aInt = maxKnownLevel; - } - for (LevelProperty<List<String>> lp : knownList) { - if (lp.getLevel() == aInt) { - return lp.getObject(); - } - } - return Collections.emptyList(); - } - - /** * @return The list of automatically known spells. */ /* @@ -2504,29 +2247,16 @@ /* * PCCLASSONLY This is required in PCClass for PCClass editing + * + * DELETEMETHOD - this isn't used??? Or perhaps that indicates + * that the GUI LST CLASS editor is incomplete :) */ - public final Collection<LevelProperty<int[]>> getSpecialtyKnownList() { - if (specialtyknownList == null) { - final List<LevelProperty<int[]>> ret = Collections.emptyList(); - return Collections.unmodifiableList(ret); + public final Map<Integer, List<String>> getSpecialtyKnownList() { + if (castInfo == null) { + return null; } - return Collections.unmodifiableList(specialtyknownList); + return castInfo.getSpecialtyKnownMap(); } - - /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in - * PCClass for PCClassLevel creation (in the factory) - */ - public final int[] getSpecialtyKnownList(int aLevel) { - if (specialtyknownList != null) { - for (LevelProperty<int[]> lp : specialtyknownList) { - if (lp.getLevel() == aLevel) { - return lp.getObject(); - } - } - } - return null; - } /** * Adds the numeric value given to the number of specialty school spells @@ -2542,11 +2272,8 @@ * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public final void addSpecialtyKnown(int aLevel, int[] array) { - if (specialtyknownList == null) { - specialtyknownList = new ArrayList<LevelProperty<int[]>>(); - } - specialtyknownList.add(LevelProperty.getLevelProperty(aLevel, array)); + public final void addSpecialtyKnown(int aLevel, List<String> aList) { + getConstructingSpellProgressionInfo().setSpecialtyKnown(aLevel, aList); } /** @@ -2566,20 +2293,18 @@ */ public int getNumFromCastList(final int iCasterLevel, final int iSpellLevel, final PlayerCharacter aPC) { - int aNum = -1; if (iCasterLevel == 0) { // can't cast spells! - return aNum; + return -1; } - int useCastLevel = iCasterLevel > maxCastLevel ? maxCastLevel : iCasterLevel; - - List<String> castListForLevel = getCastListForLevel(useCastLevel); - if (iSpellLevel >= castListForLevel.size()) { - return aNum; + List<String> castListForLevel = getCastListForLevel(iCasterLevel); + if (castListForLevel == null || iSpellLevel >= castListForLevel.size()) { + return -1; } String aString = castListForLevel.get(iSpellLevel); + int aNum; if ((aPC != null) && hasSpellFormula()) { aNum = aPC.getVariableValue(aString, "").intValue(); } else { @@ -2594,30 +2319,16 @@ } /* - * REFACTOR This is a real challenge. This method is actually set from - * Domain, as Domain can actually grant domain spells as an addition to the - * PCClass. This is a challenge to define how this will actually play out in - * the new implementation (When PCClass is static and creates a - * PCClassLevel, where do the spells from the Domain come into play?? How - * are they added to the character?) Potentially they are added directly to - * the PCClassLevel and the refactoring to make PCClassLevel immutable will - * have to take place at a later time (As we approach 6.0) - */ - public final void setNumSpellsFromSpecialty(final int anInt) { - numSpellsFromSpecialty = anInt; - } - - /* * REFACTOR Again, there is rudundant information here in the fetching of * what is currently possible for the current character level. This is * generally something that should only appear in the PCClassLevel, but * should be considered with the wider range of "what can I really cast" * methods that are tagged to be refactored. */ - public String getBonusCastForLevelString(final int pcLevel, + public String getBonusCastForLevelString( final int spellLevel, final String bookName, final PlayerCharacter aPC) { - if (getCastForLevel(pcLevel, spellLevel, bookName, aPC) > 0) { + if (getCastForLevel(spellLevel, bookName, true, true, aPC) > 0) { // if this class has a specialty, return +1 if (hasSpecialtyList()) { return "+1"; @@ -2629,7 +2340,7 @@ // if the spelllevel is >0 and this class has a characterdomain // associated with it, return +1 - if ((spellLevel > 0) && "DIVINE".equalsIgnoreCase(spellType)) { + if ((spellLevel > 0) && "DIVINE".equalsIgnoreCase(getSpellType())) { for (CharacterDomain cd : aPC.getCharacterDomainList()) { if (cd.isFromPCClass(getKeyName())) { return "+1"; @@ -2645,22 +2356,16 @@ * Return the number of spells a character can cast in this class for a * specified level. * - * @param pcLevel - * The number of levels in this class that the character has * @param spellLevel * The spell level we are interested in * @param aPC * The character we are interested in - * @return The number of spells per day that this cahracter can cast of this - * level. + * @return The number of spells per day that this character can cast of the + * given spell level. */ - /* - * REFACTOR Yea, Yea, yet another interface to the same internal methods... - */ - public int getCastForLevel(final int pcLevel, final int spellLevel, - final PlayerCharacter aPC) { - return getCastForLevel(pcLevel, spellLevel, Globals - .getDefaultSpellBook(), true, aPC); + public int getCastForLevel(final int spellLevel, final PlayerCharacter aPC) { + return getCastForLevel(spellLevel, Globals.getDefaultSpellBook(), true, + true, aPC); } /** @@ -2676,7 +2381,7 @@ * REFACTOR More redundant information and opportunity to refactor to * simplify the interface of PCClassLevel */ - public int getSpecialtyKnownForLevel(int pcLevel, final int spellLevel, + public int getSpecialtyKnownForLevel(final int spellLevel, final PlayerCharacter aPC) { int total; total = (int) aPC.getTotalBonusTo("SPECIALTYSPELLKNOWN", "CLASS." @@ -2684,6 +2389,7 @@ total += (int) aPC.getTotalBonusTo("SPECIALTYSPELLKNOWN", "TYPE." + getSpellType() + ";LEVEL." + spellLevel); + int pcLevel = getLevel(); pcLevel += (int) aPC.getTotalBonusTo("PCLEVEL", keyName); pcLevel += (int) aPC.getTotalBonusTo("PCLEVEL", "TYPE." + getSpellType()); @@ -2700,20 +2406,28 @@ } } - int[] specKnown = getSpecialtyKnownList(pcLevel); - if (specKnown != null) - { - if (specKnown.length > spellLevel) { - total += specKnown[spellLevel]; + if (castInfo != null) { + List<String> specKnown = castInfo.getSpecialtyKnownForLevel(pcLevel); + if (specKnown != null) + { + if (specKnown.size() > spellLevel) { + int t; + if (castInfo.containsSpellFormula()) { + t = aPC.getVariableValue(specKnown.get(spellLevel), "").intValue(); + } else { + t = Integer.parseInt(specKnown.get(spellLevel)); + } + total += t; + } } - } - // if we have known spells (0==no known spells recorded) or a psi - // specialty. - if ((total > 0) && (spellLevel > 0)) { - // make sure any slots due from specialties (including domains) are - // added - total += numSpellsFromSpecialty; + // if we have known spells (0==no known spells recorded) or a psi + // specialty. + if ((total > 0) && (spellLevel > 0)) { + // make sure any slots due from specialties (including domains) are + // added + total += castInfo.getKnownSpellsFromSpecialty(); + } } return total; @@ -3474,6 +3188,13 @@ public List<LevelProperty<String>> getSRlist() { if (SR == null) { + /* + * CONSIDER This is a heavy-weight get... and inconsistent with + * getFeatList, et al. What should be the proper method (should the + * caller be required to gate on null, should these be safe gets, + * should the variables be initialized empty lists??) - thpr + * 11/10/06 + */ SR = new ArrayList<LevelProperty<String>>(); } return SR; @@ -3494,19 +3215,19 @@ } /* - * PCCLASSANDLEVEL Since this is in the PCClass (from a Tag) and + * FINALPCCLASSANDLEVEL Since this is in the PCClass (from a Tag) and * PCClassLevel (as an indication of the spells granted by the PCClassLevel) */ public final void setSpellBookUsed(final boolean argUseBook) { - usesSpellbook = argUseBook; + getConstructingSpellProgressionInfo().setSpellBookUsed(argUseBook); } /* - * PCCLASSANDLEVEL Since this is in the PCClass (from a Tag) and + * FINALPCCLASSANDLEVEL Since this is in the PCClass (from a Tag) and * PCClassLevel (as an indication of the spells granted by the PCClassLevel) */ public final boolean getSpellBookUsed() { - return usesSpellbook; + return castInfo != null && castInfo.usesSpellBook(); } public void setCRFormula(final String argCRFormula) { @@ -3559,11 +3280,12 @@ pccTxt.append(CoreUtility.join(prohibitedSchools, ",")); } - checkAdd(pccTxt, Constants.s_NONE, "SPELLSTAT:", spellBaseStat); - checkAdd(pccTxt, Constants.s_NONE, "SPELLTYPE:", spellType); - - if (usesSpellbook) { - pccTxt.append("\tSPELLBOOK:Y"); + if (castInfo != null) { + checkAdd(pccTxt, Constants.s_NONE, "SPELLSTAT:", castInfo.getSpellBaseStatAbbr()); + checkAdd(pccTxt, Constants.s_NONE, "SPELLTYPE:", castInfo.getSpellType()); + if (castInfo.usesSpellBook()) { + pccTxt.append("\tSPELLBOOK:Y"); + } } // if (skillPoints != 0) @@ -3590,8 +3312,8 @@ pccTxt.append("\tMAXLEVEL:").append(maxLevel); } - if (!memorizeSpells) { - pccTxt.append("\tMEMORIZE:N"); + if (castInfo != null) { + pccTxt.append("\tMEMORIZE:" + (castInfo.memorizesSpells() ? "Y" : "N")); } if (multiPreReqs) { @@ -3647,27 +3369,16 @@ } } - if (specialtyknownList != null) { - for (LevelProperty<int[]> lp : specialtyknownList) { - pccTxt.append(lineSep).append(lp.getLevel()).append("\tSPECIALTYKNOWN:") - .append(CoreUtility.join(Arrays.asList(lp.getObject()), ",")); - } + if (castInfo != null && castInfo.hasSpecialtyKnownProgression()) { + pccTxt.append(castInfo.getSpecialtyKnownPCC(lineSep)); } - - pccTxt.append(lineSep); - - if (castList != null) { - for (LevelProperty<List<String>> lp : castList) { - checkAdd(pccTxt, "0", lineSep + lp.getLevel() + "\tCAST:", - CoreUtility.join(lp.getObject(), ",")); - } + + if (castInfo != null && castInfo.hasCastProgression()) { + pccTxt.append(castInfo.getCastPCC(lineSep)); } - - if (knownList != null) { - for (LevelProperty<List<String>> lp : knownList) { - checkAdd(pccTxt, "0", lineSep + lp.getLevel() + "\tKNOWN:", - CoreUtility.join(lp.getObject(), ",")); - } + + if (castInfo != null && castInfo.hasKnownProgression()) { + pccTxt.append(castInfo.getKnownPCC(lineSep)); } // Output the level based DR only @@ -4049,24 +3760,18 @@ featList.add(LevelProperty.getLevelProperty(aLevel, aFeatList)); } + private SpellProgressionInfo getConstructingSpellProgressionInfo() { + if (castInfo == null) { + castInfo = new SpellProgressionInfo(); + } + return castInfo; + } /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public void setKnown(final int iLevel, final List<String> aList) { - if (knownList == null) { - knownList = new ArrayList<LevelProperty<List<String>>>(); - } - if (iLevel > maxKnownLevel) { - maxKnownLevel = iLevel; - } - for (LevelProperty<List<String>> lp : knownList) { - if (lp.getLevel() == iLevel) { - knownList.remove(lp); - break; - } - } - knownList.add(LevelProperty.getLevelProperty(iLevel, aList)); + getConstructingSpellProgressionInfo().setKnown(iLevel, aList); } /* @@ -4286,7 +3991,7 @@ // final int i = (int) this.getBonusTo("TOHIT", "TOHIT", level) + (int) // getBonusTo("COMBAT", "BAB"); - final int i = (int) getBonusTo("COMBAT", "BAB", aPC); + final int i = (int) getBonusTo("COMBAT", "BAB", level, aPC); return i; } @@ -4398,6 +4103,7 @@ return aString.toString(); } + @Override public Object clone() { PCClass aClass = null; @@ -4411,16 +4117,9 @@ } // aClass.setSkillPoints(skillPoints); // aClass.setAttackBonusType(attackBonusType); - if (specialtyknownList != null) { - aClass.specialtyknownList = new ArrayList<LevelProperty<int[]>>( - specialtyknownList); + if (castInfo != null) { + aClass.castInfo = castInfo.clone(); } - if (knownList != null) { - aClass.knownList = new ArrayList<LevelProperty<List<String>>>(knownList); - } - if (castList != null) { - aClass.castList = new ArrayList<LevelProperty<List<String>>>(castList); - } // TODO - This should be removed aClass.uattList = new ArrayList<String>(uattList); // aClass.acList = new ArrayList<String>(acList); @@ -4455,8 +4154,6 @@ aClass.stableSpellKey = null; aClass.setLevelExchange(levelExchange); - aClass.maxCastLevel = maxCastLevel; - aClass.maxKnownLevel = maxKnownLevel; aClass.multiPreReqs = multiPreReqs; aClass.deityList = new ArrayList<String>(deityList); @@ -4489,8 +4186,6 @@ aClass.hasSubstitutionClass = hasSubstitutionClass; aClass.substitutionClassList = substitutionClassList; - aClass.hasSpellFormulas = hasSpellFormulas; - if (naturalWeapons != null) { aClass.naturalWeapons = new ArrayList<LevelProperty<Equipment>>( naturalWeapons); @@ -4510,7 +4205,7 @@ * active) */ public final boolean hasSpellFormula() { - return hasSpellFormulas; + return castInfo != null && castInfo.containsSpellFormula(); } /* @@ -4712,7 +4407,7 @@ */ public boolean hasKnownSpells(final PlayerCharacter aPC) { for (int i = 0; i <= getHighestLevelSpell(); i++) { - if (getKnownForLevel(getLevel(), i, aPC) > 0) { + if (getKnownForLevel(i, aPC) > 0) { return true; } } @@ -4833,11 +4528,18 @@ * after all... */ public boolean zeroCastSpells() { - if (castList == null) { + if (castInfo == null) { return true; } - for (LevelProperty<List<String>> lp : castList) { - for (String st : lp.getObject()) { + /* + * CONSIDER This is just blatently wrong because it is not considering + * formulas, and not considering bonuses... - thpr 11/8/06 + * + * May not be a big issue other than a poorly named method, but + * need to check what is really required here + */ + for (List<String> l : castInfo.getCastProgression().values()) { + for (String st : l) { try { if (Integer.parseInt(st) > 0) { return false; @@ -4937,11 +4639,7 @@ * @param aPC * @return known for spell level */ - /* - * REFACTOR There seems to be redundant information here (if there - * is a PC, why do we need to know the PC Level? - */ - int getKnownForLevel(int pcLevel, final int spellLevel, + int getKnownForLevel(final int spellLevel, final String bookName, final PlayerCharacter aPC) { int total = 0; int stat = 0; @@ -4949,11 +4647,15 @@ final String levelSpellLevel = ";LEVEL." + spellLevel; final String allSpellLevel = ";LEVEL.All"; + int pcLevel = getLevel(); pcLevel += (int) aPC.getTotalBonusTo("PCLEVEL", keyName); pcLevel += (int) aPC.getTotalBonusTo("PCLEVEL", "TYPE." + getSpellType()); - if ((castList != null) + /* + * CONSIDER Why is known testing getNumFromCastList??? - thpr 11/8/06 + */ + if ((castInfo != null) && castInfo.hasCastProgression() && (getNumFromCastList(pcLevel, spellLevel, aPC) < 0)) { // Don't know any spells of this level // however, character might have a bonus spells e.g. from certain @@ -4961,9 +4663,6 @@ return (int) aPC.getTotalBonusTo("SPELLKNOWN", classKeyName + levelSpellLevel); } - if (pcLevel > maxKnownLevel) { - pcLevel = maxKnownLevel; - } total += (int) aPC.getTotalBonusTo("SPELLKNOWN", classKeyName + levelSpellLevel); @@ -5018,27 +4717,22 @@ mult = 1; } + if (castInfo == null) { + return total; + } + boolean psiSpecialty = false; - if (knownList != null && !knownList.isEmpty()) { - String spells = null; - for (LevelProperty<List<String>> lp : knownList) { - if (lp.getLevel() == pcLevel) { - spells = lp.getObject().get(spellLevel); - break; - } - } + if (castInfo.hasKnownProgression()) { + String spells = castInfo.getKnownForLevel(pcLevel).get(spellLevel); if (spells.endsWith("+d")) { psiSpecialty = true; - - if (spells.length() > 1) { - spells = spells.substring(0, spells.length() - 2); - } + spells = spells.substring(0, spells.length() - 2); } int t; - if (hasSpellFormula()) { + if (castInfo.containsSpellFormula()) { t = aPC.getVariableValue(spells, "").intValue(); } else { t = Integer.parseInt(spells); @@ -5063,7 +4757,7 @@ } if (psiSpecialty) { - total += numSpellsFromSpecialty; + total += castInfo.getKnownSpellsFromSpecialty(); } } @@ -5072,16 +4766,12 @@ if (((total > 0) && (spellLevel > 0)) && !psiSpecialty) { // make sure any slots due from specialties // (including domains) are added - total += numSpellsFromSpecialty; + total += castInfo.getKnownSpellsFromSpecialty(); } return total; } - final int getNumSpellsFromSpecialty() { - return numSpellsFromSpecialty; - } - /* * REFACTOR Exactly where does this end up? I think that passing a * PlayerCharacter into an object like PCClass is generally (but certainly @@ -5932,15 +5622,6 @@ } } - /* - * DELETEMETHOD This only has one local call and adds no value to the interface - * of PCClass (delete through inlining) - */ - private double getBonusTo(final String type, final String mname, - final PlayerCharacter aPC) { - return getBonusTo(type, mname, level, aPC); - } - /** * This method can be called to determine if the number of extra HD for * purposes of skill points, feats, etc. See MM p. 11 extracted 03 Dec 2002 @@ -6012,7 +5693,7 @@ if ((val == null) || val == 0 || (aSpell == null)) { return false; } - } else if ((getCastForLevel(level, spellLevel, aPC) == 0) + } else if ((getCastForLevel(spellLevel, aPC) == 0) || (aSpell == null)) { return false; } @@ -6152,7 +5833,7 @@ castForLevelMap = new HashMap<Integer, Integer>(100); } for (int i = 0; i < 100; i++) { - final int s = getCastForLevel(level, i, aPC); + final int s = getCastForLevel(i, aPC); castForLevelMap.put(i, s); } } @@ -6988,18 +6669,6 @@ } /** - * Returns the highest spell level for which a KNOWN: tag entry was found. - * - * @return The highest spell level this class can know spells to. - */ - /* - * DELETEMETHOD since maxknownlevel is going to be deleted - */ - public int getMaxKnownSpellLevel() { - return this.maxKnownLevel; - } - - /** * Parse the ATTACKCYCLE: string and build HashMap Only allowed values in * attackCycle are: BAB, RAB or UAB * @@ -7052,7 +6721,33 @@ } return; } + + public int getMinLevelForSpellLevel(int spellLevel, boolean allowBonus) { + if (castInfo == null) { + return -1; + } + return castInfo.getMinLevelForSpellLevel(spellLevel, allowBonus); + } + + public int getMaxSpellLevelForClassLevel(int classLevel) { + if (castInfo == null) { + return -1; + } + return castInfo.getMaxSpellLevelForClassLevel(classLevel); + } + public void setKnownSpellsFromSpecialty(int i) { + if (castInfo == null && i == 0) { + //Avoid useless construction of castInfo + return; + } + getConstructingSpellProgressionInfo().setKnownSpellsFromSpecialty(i); + } + + public int getKnownSpellsFromSpecialty() { + return castInfo == null ? 0 : castInfo.getKnownSpellsFromSpecialty(); + } + // public void removeAutoAbilities(final AbilityCategory aCategory, final int aLevel) // { // if ( aCategory == AbilityCategory.FEAT ) Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-12 21:47:59 UTC (rev 1649) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-13 01:40:28 UTC (rev 1650) @@ -7182,16 +7182,16 @@ // Now let's see if they should be able to add this spell // first check for known/cast/threshold - final int known = aClass.getKnownForLevel(aClass.getLevel(), spellLevel, this); + final int known = aClass.getKnownForLevel(spellLevel, this); int specialKnown = 0; - final int cast = aClass.getCastForLevel(aClass.getLevel(), adjSpellLevel, bookName, true, true, this); + final int cast = aClass.getCastForLevel(adjSpellLevel, bookName, true, true, this); aClass.memorizedSpellForLevelBook(adjSpellLevel, bookName); final boolean isDefault = bookName.equals(Globals.getDefaultSpellBook()); if (isDefault) { - specialKnown = aClass.getSpecialtyKnownForLevel(aClass.getLevel(), spellLevel, this); + specialKnown = aClass.getSpecialtyKnownForLevel(spellLevel, this); } int numPages = 0; @@ -7256,8 +7256,7 @@ && availableSpells(adjSpellLevel, aClass, bookName, false, true)) { ret = "Your remaining slot(s) must be filled with your speciality or domain."; - maxAllowed = aClass.getCastForLevel(aClass.getLevel(), - adjSpellLevel, bookName, false, true, this); + maxAllowed = aClass.getCastForLevel(adjSpellLevel, bookName, false, true, this); } else { @@ -8171,9 +8170,8 @@ && !aClass.getSpellType().equalsIgnoreCase(Constants.s_NONE)) { // Get the number of known spells for the level - final int classLevel = aClass.getLevel(); - int knownForLevel = aClass.getKnownForLevel(classLevel, spellLevel, this); - knownForLevel += aClass.getSpecialtyKnownForLevel(classLevel, spellLevel, this); + int knownForLevel = aClass.getKnownForLevel(spellLevel, this); + knownForLevel += aClass.getSpecialtyKnownForLevel(spellLevel, this); if (knownForLevel >= minNumSpells) { return true; @@ -8181,7 +8179,7 @@ // See if the character can cast // at the required spell level - if (aClass.getCastForLevel(classLevel, spellLevel, this) >= minNumSpells) + if (aClass.getCastForLevel(spellLevel, this) >= minNumSpells) { return true; } @@ -12032,15 +12030,15 @@ // Get the number of castable slots if (knownLearned) { - knownNon = aClass.getKnownForLevel(aClass.getLevel(), i, bookName, this); - knownSpec = aClass.getSpecialtyKnownForLevel(aClass.getLevel(), i, this); + knownNon = aClass.getKnownForLevel(i, bookName, this); + knownSpec = aClass.getSpecialtyKnownForLevel(i, this); knownTot = knownNon + knownSpec; // TODO: : value never used } else { // Get the number of castable slots - knownTot = aClass.getCastForLevel(aClass.getLevel(), i, bookName, true, true, this); - knownNon = aClass.getCastForLevel(aClass.getLevel(), i, bookName, false, true, this); + knownTot = aClass.getCastForLevel(i, bookName, true, true, this); + knownNon = aClass.getCastForLevel(i, bookName, false, true, this); knownSpec = knownTot - knownNon; } @@ -12107,15 +12105,15 @@ { if (knownLearned) { - knownNon = aClass.getKnownForLevel(aClass.getLevel(), i, bookName, this); - knownSpec = aClass.getSpecialtyKnownForLevel(aClass.getLevel(), i, this); + knownNon = aClass.getKnownForLevel(i, bookName, this); + knownSpec = aClass.getSpecialtyKnownForLevel(i, this); knownTot = knownNon + knownSpec; // for completeness } else { // Get the number of castable slots - knownTot = aClass.getCastForLevel(aClass.getLevel(), i, bookName, true, true, this); - knownNon = aClass.getCastForLevel(aClass.getLevel(), i, bookName, false, true, this); + knownTot = aClass.getCastForLevel(i, bookName, true, true, this); + knownNon = aClass.getCastForLevel(i, bookName, false, true, this); knownSpec = knownTot - knownNon; } Added: Trunk/pcgen/code/src/java/pcgen/core/SpellProgressionInfo.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpellProgressionInfo.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/core/SpellProgressionInfo.java 2006-11-13 01:40:28 UTC (rev 1650) @@ -0,0 +1,1051 @@ +/* + * PCLevelCastingInfo.java + * Copyright 2006 (C) Tom Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created: November 8, 2006 + * + * $Id: PCClass.java 1605 2006-11-08 02:14:21Z thpr $ + */ +package pcgen.core; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.Map.Entry; + +import pcgen.core.utils.CoreUtility; + +/** + * SpellProgressionInfo contains information about Spell Progression in support + * of a PCClass. + * + * @author Tom Parker <th...@us...> + */ +public class SpellProgressionInfo implements Cloneable { + + /* + * FUTURETYPESAFETY Currently can't do better than String in knownMap, + * castMap and specialtyKnownMap, because each one of these can be a + * formula, or some special gunk for Psionicists (can we clean up the +d??) + */ + + /** + * This is a Progression of KNOWN spells. + */ + private Progression knownProgression = null; + + /** + * This is a Progression KNOWN spells added by a specialty. + */ + private Progression specialtyKnownProgression = null; + + /** + * This is a Progression of CAST spells. + */ + private Progression castProgression = null; + + /* + * FUTURETYPESAFETY This should NOT be a String, as Spell Types are a + * specific set of items... This, however is NON Trivial, since Spell Types + * are used WIDELY through the code base. It will be a nice thing to make + * type safe, but it is best done by itself in a checkin specifically + * focused on making Spell Types type safe. + * + * In the future it would be nice to have this in SpellProgressionInfo, but + * that is not possible today because this defaults to 'None' and SOOO much + * of the code actually depends on this being non-null. This should be one + * of the implicit tasks (moving this) which is part of the project to make + * Spell Types Type Safe. + */ + private String spellType = null; + + /* + * FUTURETYPESAFETY If this really is a Base stat, then this should be + * storing that Stat in a type safe form.... which is a really great idea, + * except for the fact that PCStat actually is SPECIFIC to the + * PlayerCharacter, is cloned as a result, and therefore, storing a PCStat + * here doesn't store the PCStat from the PlayerCharacter, and is therefore + * wrong. Fixing this has a prerequisite of actually 'fixing' PCStat to also + * be Involatile. + */ + /** + * This is the abbreviation of the base PCStat used to the attribute on + * which a Spell caster casts spells. It may also indicate the attribute + * used to determine bonus spells, if bonusSpellBaseStatAbbr is set to + * DEFAULT + */ + private String spellBaseStatAbbr = Constants.s_NONE; + + /* + * FUTURETYPESAFETY This should really be storing a PCStat or something else + * that is type safe, not simply a String.... which is a really great idea, + * except for the fact that PCStat actually is SPECIFIC to the + * PlayerCharacter, is cloned as a result, and therefore, storing a PCStat + * here doesn't store the PCStat from the PlayerCharacter, and is therefore + * wrong. Fixing this has a prerequisite of actually 'fixing' PCStat to also + * be Involatile. + */ + /* + * CONSIDER The challenge here is that the bonus spells must be calculated + * by the PCClassLevel based on the current Stat (which may change over the + * life of a PC and from one PC to another). However, in a literal check, + * this variable then only needs to be present in the first PCClassLevel + * that can cast any given spell level (otherwise, bonus spells will + * unreasonably stack). I think another variable is needed to indicate to a + * particular PCClassLevel whether it is allowed to grant bonus spells, and + * for what level(s) it grants those bonuses. + * + * Note this is dependent upon how PCClassLevel ends up calculating the + * known and cast spells for any given level. + */ + /** + * The abbreviation of the PCStat used to determine the bonus spells for a + * spell caster. Is set to DEFAULT, then the bonus spells are determined by + * the attribute abbreviated in spellBaseStatAddr. + */ + private String bonusSpellBaseStatAbbr = Constants.s_DEFAULT; + + /** + * This indicates whether the knownMap, specialtyKnownMap and castMap are + * allowed to contain a Formula. This is used to accelerate processing of + * non-Formula Spell lists. + */ + private boolean hasSpellFormulas = false; + + /* + * CONSIDER This gets VERY interesting as far as prerequisite checking. + * There is a PRESPELLCASTMEMORIZE tag (or some such) that tests how many + * classes the character has that memorizes spells. That test gets MUCH more + * complicated in a PCClassLevel world, since there will be multiple + * PCClassLevels that memorize spells; all of which will use the same + * PCClass as a base (therefore does the PREREQ need to keep track of the + * matching keys? - I think so, yes.) + */ + /** + * Indicates if this Spell Progression represents memorized spells. + */ + private boolean memorizeSpells = true; + + /* + * CONSIDER This gets VERY interesting as far as prerequisite checking. + * There is a PRESPELLBOOKTESTER tag (or some such) that tests how many + * classes the character has that memorizes spells. That test gets MUCH more + * complicated in a PCClassLevel world, since there will be multiple + * PCClassLevels that use a spell book; all of which will use the same + * PCClass as a base (therefore does the PREREQ need to keep track of the + * matching keys?) + */ + /** + * Indicates if this SpellProgression is associated with using a Spell Book + */ + private boolean usesSpellBook = false; + + /** + * Indicates the number of KNOWN spells from a Specialty (such as a + * SubClass) + */ + private int knownSpellsFromSpecialty = 0; + + /** + * Sets the Known spells for the given class level for this + * SpellProgression. The given character level must be greater than or equal + * to one. + * + * Note that this is a SET (not an ADD) and will therefore OVERWRITE a KNOWN + * spell progression for the given class level if one is already present + * within this SpellProgression. + * + * @param iLevel + * The class level for which the given known spell progression + * applies. + * @param aList + * The known spell progression for the given class level. + * @return The previously set KNOWN spell progression for the given class + * level; null if no KNOWN spell progression was previously set. + */ + public List<String> setKnown(int iLevel, List<String> aList) { + if (knownProgression == null) { + knownProgression = new Progression(); + } + return knownProgression.setProgression(iLevel, aList); + } + + /** + * Returns true if this SpellProgression contains a KNOWN spell progression. + * (this is not required, e.g. OGL Wizards do not have a KNOWN spell + * progression, rather they are limited by what spells are in their + * spellbook(s)) + * + * @return True if this SpellProgression contains a known spell progression; + * false otherwise. + */ + public boolean hasKnownProgression() { + return knownProgression != null && knownProgression.hasProgression(); + } + + /** + * Returns the known spell progression for this SpellProgression. + * + * **WARNING** This method exposes the internal contents of this + * SpellProgression object. This method is therefore reference-semantic, and + * the returned Map and the Lists contained within the Map should be + * considered owned by this SpellProgression. The returned Map and Lists it + * contains should not be altered. + * + * CONSIDER How to get rid of this - it makes this Object accidentally + * mutable. - thpr 11/8/06 + * + * @return The known spell progression for this SpellProgression object. + */ + public Map<Integer, List<String>> getKnownProgression() { + return knownProgression == null ? null : knownProgression + .getProgression(); + } + + /** + * Returns the known spell progression for the given class level. If this + * SpellProgression does not contain a KNOWN spell progression or if the + * given class level is not high enough to have known spells, this method + * returns null. + * + * This method is value-semantic. Ownership of the returned List is + * transferred to the calling object (The returned list can be modified + * without impacting the internal contents of this SpellProgression) + * + * @param aInt + * The class level for which the known spell progression should + * be returned. + * @return The known spell progression for the given class level, or null if + * there is no known spell progression for the given class level. + */ + public List<String> getKnownForLevel(int aLevel) { + return knownProgression == null ? null : knownProgression + .getProgressionForLevel(aLevel); + } + + /** + * Returns an LST representation of the KNOWN spell progression in this + * SpellProgression. + * + * @param lineSep + * The line separator to use for building the LST representation + * of the KNOWN spell progression. + * @return A String (LST) representation of the KNOWN spell progression. + */ + public String getKnownPCC(String lineSep) { + return knownProgression == null ? null : knownProgression + .getProgressionPCC("KNOWN", lineSep); + } + + /** + * Returns the highest possible known spell level in this SpellProgression. + * + * Note that this is a theoretical highest level, and based on the abilities ... [truncated message content] |
From: <ap...@us...> - 2006-11-18 08:10:38
|
Revision: 1667 http://svn.sourceforge.net/pcgen/?rev=1667&view=rev Author: apsen Date: 2006-11-18 00:10:38 -0800 (Sat, 18 Nov 2006) Log Message: ----------- Fixes related to BioTokenTest failing after adding support for regexp filters Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/io/filters/PatternFilter.java Trunk/pcgen/code/src/java/plugin/exporttokens/BioToken.java Trunk/pcgen/code/src/test/plugin/exporttokens/BioTokenTest.java Modified: Trunk/pcgen/code/src/java/pcgen/io/filters/PatternFilter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/filters/PatternFilter.java 2006-11-17 02:56:58 UTC (rev 1666) +++ Trunk/pcgen/code/src/java/pcgen/io/filters/PatternFilter.java 2006-11-18 08:10:38 UTC (rev 1667) @@ -87,7 +87,8 @@ if (filterEntry.size() == 2) { match.add(filterEntry.get(0)); - replace.add(filterEntry.get(1)); + + replace.add(filterEntry.get(1).replaceAll("\\\\n", System.getProperty("line.separator"))); Logging.debugPrint("Match: [" + filterEntry.get(0) + "] and replace with [" + filterEntry.get(1) + "]"); } else if (filterEntry.size() == 1) Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/BioToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/BioToken.java 2006-11-17 02:56:58 UTC (rev 1666) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/BioToken.java 2006-11-18 08:10:38 UTC (rev 1667) @@ -28,7 +28,6 @@ import pcgen.core.Constants; import pcgen.core.PlayerCharacter; import pcgen.io.ExportHandler; -import pcgen.io.FileAccess; import pcgen.io.exporttoken.Token; import java.util.ArrayList; @@ -65,8 +64,7 @@ public String getToken(String tokenSource, PlayerCharacter pc, ExportHandler eh) { String beforeValue = ""; - String afterValue = getAfterValue(eh); - boolean addAfterOnLast = true; + String afterValue = ""; if (tokenSource.length()<=3 || tokenSource.charAt(3)==',') { @@ -74,44 +72,17 @@ { afterValue = tokenSource.substring(4); } - addAfterOnLast=false; } else { String[] tokens = tokenSource.split("\\."); - if(tokens.length>1) - { - beforeValue=tokens[1]; - } - if(tokens.length>2) - { - afterValue=tokens[2]; - } + if(tokens.length>1) beforeValue=tokens[1]; + if(tokens.length>2) afterValue=tokens[2]; } - StringBuffer sb = new StringBuffer(); - List<String> bioList = getBioToken(pc); - for (int i = 0; i < bioList.size(); ++i) - { - sb.append(beforeValue); - sb.append(FileAccess.filterString(bioList.get(i))); - if (addAfterOnLast || i+1<bioList.size()) - { - sb.append(afterValue); - } - } - - return sb.toString(); + return beforeValue + pc.getBio().replaceAll("\n", afterValue + "\n" + beforeValue) + afterValue; } - /** - * Returns false - * @return false - */ - public boolean isEncoded() { - return false; - } - /** * Convert the characters bio token to a list of strings, each * string being a line. Modified: Trunk/pcgen/code/src/test/plugin/exporttokens/BioTokenTest.java =================================================================== --- Trunk/pcgen/code/src/test/plugin/exporttokens/BioTokenTest.java 2006-11-17 02:56:58 UTC (rev 1666) +++ Trunk/pcgen/code/src/test/plugin/exporttokens/BioTokenTest.java 2006-11-18 08:10:38 UTC (rev 1667) @@ -69,54 +69,39 @@ } /** - * Class under test for String getToken(String, PlayerCharacter) + * Test the bio export * @throws Exception */ - public void testGetTokenStringPlayerCharacter() throws Exception + public void testBioExport() throws Exception { - assertEquals("Default Bio", - "Test bio entry<br/>2nd line<br/>Third line<br/>last one", new BioToken() - .getToken("BIO", getCharacter(), null)); + FileAccess.setCurrentOutputFilter("xml"); + PlayerCharacter character = getCharacter(); + assertEquals("Default Bio" + , "<para>Test bio entry</para><para>2nd line</para><para>Third line</para><para>last one</para>" + , evaluateToken("BIO", character)); - assertEquals("Old Style Bio", - "Test bio entry|2nd line|Third line|last one", new BioToken() - .getToken("BIO,|", getCharacter(), null)); + assertEquals("New Style Bio start and end" + , "<para>[b]Test bio entry[/b]</para><para>[b]2nd line[/b]</para><para>[b]Third line[/b]</para><para>[b]last one[/b]</para>" + , evaluateToken("BIO.[b].[/b]", character)); - assertEquals("Old Style Bio with comma", - "Test bio entry,2nd line,Third line,last one", new BioToken() - .getToken("BIO,,", getCharacter(), null)); + assertEquals("New Style Bio start only" + , "<para>**Test bio entry</para><para>**2nd line</para><para>**Third line</para><para>**last one</para>" + , evaluateToken("BIO.**", character)); - assertEquals( - "New Style Bio start and end", - "<b>Test bio entry</b>| <b>2nd line</b>| <b>Third line</b>| <b>last one</b>| ", - new BioToken().getToken("BIO.<b>.</b>| ", getCharacter(), null)); + assertEquals("New Style Bio start only" + , "<para>Test bio entry,</para><para>2nd line,</para><para>Third line,</para><para>last one,</para>" + , evaluateToken("BIO..,", character)); - assertEquals("New Style Bio start only", - "**Test bio entry<br/>**2nd line<br/>**Third line<br/>**last one<br/>", new BioToken() - .getToken("BIO.**", getCharacter(), null)); - - assertEquals("New Style Bio start only", - "Test bio entry,2nd line,Third line,last one,", new BioToken() - .getToken("BIO..,", getCharacter(), null)); - } - - /** - * Test the bio export - * @throws Exception - */ - public void testBioExport() throws Exception - { FileAccess.setCurrentOutputFilter("foo.htm"); - PlayerCharacter character = getCharacter(); character.setBio("Test bio <br/>entry\n2nd line\nThird line\nlast one"); - assertEquals("Bio and exportHandler should be the same", - evaluateToken("BIO.<b>.</b>", character), new BioToken() - .getToken("BIO.<b>.</b>", character, null)); + String expected = "<p>[b]Test bio <br/>entry[/b]</p>\n<p>[b]2nd line[/b]</p>\n<p>[b]Third line[/b]</p>\n<p>[b]last one[/b]</p>"; + String actual = evaluateToken("BIO.[b].[/b]", character); + assertEquals(expected, actual); - assertEquals("New Style Bio start only", - "Test bio <br/>entry,2nd line,Third line,last one,", new BioToken() - .getToken("BIO..,", getCharacter(), null)); + actual = evaluateToken("BIO..,", character); + expected = "<p>Test bio <br/>entry,</p>\n<p>2nd line,</p>\n<p>Third line,</p>\n<p>last one,</p>"; + assertEquals("New Style Bio start only", expected, actual); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2006-11-27 09:46:49
|
Revision: 1710 http://svn.sourceforge.net/pcgen/?rev=1710&view=rev Author: jdempsey Date: 2006-11-27 01:46:49 -0800 (Mon, 27 Nov 2006) Log Message: ----------- Fix error in preview in browser function. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java Trunk/pcgen/code/src/test/pcgen/io/exporttoken/AbilityListTokenTest.java Modified: Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java 2006-11-27 07:48:05 UTC (rev 1709) +++ Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java 2006-11-27 09:46:49 UTC (rev 1710) @@ -1340,7 +1340,7 @@ boolean inFormula = false; for (String string : splitStr) { - if (string.indexOf("(") >= 0) + if (string.indexOf("(") >= 0 && (string.indexOf(")") < string.indexOf("("))) { inFormula = true; buf.append(string); Modified: Trunk/pcgen/code/src/test/pcgen/io/exporttoken/AbilityListTokenTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/io/exporttoken/AbilityListTokenTest.java 2006-11-27 07:48:05 UTC (rev 1709) +++ Trunk/pcgen/code/src/test/pcgen/io/exporttoken/AbilityListTokenTest.java 2006-11-27 09:46:49 UTC (rev 1710) @@ -183,4 +183,12 @@ assertEquals("Complex split combined token 4", "1", result.get(4)); assertEquals("Complex split combined token 5", "0|", result.get(5)); } + + public void testForNodeSplitNonJEP() + { + String testStr = "|FOR,%equip1,0,(COUNT[EQUIPMENT.MERGELOC.Not.Coin.NOT.Gem]-1)/2,1,0|"; + + List<String> result = ExportHandler.getParameters(testStr); + assertEquals("Complex split len", 6, result.size()); + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2006-12-07 09:44:22
|
Revision: 1733 http://svn.sourceforge.net/pcgen/?rev=1733&view=rev Author: jdempsey Date: 2006-12-07 01:44:22 -0800 (Thu, 07 Dec 2006) Log Message: ----------- FReq #1363431 - FACE, HANDS, LEGS and REACH should be valid Template tags - Activate LEGS tag in templates Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreLegsTester.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreLegsTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-12-07 07:34:21 UTC (rev 1732) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-12-07 09:44:22 UTC (rev 1733) @@ -16647,6 +16647,32 @@ return hands; } + /** + * Determine the number of legs the character has. This + * is based on their race and any applied templates. + * + * @return The number of hands. + */ + public int getLegs() + { + final Race aRace = getRace(); + int legs = 0; + if (aRace != null) + { + legs = aRace.getLegs(); + } + + // Scan templates for any overrides + for ( PCTemplate template : getTemplateList() ) + { + if (template.getLegs() != null) + { + legs = template.getLegs(); + } + } + return legs; + } + // public double getBonusValue(final String aBonusType, final String aBonusName ) // { // return TypedBonus.totalBonuses(getBonusesTo(aBonusType, aBonusName)); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreLegsTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreLegsTester.java 2006-12-07 07:34:21 UTC (rev 1732) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreLegsTester.java 2006-12-07 09:44:22 UTC (rev 1733) @@ -49,7 +49,7 @@ { final int targetLegs = Integer.parseInt(prereq.getOperand()); - runningTotal = prereq.getOperator().compare(character.getRace().getLegs(), targetLegs); + runningTotal = prereq.getOperator().compare(character.getLegs(), targetLegs); } catch (NumberFormatException nfe) { Modified: Trunk/pcgen/code/src/test/pcgen/core/prereq/PreLegsTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/prereq/PreLegsTest.java 2006-12-07 07:34:21 UTC (rev 1732) +++ Trunk/pcgen/code/src/test/pcgen/core/prereq/PreLegsTest.java 2006-12-07 09:44:22 UTC (rev 1733) @@ -24,6 +24,7 @@ import junit.framework.Test; import junit.framework.TestSuite; import pcgen.AbstractCharacterTestCase; +import pcgen.core.PCTemplate; import pcgen.core.PlayerCharacter; import pcgen.core.Race; import pcgen.persistence.lst.prereq.PreParserFactory; @@ -83,5 +84,12 @@ assertFalse("Character does not have more than 2 legs", PrereqHandler.passes(prereq, character, null)); + + PCTemplate tmpl = new PCTemplate(); + tmpl.setLegs(3); + + character.addTemplate(tmpl); + assertTrue("Character does have more than 2 legs", + PrereqHandler.passes(prereq, character, null)); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2006-12-28 06:12:38
|
Revision: 1821 http://svn.sourceforge.net/pcgen/?rev=1821&view=rev Author: jdempsey Date: 2006-12-27 22:12:38 -0800 (Wed, 27 Dec 2006) Log Message: ----------- Fix bug #1612182 - PRExxx Q: to override Qualify doesn't Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/prereq/Prerequisite.java Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreAlignWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreApplyWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreArmorProfWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreArmorTypeWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreAttackWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreBaseSizeWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreBirthPlaceWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCSkillWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCheckBaseWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCheckWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCityWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreClassWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDamageReductionWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDefaultMonsterWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityAlignWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityDomainWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDomainWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipBothWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipPrimaryWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipSecondaryWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipTwoWeaponWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreFeatWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreGenderWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHDWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHPWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHandsWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHasDeityWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreItemWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLanguageWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLegsWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLevelMaxWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLevelWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreMoveWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PrePointBuyMethodWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRaceWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRegionWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRuleWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreShieldProfWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSizeWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillMultWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpecialAbilityWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellBookWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellCastMemorizeWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellCastWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellDescriptorWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellResistanceWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellSchoolSubWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellSchoolWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellTypeWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreStatWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSubClassWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTemplateWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTextWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTypeWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreUnarmedAttackWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreVariableWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreVisionWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreWeaponProfWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreWieldWriter.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/output/prereq/PrerequisiteWriterTest.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreParserFactoryTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/prereq/Prerequisite.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/prereq/Prerequisite.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/pcgen/core/prereq/Prerequisite.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -233,7 +233,7 @@ { buf.append(PropertyFactory.getString("Prerequisite.count-multiples")); //$NON-NLS-1$ } - + if (totalValues) { buf.append(PropertyFactory.getString("Prerequisite.total-values")); //$NON-NLS-1$ @@ -268,6 +268,11 @@ buf.append("\" "); //$NON-NLS-1$ } + if (isOverrideQualify()) + { + buf.append(PropertyFactory.getString("Prerequisite.override-qualify")); //$NON-NLS-1$ + } + buf.append(">\n"); //$NON-NLS-1$ if (prerequisites.size() > 0) Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2006-12-28 06:12:38 UTC (rev 1821) @@ -2640,6 +2640,8 @@ Prerequisite.operand=operand +Prerequisite.override-qualify=override-qualify\u003D"true" + Prerequisite.total-values=total-values\u003D"true" PreAlign.toHtml=Alignment {0} {1} Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -141,9 +141,11 @@ return prereq; } + boolean overrideQualify = false; if (formula.startsWith("Q:")) { formula = formula.substring(2); + overrideQualify = true; } boolean invertResult = false; @@ -163,7 +165,7 @@ try { Prerequisite prereq = - parser.parse(kind, formula, invertResult, false); + parser.parse(kind, formula, invertResult, overrideQualify); //sanity check to make sure we have not got a top level element that // is a PREMULT with only 1 element. while (prereq.getKind() == null Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreAlignWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreAlignWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreAlignWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -71,7 +71,7 @@ { writer.write('!'); } - writer.write("PREALIGN:"); + writer.write("PREALIGN:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreApplyWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreApplyWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreApplyWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -71,7 +71,7 @@ { writer.write('!'); } - writer.write("PREAPPLY:"); + writer.write("PREAPPLY:" + (prereq.isOverrideQualify() ? "Q:":"")); if (Integer.parseInt(prereq.getOperand()) > 1) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreArmorProfWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreArmorProfWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreArmorProfWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -38,7 +38,7 @@ import java.io.Writer; /** - * Writer for PREARMORPROF + * Writer for PREARMORPROF */ public class PreArmorProfWriter extends AbstractPrerequisiteWriter implements PrerequisiteWriterInterface @@ -75,7 +75,7 @@ writer.write('!'); } - writer.write("PREARMORPROF:1,"); + writer.write("PREARMORPROF:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreArmorTypeWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreArmorTypeWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreArmorTypeWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -38,7 +38,7 @@ import java.io.Writer; /** - * Writer for PREARMORTYPE + * Writer for PREARMORTYPE */ public class PreArmorTypeWriter extends AbstractPrerequisiteWriter implements PrerequisiteWriterInterface @@ -74,7 +74,7 @@ { writer.write('!'); } - writer.write("PREARMORTYPE:1,"); + writer.write("PREARMORTYPE:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreAttackWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreAttackWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreAttackWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -38,7 +38,7 @@ import java.io.Writer; /** - * Writer for PREATTACK + * Writer for PREATTACK */ public class PreAttackWriter extends AbstractPrerequisiteWriter implements PrerequisiteWriterInterface @@ -74,7 +74,7 @@ { writer.write('!'); } - writer.write("PREATT:"); + writer.write("PREATT:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreBaseSizeWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreBaseSizeWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreBaseSizeWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -68,7 +68,7 @@ { writer.write("PREBASESIZE"); writer.write(prereq.getOperator().toString().toUpperCase()); - writer.write(":"); + writer.write(":" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreBirthPlaceWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreBirthPlaceWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreBirthPlaceWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -74,7 +74,7 @@ { writer.write('!'); } - writer.write("PREBIRTHPLACE:"); + writer.write("PREBIRTHPLACE:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCSkillWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCSkillWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCSkillWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -71,7 +71,7 @@ { writer.write('!'); } - writer.write("PRECSKILL:"); + writer.write("PRECSKILL:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); writer.write(','); writer.write(prereq.getKey()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCheckBaseWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCheckBaseWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCheckBaseWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -75,7 +75,7 @@ { writer.write('!'); } - writer.write("PRECHECKBASE:1,"); + writer.write("PRECHECKBASE:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); writer.write('='); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCheckWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCheckWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCheckWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -75,7 +75,7 @@ { writer.write('!'); } - writer.write("PRECHECK:1,"); + writer.write("PRECHECK:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); writer.write('='); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCityWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCityWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCityWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -74,7 +74,7 @@ { writer.write('!'); } - writer.write("PRECITY:"); + writer.write("PRECITY:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreClassWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreClassWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreClassWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRECLASS:1,"); + writer.write("PRECLASS:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); writer.write('='); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDamageReductionWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDamageReductionWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDamageReductionWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREDR:1,"); + writer.write("PREDR:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey() + "=" + prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDefaultMonsterWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDefaultMonsterWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDefaultMonsterWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREDEFAULTMONSTER:"); + writer.write("PREDEFAULTMONSTER:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityAlignWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityAlignWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityAlignWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREDEITYALIGN:"); + writer.write("PREDEITYALIGN:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityDomainWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityDomainWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityDomainWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREDEITYDOMAIN:1,"); + writer.write("PREDEITYDOMAIN:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDeityWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -75,7 +75,7 @@ writer.write('!'); } - writer.write("PREDEITY:"); + writer.write("PREDEITY:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); writer.write(","); writer.write(prereq.getKey()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDomainWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDomainWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreDomainWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - // writer.write("PREDOMAIN:1,"); + // writer.write("PREDOMAIN:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); // writer.write(prereq.getKey() + "=" + prereq.getOperand() ); writer.write("PREDOMAIN:"); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipBothWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipBothWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipBothWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREEQUIPBOTH:1,"); + writer.write("PREEQUIPBOTH:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipPrimaryWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipPrimaryWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipPrimaryWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -74,7 +74,7 @@ writer.write('!'); } - writer.write("PREEQUIPPRIMARY:1,"); + writer.write("PREEQUIPPRIMARY:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipSecondaryWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipSecondaryWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipSecondaryWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -74,7 +74,7 @@ writer.write('!'); } - writer.write("PREEQUIPSECONDARY:1,"); + writer.write("PREEQUIPSECONDARY:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipTwoWeaponWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipTwoWeaponWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipTwoWeaponWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREEQUIPTWOWEAPON:1,"); + writer.write("PREEQUIPTWOWEAPON:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreEquipWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREEQUIP:1,"); + writer.write("PREEQUIP:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreFeatWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreFeatWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreFeatWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -71,7 +71,7 @@ { writer.write('!'); } - writer.write("PREFEAT:"); + writer.write("PREFEAT:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); writer.write(','); if (prereq.isCountMultiples()) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreGenderWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreGenderWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreGenderWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREGENDER:"); + writer.write("PREGENDER:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHDWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHDWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHDWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -121,7 +121,7 @@ { writer.write('!'); } - writer.write("PREHD:"); + writer.write("PREHD:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(elementGTEQ.getOperand()); writer.write('-'); writer.write(elementLTEQ.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHPWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHPWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHPWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREHP:"); + writer.write("PREHP:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHandsWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHandsWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHandsWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -65,7 +65,7 @@ { try { - writer.write("PREHANDS"); + writer.write("PREHANDS" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperator().toString().toUpperCase()); writer.write(':'); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHasDeityWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHasDeityWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHasDeityWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -75,7 +75,7 @@ writer.write('!'); } - writer.write("PREDEITY:"); + writer.write("PREDEITY:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); writer.write(","); writer.write(prereq.getKey()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreItemWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreItemWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreItemWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREITEM:1,"); + writer.write("PREITEM:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLanguageWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLanguageWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLanguageWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -74,7 +74,7 @@ writer.write('!'); } - writer.write("PRELANG:"); + writer.write("PRELANG:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); writer.write(','); writer.write(prereq.getKey()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLegsWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLegsWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLegsWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -35,7 +35,7 @@ { try { - writer.write("PRELEGS"); + writer.write("PRELEGS" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperator().toString().toUpperCase()); writer.write(':'); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLevelMaxWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLevelMaxWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLevelMaxWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRELEVELMAX:"); + writer.write("PRELEVELMAX:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLevelWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLevelWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreLevelWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRELEVEL:"); + writer.write("PRELEVEL:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreMoveWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreMoveWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreMoveWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREMOVE:1,"); + writer.write("PREMOVE:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); writer.write('='); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PrePointBuyMethodWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PrePointBuyMethodWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PrePointBuyMethodWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREPOINTBUYMETHOD:"); + writer.write("PREPOINTBUYMETHOD:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) @@ -99,7 +99,7 @@ writer.write('!'); } - writer.write("PREPOINTBUYMETHOD:"); + writer.write("PREPOINTBUYMETHOD:" + (prereq.isOverrideQualify() ? "Q:":"")); boolean needComma = false; for (Prerequisite element : prereq.getPrerequisites()) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRaceWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRaceWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRaceWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRERACE:"); + writer.write("PRERACE:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRegionWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRegionWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRegionWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PREREGION:"); + writer.write("PREREGION:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRuleWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRuleWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreRuleWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRERULE:1,"); + writer.write("PRERULE:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreShieldProfWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreShieldProfWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreShieldProfWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRESHIELDPROF:1,"); + writer.write("PRESHIELDPROF:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSizeWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSizeWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSizeWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -63,7 +63,7 @@ { try { - writer.write("PRESIZE"); + writer.write("PRESIZE" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperator().toString().toUpperCase()); writer.write(':'); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillMultWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillMultWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillMultWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -75,11 +75,11 @@ if (prereq.isTotalValues()) { - writer.write("PRESKILLTOT:1,"); + writer.write("PRESKILLTOT:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); } else { - writer.write("PRESKILL:1,"); + writer.write("PRESKILL:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); } writer.write(prereq.getKey()); writer.write('='); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -75,11 +75,11 @@ if (prereq.isTotalValues()) { - writer.write("PRESKILLTOT:1,"); + writer.write("PRESKILLTOT:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); } else { - writer.write("PRESKILL:1,"); + writer.write("PRESKILL:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); } writer.write(prereq.getKey()); if (prereq.getSubKey() != null) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpecialAbilityWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpecialAbilityWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpecialAbilityWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRESA:1,"); + writer.write("PRESA:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellBookWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellBookWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellBookWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRESPELLBOOK:"); + writer.write("PRESPELLBOOK:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellCastMemorizeWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellCastMemorizeWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellCastMemorizeWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRESPELLCAST:MEMORIZE="); + writer.write("PRESPELLCAST:" + (prereq.isOverrideQualify() ? "Q:":"") + "MEMORIZE="); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellCastWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellCastWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellCastWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRESPELLCAST:TYPE="); + writer.write("PRESPELLCAST:" + (prereq.isOverrideQualify() ? "Q:":"") + "TYPE="); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellDescriptorWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellDescriptorWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellDescriptorWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -103,7 +103,7 @@ writer.write('!'); } - writer.write("PRESPELLDESCRIPTOR:"); + writer.write("PRESPELLDESCRIPTOR:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); for (Prerequisite element : prereq.getPrerequisites()) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellResistanceWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellResistanceWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellResistanceWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -67,7 +67,7 @@ { writer.write("PRESR"); writer.write(prereq.getOperator().toString().toUpperCase()); - writer.write(':'); + writer.write(':' + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellSchoolSubWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellSchoolSubWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellSchoolSubWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -103,7 +103,7 @@ writer.write('!'); } - writer.write("PRESPELLSCHOOLSUB:"); + writer.write("PRESPELLSCHOOLSUB:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); for (Prerequisite element : prereq.getPrerequisites()) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellSchoolWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellSchoolWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellSchoolWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -103,7 +103,7 @@ writer.write('!'); } - writer.write("PRESPELLSCHOOL:"); + writer.write("PRESPELLSCHOOL:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); for (Prerequisite element : prereq.getPrerequisites()) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellTypeWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellTypeWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellTypeWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -73,7 +73,7 @@ writer.write('!'); } - writer.write("PRESPELLTYPE:"); + writer.write("PRESPELLTYPE:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); writer.write(','); writer.write(prereq.getKey()); @@ -103,7 +103,7 @@ writer.write('!'); } - writer.write("PRESPELLTYPE:"); + writer.write("PRESPELLTYPE:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); for (Prerequisite element : prereq.getPrerequisites()) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PRESPELL:1,"); + writer.write("PRESPELL:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreStatWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreStatWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreStatWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -38,7 +38,7 @@ import java.io.Writer; /** - * Writes PRESTAT Token + * Writes PRESTAT Token */ public class PreStatWriter extends AbstractPrerequisiteWriter implements PrerequisiteWriterInterface @@ -78,7 +78,7 @@ // writer.write('!'); // } // - // writer.write("PRESTAT:1," + prereq.getKey().toUpperCase() + "=" + prereq.getOperand() ); + // writer.write("PRESTAT:" + (prereq.isOverrideQualify() ? "Q:":"") + "1," + prereq.getKey().toUpperCase() + "=" + prereq.getOperand() ); writer.write("PRESTAT"); if (!prereq.getOperator().equals(PrerequisiteOperator.GTEQ)) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSubClassWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSubClassWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSubClassWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PRESUBCLASS:1,"); + writer.write("PRESUBCLASS:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTemplateWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTemplateWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTemplateWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -38,7 +38,7 @@ import java.io.Writer; /** - * Writes PRETEMPLATE token + * Writes PRETEMPLATE token */ public class PreTemplateWriter extends AbstractPrerequisiteWriter implements PrerequisiteWriterInterface @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PRETEMPLATE:1,"); + writer.write("PRETEMPLATE:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTextWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTextWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTextWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PRETEXT:"); + writer.write("PRETEXT:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTypeWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTypeWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreTypeWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PRETYPE:1,"); + writer.write("PRETYPE:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreUnarmedAttackWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreUnarmedAttackWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreUnarmedAttackWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PREUATT:"); + writer.write("PREUATT:" + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreVariableWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreVariableWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreVariableWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -69,7 +69,7 @@ { writer.write("PREVAR"); writer.write(prereq.getOperator().toString().toUpperCase()); - writer.write(':'); + writer.write(':' + (prereq.isOverrideQualify() ? "Q:":"")); writer.write(prereq.getKey()); writer.write(','); writer.write(prereq.getOperand()); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreVisionWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreVisionWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreVisionWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PREVISION:1,"); + writer.write("PREVISION:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey() + "=" + prereq.getOperand()); } catch (IOException e) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreWeaponProfWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreWeaponProfWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreWeaponProfWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PREWEAPONPROF:1,"); + writer.write("PREWEAPONPROF:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); // writer.write(prereq.getKey() + "=" + prereq.getOperand() ); writer.write(prereq.getKey()); } Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreWieldWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreWieldWriter.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreWieldWriter.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -76,7 +76,7 @@ writer.write('!'); } - writer.write("PREWIELD:1,"); + writer.write("PREWIELD:" + (prereq.isOverrideQualify() ? "Q:":"") + "1,"); writer.write(prereq.getKey()); } catch (IOException e) Modified: Trunk/pcgen/code/src/test/pcgen/persistence/lst/output/prereq/PrerequisiteWriterTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/persistence/lst/output/prereq/PrerequisiteWriterTest.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/test/pcgen/persistence/lst/output/prereq/PrerequisiteWriterTest.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -200,6 +200,7 @@ "PREWEAPONPROF:1,DEITYWEAPON", "PREWEAPONPROF:1,DEITYWEAPON", "PREWIELD:1,Light,OneHanded", "PREMULT:1,[PREWIELD:1,Light],[PREWIELD:1,OneHanded]", "PREWIELD:1,TwoHanded", "PREWIELD:1,TwoHanded", + "PREWIELD:Q:1,TwoHanded", "PREWIELD:Q:1,TwoHanded", "PRERACE:Orc,[%]", "PREMULT:2,[PRERACE:Orc],[!PRERACE:%]", Modified: Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreParserFactoryTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreParserFactoryTest.java 2006-12-28 05:11:32 UTC (rev 1820) +++ Trunk/pcgen/code/src/test/pcgen/persistence/lst/prereq/PreParserFactoryTest.java 2006-12-28 06:12:38 UTC (rev 1821) @@ -65,7 +65,19 @@ assertEquals("<prereq kind=\"var\" key=\"Enraged\" operator=\"neq\" operand=\"1\" >\n</prereq>\n", prereq.toString()); } + /** + * @throws Exception + */ + public void testOverrideQualifies() throws Exception + { + PreParserFactory factory = PreParserFactory.getInstance(); + Prerequisite prereq = factory.parse("PREVARNEQ:Q:Enraged,1"); + + assertEquals("<prereq kind=\"var\" key=\"Enraged\" operator=\"neq\" operand=\"1\" override-qualify=\"true\" >\n</prereq>\n", prereq.toString()); + } + + public void testSkillTypeKnowledge() throws Exception { PreParserFactory factory = PreParserFactory.getInstance(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <juj...@us...> - 2006-12-29 17:36:22
|
Revision: 1828 http://svn.sourceforge.net/pcgen/?rev=1828&view=rev Author: jujutsunerd Date: 2006-12-29 09:36:22 -0800 (Fri, 29 Dec 2006) Log Message: ----------- Fixed more generics warnings. Changed some uses of concrete collections to collection interfaces. Removed some unneccessary casts. Removed some unused imports. Modified Paths: -------------- Trunk/pcgen/code/src/java/gmgen/gui/PreferencesRootTreeNode.java Trunk/pcgen/code/src/java/gmgen/pluginmgr/messages/FileTypeMessage.java Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java Trunk/pcgen/code/src/java/pcgen/core/AssociatedChoice.java Trunk/pcgen/code/src/java/pcgen/core/BioSet.java Trunk/pcgen/code/src/java/pcgen/core/DamageReduction.java Trunk/pcgen/code/src/java/pcgen/core/Equipment.java Trunk/pcgen/code/src/java/pcgen/core/GameMode.java Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/PointBuyCost.java Trunk/pcgen/code/src/java/pcgen/core/PointBuyMethod.java Trunk/pcgen/code/src/java/pcgen/core/Race.java Trunk/pcgen/code/src/java/pcgen/core/Skill.java Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java Trunk/pcgen/code/src/java/pcgen/core/chooser/SimpleWeaponProfChoiceManager.java Trunk/pcgen/code/src/java/pcgen/core/chooser/SpellLevelChoiceManager.java Trunk/pcgen/code/src/java/pcgen/core/kit/BaseKit.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitLevelAbility.java Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityFeat.java Trunk/pcgen/code/src/java/pcgen/core/utils/CoreUtility.java Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java Trunk/pcgen/code/src/java/pcgen/gui/MacGUI.java Trunk/pcgen/code/src/java/pcgen/gui/PToolBar.java Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterDialogFactory.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java Trunk/pcgen/code/src/java/pcgen/gui/utils/Utility.java Trunk/pcgen/code/src/java/pcgen/io/EntityEncoder.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java Trunk/pcgen/code/src/java/pcgen/io/filters/PatternFilter.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstFileLoader.java Trunk/pcgen/code/src/java/pcgen/util/ComparableComparator.java Trunk/pcgen/code/src/java/pcgen/util/FOPHandler.java Trunk/pcgen/code/src/java/pcgen/util/PJEP.java Trunk/pcgen/code/src/java/pcgen/util/chooser/ChooserInterface.java Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetModel.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ArmorPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/AttributePane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/MusicPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PerDayPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/RagePane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SkillsPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/TurnPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/WeaponListPane.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/gui/NameGenPanel.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/VariableHashMap.java Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java Trunk/pcgen/code/src/java/plugin/initiative/gui/AttackDialog.java Trunk/pcgen/code/src/java/plugin/initiative/gui/Initiative.java Trunk/pcgen/code/src/java/plugin/initiative/gui/TableColumnInformation.java Trunk/pcgen/code/src/java/plugin/jepcommands/CeilCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/CharBonusToCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/ClassLevelCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/CountCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/FloorCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/GetVarCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/IfCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/MaxCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/MinCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/RollCommand.java Trunk/pcgen/code/src/java/plugin/jepcommands/SkillInfoCommand.java Trunk/pcgen/code/src/test/pcgen/core/AbilityTest.java Trunk/pcgen/code/src/test/pcgen/core/EquipmentTest.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/utils/FeatParserTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DDList.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/List.java Modified: Trunk/pcgen/code/src/java/gmgen/gui/PreferencesRootTreeNode.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/gui/PreferencesRootTreeNode.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/gmgen/gui/PreferencesRootTreeNode.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -27,6 +27,7 @@ import javax.swing.tree.DefaultMutableTreeNode; import java.util.ArrayList; +import java.util.List; /** This defines the preferences tree * @@ -34,14 +35,14 @@ */ public class PreferencesRootTreeNode extends DefaultMutableTreeNode { - private ArrayList<PreferencesPanel> panelList = new ArrayList<PreferencesPanel>(); + private List<PreferencesPanel> panelList = new ArrayList<PreferencesPanel>(); public PreferencesRootTreeNode() { super("Preferences"); } - public ArrayList<PreferencesPanel> getPanelList() + public List<PreferencesPanel> getPanelList() { return panelList; } Modified: Trunk/pcgen/code/src/java/gmgen/pluginmgr/messages/FileTypeMessage.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/pluginmgr/messages/FileTypeMessage.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/gmgen/pluginmgr/messages/FileTypeMessage.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -27,6 +27,7 @@ import javax.swing.filechooser.FileFilter; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * Send this message to inform all components that a a call has taken place @@ -37,7 +38,7 @@ */ public class FileTypeMessage extends GMBMessage { - private ArrayList<FileFilter> fileTypes = new ArrayList<FileFilter>(); + private List<FileFilter> fileTypes = new ArrayList<FileFilter>(); /** * Constructor for the StateChangedMessage object Modified: Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -105,6 +105,7 @@ * Return an iterator over any Choices made for the Ability represented * @return an iterator */ + @SuppressWarnings("unchecked") //Collections.EMPTY_LIST is not generic. public Iterator<String> getChoicesIterator() { final List<String> ret = (getAbility() != null) ? decorations : Collections.EMPTY_LIST; return ret.iterator(); Modified: Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -85,7 +85,7 @@ if (anAbility != null && (anAbility.isMultiples() || getAbilityFromList(addList, anAbility) == null)) { - newAbility = (Ability) anAbility.clone(); + newAbility = anAbility.clone(); if (choices != null) { @@ -351,7 +351,7 @@ } else { - anAbility = (Ability) anAbility.clone(); + anAbility = anAbility.clone(); if (choices.size() > 0) { @@ -622,7 +622,7 @@ if (create && (pcAbility == null)) { // adding feat for first time - pcAbility = (Ability) argAbility.clone(); + pcAbility = argAbility.clone(); aPC.addFeat(pcAbility, levelInfo); pcAbility.getTemplates(aPC.isImporting(), aPC); @@ -705,7 +705,7 @@ return addIt ? 1 : 0; } - anAbility = (Ability) anAbility.clone(); + anAbility = anAbility.clone(); aPC.addFeat(anAbility, LevelInfo); anAbility.getTemplates(aPC.isImporting(), aPC); @@ -790,7 +790,7 @@ else { // add the Feat found, as a CharacterFeat - anAbility = (Ability) anAbility.clone(); + anAbility = anAbility.clone(); aPC.addFeat(anAbility, LevelInfo); } } @@ -812,7 +812,7 @@ return; } - anAbility = (Ability) anAbility.clone(); + anAbility = anAbility.clone(); aPC.addFeat(anAbility, LevelInfo); } Modified: Trunk/pcgen/code/src/java/pcgen/core/AssociatedChoice.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AssociatedChoice.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/AssociatedChoice.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -35,7 +35,7 @@ * @version $Revision$ * @param <T> */ -public class AssociatedChoice <T extends Comparable> implements Comparable +public class AssociatedChoice <T extends Comparable<T>> implements Comparable<AssociatedChoice<T>> { /** A map of key, value pairs for this choice. */ protected HashMap<String, T> choices = new HashMap<String, T>(); @@ -178,10 +178,8 @@ * @return See compareTo * @see java.lang.Comparable#compareTo(java.lang.Object) */ - public int compareTo(Object o) + public int compareTo(AssociatedChoice<T> other) { - AssociatedChoice<T> other = (AssociatedChoice<T>)o; - T defaultValue = getDefaultChoice(); if ( defaultValue != null ) { Modified: Trunk/pcgen/code/src/java/pcgen/core/BioSet.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/BioSet.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/BioSet.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -573,9 +573,11 @@ * The value is assumed to be either a list of values or a * single value, depending on the tag. eg "[34,52,69,110]" or "Blond|Brown" * If a single value, it will be added to the first age set. Multiple values - * are split amoungst the age sets in order, with any values not matching an + * are split amongst the age sets in order, with any values not matching an * age set being ignored. * + * TODO: Change to always be a List<whatever type, String I suppose> (it is possible said list only has one member, but that's ok.) + * * @param ageSets The collection of age brackets. * @param key The region.race.tag specifier. * @param value The value of the tag. Modified: Trunk/pcgen/code/src/java/pcgen/core/DamageReduction.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/DamageReduction.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/DamageReduction.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -55,7 +55,7 @@ private String theReduction = "0"; private String theBypass = "-"; private PlayerCharacter thePC = null; - private ArrayList<Prerequisite> thePreReqs = new ArrayList<Prerequisite>(); + private List<Prerequisite> thePreReqs = new ArrayList<Prerequisite>(); private static final int NO_JOIN = -1; private static final int AND_JOIN = 0; private static final int OR_JOIN = 1; Modified: Trunk/pcgen/code/src/java/pcgen/core/Equipment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -1215,6 +1215,7 @@ final List<EquipmentModifier> modList = new ArrayList<EquipmentModifier>(eqModifierList); final List<EquipmentModifier> altModList = new ArrayList<EquipmentModifier>(altEqModifierList); final List<EquipmentModifier> commonList = new ArrayList<EquipmentModifier>(); + //TODO Change the arrays of lists to be lists of lists instead to get rid of eclipse warnings. See http://www.angelikalanger.com/Articles/Papers/JavaGenerics/ArraysInJavaGenerics.htm final List<EquipmentModifier> modListByFC[] = initSplitModList(); final List<EquipmentModifier> altModListByFC[] = initSplitModList(); final List<EquipmentModifier> commonListByFC[] = initSplitModList(); @@ -5379,10 +5380,13 @@ private List<EquipmentModifier>[] initSplitModList() { List<EquipmentModifier>[] modListArray = new List[EquipmentModifier.FORMATCAT_PARENS+1]; + for (int i = 0; i < modListArray.length; i++) { modListArray[i] = new ArrayList<EquipmentModifier>(); } + + return modListArray; } Modified: Trunk/pcgen/code/src/java/pcgen/core/GameMode.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/GameMode.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/GameMode.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -404,7 +404,7 @@ /** * Get the class type by name - * @param aClassName + * @param aClassKey * @return ClassType */ public ClassType getClassTypeByName(final String aClassKey) @@ -2214,7 +2214,7 @@ { // Sort NUMERICALLY, not alphabetically! // CONSIDER Huh? The natural order of Integer IS numerically... - thpr 10/20/06 - pointBuyStatCosts = new TreeMap<Integer, PointBuyCost>(new ComparableComparator()); + pointBuyStatCosts = new TreeMap<Integer, PointBuyCost>(new ComparableComparator<Integer>()); } abilityScoreCost = null; pointBuyStatCosts.put(Integer.valueOf(pbc.getStatValue()), pbc); @@ -2915,7 +2915,7 @@ { // Sort NUMERICALLY, not alphabetically! // CONSIDER Huh? The natural order of Integer IS numerically... - thpr 10/20/06 - statDisplayText = new TreeMap<Integer, String>(new ComparableComparator()); + statDisplayText = new TreeMap<Integer, String>(new ComparableComparator<Integer>()); } statDisplayText.put(statValue, statText); } @@ -3024,7 +3024,7 @@ { // Sort NUMERICALLY, not alphabetically! // CONSIDER Huh? The natural order of Integer IS numerically... - thpr 10/20/06 - skillRankDisplayText = new TreeMap<Integer, String>(new ComparableComparator()); + skillRankDisplayText = new TreeMap<Integer, String>(new ComparableComparator<Integer>()); } skillRankDisplayText.put(rankValue, rankText); } Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -116,6 +116,8 @@ private static Map<String, Campaign> campaignMap = new HashMap<String, Campaign>(); private static Map<String, Domain> domainMap = new TreeMap<String, Domain>(); private static SortedMap<String, Race> raceMap = new TreeMap<String, Race>(); + /** TODO Why can spellMap contain both Spell and List<Spell>? Change to always contain List<Spell> (it is possible said list only has one member, but that's ok.) + * Does need to be sorted? If not, change to HashMap.*/ private static Map<String, Object> spellMap = new TreeMap<String, Object>(); private static Map<String, String> eqSlotMap = new HashMap<String, String>(); private static Map<String, List<CompanionMod>> companionModMap = new TreeMap<String, List<CompanionMod>>(); @@ -2557,7 +2559,7 @@ /** * Remove a weapon prof by key - * @param name + * @param aKey */ public static void removeWeaponProfKeyed(final String aKey) { Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -68,7 +68,7 @@ /* * FINALALLCLASSLEVELS Since this applies to a ClassLevel line */ - private ArrayList<LevelProperty<Domain>> domainList = null; + private List<LevelProperty<Domain>> domainList = null; /* * FUTURETYPESAFETY This is throwing around Feat names as Strings. :( @@ -81,7 +81,7 @@ * should be stored in a series of LevelProperty objects) need to be placed * into each individual PCClassLevel when it is constructed. */ - private ArrayList<LevelProperty<String>> featAutos = null; + private List<LevelProperty<String>> featAutos = null; /* * FUTURETYPESAFETY The Feats should be type safe, not Strings... The challenge @@ -98,7 +98,7 @@ * account for that and actually store these by level and put them into the * appropriate PCClassLevel. */ - private ArrayList<LevelProperty<String>> featList = null; + private List<LevelProperty<String>> featList = null; /* * LEVELONEONLY This variable (automatically known spells) only needs to be @@ -107,7 +107,7 @@ * dynamically (does the PCClassLevel automatically know spell A?), it only * needs to appear on one of the PlayerCharacter's PCClassLevels. */ - private ArrayList<SpellFilter> knownSpellsList = null; + private List<SpellFilter> knownSpellsList = null; /* * FUTURETYPESAFETY This is an interesting case of Type Safety, that may not be @@ -120,7 +120,7 @@ * leveling up at a certain point. Therefore this gets moved to PCClassLevel = * byproduct of addLevel */ - private ArrayList<String> specialtyList = null; + private List<String> specialtyList = null; /* * STRINGREFACTOR This is currently taking in a delimited String and should @@ -137,25 +137,25 @@ * ALLCLASSLEVELS The templates [based on their LevelProperty] (not the raw * Strings) need to be stored in EACH individual PCClassLevel. */ - private ArrayList<LevelProperty<String>> templates = null; + private List<LevelProperty<String>> templates = null; /* * FINALALLCLASSLEVELS The SR List is level dependent - heck, it's in a * LevelProperty, so that should be pretty obvious :) */ - private ArrayList<LevelProperty<String>> SR = null; + private List<LevelProperty<String>> SR = null; /* * FINALALLCLASSLEVELS Since this seems to allow for class dependent additions of * Domains, this needs to occur in each class level as appropriate. */ - private ArrayList<LevelProperty<Domain>> addDomains = null; + private List<LevelProperty<Domain>> addDomains = null; /* * FINALALLCLASSLEVELS This is pretty obvious, as these are already in a * LevelProperty... these go into the PCClassLevel */ - private ArrayList<LevelProperty<Equipment>> naturalWeapons = null; + private List<LevelProperty<Equipment>> naturalWeapons = null; /* * PCCLASSONLY This is really an item that the PCClass knows, and then the @@ -163,7 +163,7 @@ * construction of the PCClassLevel (inheritAttributesFrom - although that * could really be cleaned up and a better method found) */ - private ArrayList<SubClass> subClassList = null; + private List<SubClass> subClassList = null; /* * PCCLASSONLY This is really an item that the PCClass knows, and then the @@ -171,13 +171,13 @@ * during the construction of the PCClassLevel (inheritAttributesFrom - * although that could really be cleaned up and a better method found) */ - private ArrayList<SubstitutionClass> substitutionClassList = null; + private List<SubstitutionClass> substitutionClassList = null; /* * DELETEVARIABLE There is NO use of this Tag at all in the data/* structure * today, so support for this should be removed from this class. */ - private ArrayList<String> uattList = new ArrayList<String>(); // TODO - + private List<String> uattList = new ArrayList<String>(); // TODO - // This // should be // removed. @@ -1273,12 +1273,14 @@ * FINALPCCLASSONLY This is only for PCClass - used to edit the class */ public final Collection<LevelProperty<String>> getAllFeatAutos() { + Collection<LevelProperty<String>> returnList = null; if (featAutos == null) { List<LevelProperty<String>> empty = Collections.emptyList(); - return Collections.unmodifiableCollection(empty); + returnList = Collections.unmodifiableCollection(empty); } else { - return Collections.unmodifiableCollection(featAutos); + returnList = Collections.unmodifiableCollection(featAutos); } + return returnList; } /* @@ -1746,11 +1748,11 @@ if (prohibitedSchools == null) { prohibitedSchools = new ArrayList<String>(); } - if (prohibitedSchools.contains(school)) { - return false; - } else { - return prohibitedSchools.add(school); + boolean addedSchool = false; + if (!prohibitedSchools.contains(school)) { + addedSchool = prohibitedSchools.add(school); } + return addedSchool; } /* @@ -4294,7 +4296,7 @@ * selected subClass, if any, is structured into the PCClassLevel during the * construction of the PCClassLevel */ - public ArrayList<SubClass> getSubClassList() { + public List<SubClass> getSubClassList() { return subClassList; } @@ -4303,7 +4305,7 @@ * selected substitutionClass, if any, is structured into the PCClassLevel * during the construction of the PCClassLevel */ - public ArrayList getSubstitutionClassList() { + public List getSubstitutionClassList() { return substitutionClassList; } Modified: Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -61,11 +61,11 @@ /////////////////////////////////////////////////////////////////////// private AbilityStore abilityCatStore = null; - private ArrayList<String> featStrings = null; + private List<String> featStrings = null; /** A Map storing a List of Ability keys Keyed on AbilityCategory */ private Map<AbilityCategory, List<String>> theAutoAbilityKeys = null; - private ArrayList<String> hitDiceStrings = null; - private ArrayList<String> templates = new ArrayList<String>(); + private List<String> hitDiceStrings = null; + private List<String> templates = new ArrayList<String>(); private HashMap<String, String> chosenFeatStrings = null; @@ -103,13 +103,13 @@ private Integer legs; private Integer reach; - private ArrayList<String> addedSubTypes = new ArrayList<String>(); + private List<String> addedSubTypes = new ArrayList<String>(); private Point2D.Double face = null; - private ArrayList<String> removedSubTypes = new ArrayList<String>(); + private List<String> removedSubTypes = new ArrayList<String>(); - private ArrayList<String> levelMods = new ArrayList<String>(); + private List<String> levelMods = new ArrayList<String>(); /** * A DoubleKeyMap storing abilities to be granted at a certain level. @@ -1219,6 +1219,7 @@ * * @return an array of strings in the format specified above */ + @SuppressWarnings("unchecked") //Collections.EMPTY_LIST is not generic. public List<String> getHitDiceStrings() { return hitDiceStrings != null ? hitDiceStrings : Collections.EMPTY_LIST; @@ -1679,6 +1680,7 @@ * * @return a list of Templates */ + @SuppressWarnings("unchecked") //Collections.EMPTY_LIST is not generic. public List<String> templatesAdded() { return templatesAdded != null ? templatesAdded : Collections.EMPTY_LIST; Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -97,7 +97,7 @@ protected ArrayList<AssociatedChoice<String>> associatedList = null; /** List of Level Abilities for the object */ - private ArrayList<LevelAbility> levelAbilityList = null; + private List<LevelAbility> levelAbilityList = null; private SourceEntry theSource = new SourceEntry(); @@ -119,7 +119,7 @@ /** Map of the bonuses for the object */ private HashMap<String, String> bonusMap = null; /** List of Bonuses for the object */ - private ArrayList<BonusObj> bonusList = new ArrayList<BonusObj>(); + private List<BonusObj> bonusList = new ArrayList<BonusObj>(); private HashMap<String, String> changeProfMap = new HashMap<String, String>(); @@ -141,7 +141,7 @@ /** Holds the level of encumberance due to load for the object */ private Load encumberedLoadMove = Load.LIGHT; - private ArrayList<DamageReduction> drList = new ArrayList<DamageReduction>(); + private List<DamageReduction> drList = new ArrayList<DamageReduction>(); private String chooseLanguageAutos = Constants.EMPTY_STRING; private TreeSet<Language> theBonusLangs = null; @@ -151,7 +151,7 @@ /** List of followers of a type allowed to be selected. */ private Map<String, List<FollowerOption>> theAvailableFollowers = null; - private ArrayList<String> weaponProfBonus = null; + private List<String> weaponProfBonus = null; private List<Description> theDescriptions = null; Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -146,7 +146,7 @@ private final ArrayList<CompanionMod> companionModList = new ArrayList<CompanionMod>(); /** This character's list of followers */ private final List<Follower> followerList = new ArrayList<Follower>(); - private ArrayList<String> qualifyArrayList = new ArrayList<String>(); + private List<String> qualifyArrayList = new ArrayList<String>(); private Follower followerMaster = null; // Who is the master now? // List of Equip Sets @@ -205,7 +205,7 @@ // whether to add auto known spells each level private boolean autoKnownSpells = true; - // wether higher level spell slots should be used for lower levels + // whether higher level spell slots should be used for lower levels private boolean useHigherKnownSlots = SettingsHandler.isUseHigherLevelSlotsDefault(); private boolean useHigherPreppedSlots = SettingsHandler.isUseHigherLevelSlotsDefault(); @@ -419,7 +419,7 @@ * Get the armor proficiency list * @return armor proficiency list */ - public ArrayList<String> getArmorProfList() + public List<String> getArmorProfList() { if (armorProfListStable) { @@ -2594,7 +2594,7 @@ * Get list of shield proficiencies * @return shield prof list */ - public ArrayList<String> getShieldProfList() + public List<String> getShieldProfList() { shieldProfList.clear(); @@ -2821,7 +2821,7 @@ * Get list of special abilities as Strings * @return List of special abilities as Strings */ - public ArrayList<String> getSpecialAbilityListStrings() + public List<String> getSpecialAbilityListStrings() { final ArrayList<String> bList = new ArrayList<String>(); @@ -2849,8 +2849,8 @@ */ public ArrayList<String> getSpecialAbilityTimesList() { - final ArrayList<String> abilityList = getSpecialAbilityListStrings(); - final ArrayList<String> sortList = new ArrayList<String>(); + final List<String> abilityList = getSpecialAbilityListStrings(); + final List<String> sortList = new ArrayList<String>(); final int[] numTimes = new int[abilityList.size()]; for (int i = 0; i < abilityList.size(); i++) @@ -3904,7 +3904,7 @@ return getEquipmentNamed(aString, getEquipmentMasterList()); } - public ArrayList<String> getMiscList() + public List<String> getMiscList() { return miscList; } @@ -5587,12 +5587,12 @@ { if (eq.isShield()) { - final ArrayList<String> aList = getShieldProfList(); + final List<String> aList = getShieldProfList(); return isProficientWith(eq, aList); } else if (eq.isArmor()) { - final ArrayList<String> aList = getArmorProfList(); + final List<String> aList = getArmorProfList(); return isProficientWith(eq, aList); } else if (eq.isWeapon()) @@ -10187,7 +10187,7 @@ /* * Build on-the-fly so removing templates won't mess up qualify list */ - ArrayList<String> getQualifyList() + List<String> getQualifyList() { if (!qualifyListStable) { @@ -11113,7 +11113,7 @@ return favoredClasses; } - private ArrayList<String> getSelectedArmorProfList() + private List<String> getSelectedArmorProfList() { final ArrayList<String> aList = new ArrayList<String>(); @@ -11491,7 +11491,7 @@ continue; // Don't add auto-feat } - anAbility = (Ability) anAbility.clone(); + anAbility = anAbility.clone(); anAbility.addAssociated(aString); if (isAuto) @@ -11934,7 +11934,7 @@ aString = outputString.substring(1); // TODO: value never used } - private ArrayList<String> getSelectedShieldProfList() + private List<String> getSelectedShieldProfList() { final ArrayList<String> aList = new ArrayList<String>(); @@ -13852,13 +13852,13 @@ for (final Ability a : this.getRealFeatList()) { - aClone.addRealAbility(AbilityCategory.FEAT, (Ability)(a.clone())); + aClone.addRealAbility(AbilityCategory.FEAT, (a.clone())); } for ( final AbilityCategory cat : theAbilities.getKeySet() ) { for ( final Ability a : getRealAbilityList(cat) ) { - aClone.addRealAbility(cat, (Ability)a.clone()); + aClone.addRealAbility(cat, a.clone()); } } @@ -15696,7 +15696,7 @@ return addIt ? 1 : 0; } - anAbility = (Ability) anAbility.clone(); + anAbility = anAbility.clone(); // addFeat(anAbility, LevelInfo); addAbility(aCategory, anAbility, LevelInfo); @@ -15905,7 +15905,7 @@ else if (vFeat.isMultiples()) { Ability aggregateFeat = aHashMap.get(vFeat.getKeyName()); - aggregateFeat = (Ability) aggregateFeat.clone(); + aggregateFeat = aggregateFeat.clone(); for (int e1 = 0; e1 < vFeat.getAssociatedCount(); ++e1) { @@ -15934,7 +15934,7 @@ else if (autoFeat.isMultiples()) { Ability aggregateFeat = aHashMap.get(autoFeat.getKeyName()); - aggregateFeat = (Ability) aggregateFeat.clone(); + aggregateFeat = aggregateFeat.clone(); for (int e1 = 0; e1 < autoFeat.getAssociatedCount(); ++e1) { Modified: Trunk/pcgen/code/src/java/pcgen/core/PointBuyCost.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PointBuyCost.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/PointBuyCost.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -38,7 +38,7 @@ { private int statValue = 0; private int statCost = 0; - private ArrayList<Prerequisite> preReqList = null; + private List<Prerequisite> preReqList = null; public PointBuyCost(final int argStatValue) { Modified: Trunk/pcgen/code/src/java/pcgen/core/PointBuyMethod.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PointBuyMethod.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/PointBuyMethod.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -39,7 +39,7 @@ { private String methodName = ""; private String pointFormula = "0"; - private ArrayList<BonusObj> bonusList = null; + private List<BonusObj> bonusList = null; public PointBuyMethod(final String argMethodName, final String argPointFormula) { Modified: Trunk/pcgen/code/src/java/pcgen/core/Race.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Race.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/Race.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -27,6 +27,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.StringTokenizer; import pcgen.core.bonus.BonusObj; @@ -44,10 +45,10 @@ */ public final class Race extends PObject { - private ArrayList<String> monCCSkillList = null; - private ArrayList<String> monCSkillList = null; + private List<String> monCCSkillList = null; + private List<String> monCSkillList = null; // TODO - Why do we need a hit point map in the race? - private HashMap<String, Integer> hitPointMap = new HashMap<String, Integer>(); + private Map<String, Integer> hitPointMap = new HashMap<String, Integer>(); private Integer initMod = Integer.valueOf(0); private Integer startingAC = Integer.valueOf(10); private String hitDieLock = Constants.EMPTY_STRING; @@ -81,7 +82,7 @@ private int monsterClassLevels = 0; private int reach = 5; private String raceType = Constants.s_NONE; - private ArrayList<String> racialSubTypes = new ArrayList<String>(); + private List<String> racialSubTypes = new ArrayList<String>(); /** * Sets this races advancement to not be limited. Modified: Trunk/pcgen/code/src/java/pcgen/core/Skill.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Skill.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/Skill.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -73,8 +73,8 @@ /** Include skills as per UI choice = 3 */ public static final int INCLUDE_SKILLS_AS_UI = 3; - private ArrayList<String> classList = new ArrayList<String>(); // list of classes with class-access to this skill - private ArrayList<String> rankList = new ArrayList<String>(); + private List<String> classList = new ArrayList<String>(); // list of classes with class-access to this skill + private List<String> rankList = new ArrayList<String>(); private String keyStat = ""; private String rootName = ""; @@ -178,7 +178,7 @@ * Get a list of classes * @return classList */ - public ArrayList<String> getClassList() + public List<String> getClassList() { return classList; } @@ -508,7 +508,7 @@ * Get list of ranks * @return rankList */ - public ArrayList<String> getRankList() + public List<String> getRankList() { return rankList; } Modified: Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -39,7 +39,7 @@ public final class SubstitutionClass extends PCClass { private List<String> levelArray = null; - private ArrayList<Integer> modLevels = null; + private List<Integer> modLevels = null; /** Constructor */ public SubstitutionClass() Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/SimpleWeaponProfChoiceManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/SimpleWeaponProfChoiceManager.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/SimpleWeaponProfChoiceManager.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -464,7 +464,7 @@ if (anAbility == null) { anAbility = Globals.getAbilityKeyed("FEAT", aName); - anAbility = (Ability) anAbility.clone(); + anAbility = anAbility.clone(); if (anAbility != null) { Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/SpellLevelChoiceManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/SpellLevelChoiceManager.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/SpellLevelChoiceManager.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -36,7 +36,7 @@ */ public class SpellLevelChoiceManager extends AbstractComplexChoiceManager<String> { - private ArrayList<String> aBonusList = new ArrayList<String>(); + private List<String> aBonusList = new ArrayList<String>(); private String stChoices = ""; @@ -191,7 +191,7 @@ * * @return Returns the aBonusList. */ - public final ArrayList<String> getABonusList() + public final List<String> getABonusList() { return aBonusList; } Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/BaseKit.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/BaseKit.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/BaseKit.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -43,7 +43,7 @@ protected int choiceCount = 1; private List<Prerequisite> prereqs = null; private List<Range> options = new ArrayList<Range>(); - private ArrayList<String> lookups = new ArrayList<String>(); + private List<String> lookups = new ArrayList<String>(); /** * Set the number of choices (after converting to an integer.) Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitLevelAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitLevelAbility.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitLevelAbility.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -45,7 +45,7 @@ private String theClassName = ""; private int theLevel = -1; - private ArrayList<AbilityChoice> theAbilities = new ArrayList<AbilityChoice>(); + private List<AbilityChoice> theAbilities = new ArrayList<AbilityChoice>(); private transient PCClass theClass = null; @@ -75,7 +75,7 @@ static class AbilityChoice { - private ArrayList<String> theChoices = new ArrayList<String>(); + private List<String> theChoices = new ArrayList<String>(); private String theAbilityName = ""; AbilityChoice(final String ability, final List<String> choices) Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -82,7 +82,7 @@ private boolean allowDups = false; private int dupChoices = 0; private int numFeats = 0; - private ArrayList<Ability> previousChoices = new ArrayList<Ability>(); + private List<Ability> previousChoices = new ArrayList<Ability>(); private String lastCategorySeen = ""; final HashMap<String, AbilityChoice> nameMap = new HashMap<String, AbilityChoice>(); @@ -252,7 +252,7 @@ return; } - ArrayList<Ability> abilityList = getAbilityList(lastCategorySeen, aToken, aPC); + List<Ability> abilityList = getAbilityList(lastCategorySeen, aToken, aPC); Iterator<Ability> abLIt = abilityList.iterator(); while (abLIt.hasNext()) @@ -490,7 +490,7 @@ * * @return a list of AbilityInfo Objects */ - private ArrayList<Ability> getAbilityList( + private List<Ability> getAbilityList( final String acategory, String abilityToken, final PlayerCharacter aPC) Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityFeat.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityFeat.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityFeat.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -371,7 +371,7 @@ return; } - ArrayList<String> featList = getFeatList(aToken, aPC); + List<String> featList = getFeatList(aToken, aPC); Iterator<String> fi = featList.iterator(); hasPrereqs = false; while (fi.hasNext()) @@ -436,7 +436,7 @@ * @param aPC * @return a list of feat names */ - private ArrayList<String> getFeatList(final String aToken, final PlayerCharacter aPC) { + private List<String> getFeatList(final String aToken, final PlayerCharacter aPC) { if (aToken.startsWith("TYPE=") || aToken.startsWith("TYPE.")) { Modified: Trunk/pcgen/code/src/java/pcgen/core/utils/CoreUtility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/utils/CoreUtility.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/core/utils/CoreUtility.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -235,7 +235,7 @@ { final File aFile = new File(fileName); - return aFile.toURL().toString(); + return aFile.toURI().toURL().toString(); } /** Modified: Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -120,7 +120,7 @@ private JTableEx jListAvailable; private JTextPane jItemDesc; private String customName = ""; - private ArrayList[] newTypeList = { null, null }; + private List[] newTypeList = { null, null }; private int eqType = EQTYPE_NONE; private int iListCount = 0; private PlayerCharacter aPC; Modified: Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -578,7 +578,7 @@ private class KitListModel extends AbstractListModel { - private ArrayList<Kit> theList = null; + private List<Kit> theList = null; /** * Constructor Modified: Trunk/pcgen/code/src/java/pcgen/gui/MacGUI.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/MacGUI.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/gui/MacGUI.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -86,7 +86,7 @@ try { java.lang.reflect.Method method = sysclass.getDeclaredMethod("addURL",parameters); method.setAccessible(true); - method.invoke(sysloader, new Object[]{quaquaFile.toURL()}); + method.invoke(sysloader, new Object[]{quaquaFile.toURI().toURL()}); } catch(Exception e) { System.out.println("Exception in MacGUI::initialize" + e.toString()); System.out.println("Unable to add Quaqua Look and Feel as an option."); Modified: Trunk/pcgen/code/src/java/pcgen/gui/PToolBar.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/PToolBar.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/gui/PToolBar.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -316,7 +316,7 @@ } else { - URL aurl = helpFile.toURL(); + URL aurl = helpFile.toURI().toURL(); helpPane.setPage(aurl); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -463,7 +463,7 @@ public void applyPluginPreferences() { - ArrayList<PreferencesPanel> panelList = compInst.getPanelList(); + List<PreferencesPanel> panelList = compInst.getPanelList(); for (int i = 0; i < panelList.size(); i++) { @@ -3659,8 +3659,8 @@ } public static class PreferencesComponent implements GMBComponent { - private ArrayList<PreferencesPanel> panelList = new ArrayList<PreferencesPanel>(); - private ArrayList<String> nameList = new ArrayList<String>(); + private List<PreferencesPanel> panelList = new ArrayList<PreferencesPanel>(); + private List<String> nameList = new ArrayList<String>(); public void handleMessage(GMBMessage message) { if(message instanceof PreferencesPanelAddMessage) { @@ -3670,11 +3670,11 @@ } } - public ArrayList<String> getNameList() { + public List<String> getNameList() { return nameList; } - public ArrayList<PreferencesPanel> getPanelList() { + public List<PreferencesPanel> getPanelList() { return panelList; } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterDialogFactory.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterDialogFactory.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterDialogFactory.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -1897,7 +1897,7 @@ private JButton deleteButton; private JTextArea editorArea; private List customFilters; - private Map customFiltersOrigin; + private Map<String, String> customFiltersOrigin; private SortedListModel customModel; private SortedListModel standardModel; @@ -1908,7 +1908,7 @@ { super(Globals.getRootFrame(), PropertyFactory.getString("in_filterCustom")); this.customFilters = new ArrayList(); - this.customFiltersOrigin = new HashMap(); + this.customFiltersOrigin = new HashMap<String, String>(); this.init(); } @@ -2432,7 +2432,7 @@ for (Enumeration filters = customModel.elements(); filters.hasMoreElements();) { filter = filters.nextElement(); - origin = (String) customFiltersOrigin.get(filter.getClass().getName()); + origin = customFiltersOrigin.get(filter.getClass().getName()); if ((origin == null) || ("available".equals(origin))) { @@ -2466,7 +2466,7 @@ for (Iterator it = customFilters.iterator(); it.hasNext();) { filter = it.next(); - origin = (String) customFiltersOrigin.get(filter.getClass().getName()); + origin = customFiltersOrigin.get(filter.getClass().getName()); if (origin == null) { Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -4138,7 +4138,7 @@ w.flush(); w.close(); - URL url = outFile.toURL(); + URL url = outFile.toURI().toURL(); Utility.viewInBrowser(url.toString()); } catch (Exception ex) @@ -4341,7 +4341,7 @@ } else if (obj instanceof String) { - setSelectedItem((String) obj); + setSelectedItem(obj); } else { Modified: Trunk/pcgen/code/src/java/pcgen/gui/utils/Utility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/utils/Utility.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/gui/utils/Utility.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -700,7 +700,7 @@ printToWriter(w, fileName, pc); w.close(); - URL url = outFile.toURL(); + URL url = outFile.toURI().toURL(); viewInBrowser(url.toString()); } catch (Exception ex) Modified: Trunk/pcgen/code/src/java/pcgen/io/EntityEncoder.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/EntityEncoder.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/io/EntityEncoder.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -153,7 +153,7 @@ final class EntityMap { - private final Map map = new HashMap(); + private final Map<String, String> map = new HashMap<String, String>(); /** * Get value Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -1207,7 +1207,7 @@ if ((anAbility != null) /*&& !aPC.hasFeatAutomatic(aName)*/) { - anAbility = (Ability) anAbility.clone(); + anAbility = anAbility.clone(); AbilityUtilities.modFeat(aPC, null, anAbility.getKeyName(), true, !anAbility.isMultiples()); @@ -1873,7 +1873,7 @@ { final StringTokenizer skillTokenizer = new StringTokenizer(line, ":"); String skillName; - List aRankList; + List<String> aRankList; Integer outputIndex; try @@ -1903,7 +1903,7 @@ // If newer version, then we can determine which skill belongs to which class as it // is saved in the PCG file // - aRankList = new ArrayList(); + aRankList = new ArrayList<String>(); if (pcgVersion >= 2) { @@ -1940,7 +1940,7 @@ { for (int i = 0; i < aRankList.size(); i++) { - String bRank = (String) aRankList.get(i); + String bRank = aRankList.get(i); int iOffs = bRank.indexOf(':'); Float fRank = new Float(bRank.substring(iOffs + 1)); PCClass aClass = Modified: Trunk/pcgen/code/src/java/pcgen/io/filters/PatternFilter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/filters/PatternFilter.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/io/filters/PatternFilter.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -23,8 +23,8 @@ public class PatternFilter implements OutputFilter { private String outputFilterName = ""; - private ArrayList<String> match = null; - private ArrayList<String> replace = null; + private List<String> match = null; + private List<String> replace = null; /** * Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstFileLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstFileLoader.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstFileLoader.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -170,7 +170,7 @@ try { - aURL = aFile.toURL(); + aURL = aFile.toURI().toURL(); final int length = (int) aFile.length(); inputStream = new FileInputStream(aFile); Modified: Trunk/pcgen/code/src/java/pcgen/util/ComparableComparator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/ComparableComparator.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/util/ComparableComparator.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -32,7 +32,7 @@ * @author <a href="mailto:bi...@al...">B. K. Oxley (binkley)</a> * @version $Revision$ */ -public final class ComparableComparator implements Comparator<Comparable> +public final class ComparableComparator<T extends Comparable<T>> implements Comparator<T> { /** Constructs a <code>ComparableComparator</code>. */ public ComparableComparator() @@ -43,7 +43,7 @@ /** * {@inheritDoc} */ - public int compare(Comparable o1, Comparable o2) + public int compare(T o1, T o2) { return o1.compareTo(o2); } Modified: Trunk/pcgen/code/src/java/pcgen/util/FOPHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/FOPHandler.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/util/FOPHandler.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -218,7 +218,7 @@ { XMLReader parser = inputHandler.getParser(); - Map rendererOptions = new HashMap(); + Map<String, Boolean> rendererOptions = new HashMap<String, Boolean>(); rendererOptions.put("fineDetail", Boolean.valueOf(false)); driver.getRenderer().setOptions(rendererOptions); driver.getRenderer().setProducer("PC Gen Character Generator"); Modified: Trunk/pcgen/code/src/java/pcgen/util/PJEP.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/PJEP.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/util/PJEP.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -184,6 +184,7 @@ * @param inStack * @throws ParseException */ + @SuppressWarnings("unchecked") //Uses JEP, which doesn't use generics public void run(Stack inStack) throws ParseException { LstUtils Modified: Trunk/pcgen/code/src/java/pcgen/util/chooser/ChooserInterface.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/chooser/ChooserInterface.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/pcgen/util/chooser/ChooserInterface.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -28,6 +28,8 @@ * choices have been made. The dialog is always modal, so a * call to show() will block program execution. * + * TODO: Make these lists use generics. + * * @author Jonas Karlsson * @version $Revision$ */ Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetModel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetModel.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetModel.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -15,6 +15,7 @@ import javax.swing.SwingConstants; import java.awt.Component; import java.util.ArrayList; +import java.util.List; /** * @@ -23,9 +24,9 @@ public class CharacterSheetModel { private JTabbedPane masterPane = new JTabbedPane(); - private ArrayList<PlayerCharacter> characters = + private List<PlayerCharacter> characters = new ArrayList<PlayerCharacter>(); - private ArrayList<CharacterPanel> infoPanes = + private List<CharacterPanel> infoPanes = new ArrayList<CharacterPanel>(); private CharacterInfoTabPanel infoPanel; @@ -91,7 +92,7 @@ /** * @return Returns the infoPanes. */ - public ArrayList<CharacterPanel> getInfoPanes() + public List<CharacterPanel> getInfoPanes() { return infoPanes; } Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ArmorPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ArmorPane.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ArmorPane.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -26,7 +26,7 @@ public class ArmorPane extends javax.swing.JPanel { private PlayerCharacter pc; - private ArrayList<Component> fields = new ArrayList<Component>(); + private List<Component> fields = new ArrayList<Component>(); private JLabel typeName; private JPanel typeNamePanel; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/AttributePane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/AttributePane.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/AttributePane.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -17,6 +17,7 @@ import java.awt.FlowLayout; import java.awt.Font; import java.util.ArrayList; +import java.util.List; /** * Confirmed no memory Leaks Dec 10, 2004 @@ -25,7 +26,7 @@ public class AttributePane extends JPanel { private PlayerCharacter pc; - private ArrayList<Attribute> attrList = new ArrayList<Attribute>(); + private List<Attribute> attrList = new ArrayList<Attribute>(); private static final Font FONT_EIGHT = new Font("Dialog", 0, 8); private static final Font FONT_BFOURTEEN = new Font("Dialog", 1, 14); Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/MusicPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/MusicPane.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/MusicPane.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -11,6 +11,7 @@ import javax.swing.JCheckBox; import java.util.ArrayList; +import java.util.List; import java.util.Properties; /** @@ -20,7 +21,7 @@ { private PlayerCharacter pc; - private ArrayList<JCheckBox> checkList = new ArrayList<JCheckBox>(); + private List<JCheckBox> checkList = new ArrayList<JCheckBox>(); private Properties pcProperties; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PerDayPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PerDayPane.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PerDayPane.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -11,6 +11,7 @@ import javax.swing.JCheckBox; import java.util.ArrayList; +import java.util.List; import java.util.Properties; /** @@ -22,7 +23,7 @@ private PlayerCharacter pc; private String var = ""; private String var2 = ""; - private ArrayList<JCheckBox> checkList = new ArrayList<JCheckBox>(); + private List<JCheckBox> checkList = new ArrayList<JCheckBox>(); private Properties pcProperties; private boolean updateProperties = false; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/RagePane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/RagePane.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/RagePane.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -12,6 +12,7 @@ import javax.swing.JCheckBox; import java.awt.Font; import java.util.ArrayList; +import java.util.List; import java.util.Properties; /** @@ -21,7 +22,7 @@ public class RagePane extends javax.swing.JPanel { private PlayerCharacter pc; - private ArrayList<JCheckBox> checkList = new ArrayList<JCheckBox>(); + private List<JCheckBox> checkList = new ArrayList<JCheckBox>(); private static final String rageText1 = "The Barbarian temporarily gains +4 to Strength, +4 to Constitution, and a +2 morale bonus on Will saves, but suffers a -2 penalty to AC."; private static final String rageText2 = Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SkillsPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SkillsPane.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SkillsPane.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -28,7 +28,7 @@ public class SkillsPane extends javax.swing.JPanel { private PlayerCharacter pc; - private ArrayList<Component> componentList = new ArrayList<Component>(); + private List<Component> componentList = new ArrayList<Component>(); private static final String BLANK = ""; private static final String STAR = "*"; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/TurnPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/TurnPane.java 2006-12-29 16:50:31 UTC (rev 1827) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/TurnPane.java 2006-12-29 17:36:22 UTC (rev 1828) @@ -18,6 +18,7 @@ import java.awt.GridBagConstraints; import java.util.ArrayList; +import java.util.List; import java.util.Properties; /** @@ -28,7 +29,7 @@ { private PlayerCharacter pc; private String turnType; - private ArrayList<JCheckBox> checkList = new ArrayList<JCheckBox>(); + private List<JCheckBox> checkList = new ArrayList<JCheckBox>(); private Properties pcProperties; private boolean updateProperties = false; ... [truncated message content] |
From: <juj...@us...> - 2006-12-31 16:29:44
|
Revision: 1842 http://svn.sourceforge.net/pcgen/?rev=1842&view=rev Author: jujutsunerd Date: 2006-12-31 08:29:42 -0800 (Sun, 31 Dec 2006) Log Message: ----------- Fixed more generics. Fixed other warnings. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java Trunk/pcgen/code/src/java/pcgen/core/Campaign.java Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/SpellProgressionInfo.java Trunk/pcgen/code/src/java/pcgen/core/Vision.java Trunk/pcgen/code/src/java/pcgen/core/character/EquipSet.java Trunk/pcgen/code/src/java/pcgen/core/character/SpellBook.java Trunk/pcgen/code/src/java/pcgen/core/npcgen/ClassDataParser.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/SourceBasePanel.java Trunk/pcgen/code/src/java/pcgen/util/chooser/RandomChooser.java Trunk/pcgen/code/src/test/pcgen/core/GlobalsTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/AbstractComplexChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/ArmorProfChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/ArmorTypeChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/ClassSkillsChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/DomainChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/EquipmentTypeChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/FeatAddChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/FeatChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/FeatListChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/FeatSelectChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/HPChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/MiscChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/ProficiencyChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/RaceChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SAListChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SchoolsChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SkillListChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SkillListCrossClassChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SkillListNonClassChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SkillsChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SkillsNamedChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SkillsNamedToCCSkillChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SkillsNamedToCSkillChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SpellClassesChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SpellLevelChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SpellListChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/SpellsChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/StatChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/WeaponFocusChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/WeaponProfChoiceManagerTest.java Trunk/pcgen/code/src/test/pcgen/core/chooser/WeaponProfTypeChoiceManagerTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java 2006-12-31 16:06:48 UTC (rev 1841) +++ Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java 2006-12-31 16:29:42 UTC (rev 1842) @@ -36,30 +36,31 @@ /** * This tiny little class replaces a simple string representation of an Ability. * Since the move to Abilities, we can no longer look up these up based solely - * on name, we now also need category. This also allows for a set of + * on name, we now also need category. This also allows for a set of * Prerequisites to be associated with this AbilityInfo Object and can check * whether a given PC qualifies. - * - * @author Andrew Wilson <nu...@so...> + * + * @author Andrew Wilson <nu...@so...> */ public class AbilityInfo implements Comparable<Object>, Categorisable { - protected String keyName; - protected String category; - private Ability realThing; - private List<Prerequisite> prereqList; - private ArrayList<String> decorations; - protected char delim = '<'; + protected String keyName; + protected String category; + private Ability realThing; + private List<Prerequisite> prereqList; + private ArrayList<String> decorations; + protected char delim = '<'; private static final String split1 = "[<>\\|]"; private static final String split2 = "[\\[\\]\\|]"; - /** * Make a new object to hold minimal info about Abilities - * - * @param category the Ability's category - * @param key the Key of the Ability + * + * @param category + * the Ability's category + * @param key + * the Key of the Ability */ public AbilityInfo(String category, String key) { @@ -77,24 +78,29 @@ super(); this.category = ""; - this.keyName = ""; + this.keyName = ""; } /** * Get the Ability Object that this was a proxy for - * - * @return Returns the Ability. + * + * @return Returns the Ability. */ public Ability getAbility() { if (realThing == null) { - realThing = AbilityUtilities.retrieveAbilityKeyed(this.category, this.keyName); + realThing = AbilityUtilities.retrieveAbilityKeyed(this.category, + this.keyName); decorations = new ArrayList<String>(); - if ((realThing != null) && (!realThing.getKeyName().equals(this.keyName))) { - // get the decorations, throw away the name (because we already have it in keyname) - EquipmentUtilities.getUndecoratedName(this.keyName, decorations); + if ((realThing != null) + && (!realThing.getKeyName().equals(this.keyName))) + { + // get the decorations, throw away the name (because we already + // have it in keyname) + EquipmentUtilities + .getUndecoratedName(this.keyName, decorations); } } @@ -103,18 +109,28 @@ /** * Return an iterator over any Choices made for the Ability represented + * * @return an iterator */ - @SuppressWarnings("unchecked") //Collections.EMPTY_LIST is not generic. - public Iterator<String> getChoicesIterator() { - final List<String> ret = (getAbility() != null) ? decorations : Collections.EMPTY_LIST; - return ret.iterator(); + public Iterator<String> getChoicesIterator() + { + List<String> returnList; + if (getAbility() != null) + { + returnList = decorations; + } + else + { + returnList = Collections.emptyList(); + } + return returnList.iterator(); + } /** * Get the category of the Ability this AbilityInfo object represents - * - * @return Returns the category. + * + * @return Returns the category. */ public final String getCategory() { @@ -123,8 +139,8 @@ /** * Get the key of the Ability this AbilityInfo object represents - * - * @return Returns the key. + * + * @return Returns the key. */ public final String getKeyName() { @@ -133,10 +149,10 @@ /** * (non-Javadoc) - * - * @return a String representation of this AbilityInfo - * - * @see java.lang.Object#toString() + * + * @return a String representation of this AbilityInfo + * + * @see java.lang.Object#toString() */ public String toString() { @@ -146,7 +162,7 @@ /** * Extract the key and any prerequisites that this Ability has, store them * in the object's fields - * + * * @param unparsed */ protected void extractPrereqs(String unparsed) @@ -165,8 +181,9 @@ prereqList = new ArrayList<Prerequisite>(); } - List<String> tokens = Arrays.asList(unparsed.split(delim == '<' ? split1 : split2)); - Iterator<String> tokIt = tokens.iterator(); + List<String> tokens = Arrays.asList(unparsed + .split(delim == '<' ? split1 : split2)); + Iterator<String> tokIt = tokens.iterator(); // extract and assign the choice from the unparsed string this.keyName = tokIt.next(); @@ -194,10 +211,11 @@ /** * Does the PC qualify to take this Ability - * - * @param pc The Player Character to test the prerequisites against. - * - * @return whether the PC qualifies + * + * @param pc + * The Player Character to test the prerequisites against. + * + * @return whether the PC qualifies */ public boolean qualifies(PlayerCharacter pc) { @@ -210,13 +228,14 @@ } /** - * Compares this AbilityInfo Object with an Object passed in. The object + * Compares this AbilityInfo Object with an Object passed in. The object * passed in should be either an AbilityInfo Object or a PObject. - * - * @param obj the object to test against - * - * @return the result of the compare, negative integer if this should sort - * before + * + * @param obj + * the object to test against + * + * @return the result of the compare, negative integer if this should sort + * before */ public int compareTo(Object obj) { @@ -230,7 +249,8 @@ { return otherCat.compareTo(this.getCategory()); } - return ((AbilityInfo) obj).getKeyName().compareTo(this.getKeyName()); + return ((AbilityInfo) obj).getKeyName() + .compareTo(this.getKeyName()); } catch (ClassCastException e) { @@ -242,7 +262,8 @@ } catch (ClassCastException ex) { - // If this can't be converted to a PObject then they aren't comparable and + // If this can't be converted to a PObject then they aren't + // comparable and // Should throw the ClassCastException PObject pObj = (PObject) obj; @@ -254,8 +275,8 @@ /** * this is only here so that this implements all the methods of * Categorisable - * - * @return the name of the object + * + * @return the name of the object */ public String getDisplayName() { Modified: Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2006-12-31 16:06:48 UTC (rev 1841) +++ Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2006-12-31 16:29:42 UTC (rev 1842) @@ -665,7 +665,7 @@ final ArrayList<String> choices = new ArrayList<String>(); final String undoctoredKey = aFeatKey; final String baseKey = EquipmentUtilities.getUndecoratedName(aFeatKey, choices); - String subKey = choices.size() > 0 ? (String) choices.get(0) : ""; + String subKey = choices.size() > 0 ? choices.get(0) : ""; // See if our choice is not auto or virtual Ability anAbility = aPC.getRealFeatKeyed(undoctoredKey); Modified: Trunk/pcgen/code/src/java/pcgen/core/Campaign.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Campaign.java 2006-12-31 16:06:48 UTC (rev 1841) +++ Trunk/pcgen/code/src/java/pcgen/core/Campaign.java 2006-12-31 16:29:42 UTC (rev 1842) @@ -1166,15 +1166,15 @@ * Get the campaign options as a List * @return campaign options */ - public List<?> getOptionsList() + public List<String> getOptionsList() { - final List<Object> aList = new ArrayList<Object>(); + final List<String> aList = new ArrayList<String>(); if (options != null) { for (Enumeration<?> e = options.propertyNames(); e.hasMoreElements();) { - aList.add(e.nextElement()); + aList.add(e.nextElement().toString()); } } Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-12-31 16:06:48 UTC (rev 1841) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-12-31 16:29:42 UTC (rev 1842) @@ -1035,7 +1035,7 @@ * @param aType a TYPE String * @return List of Abilities */ - public static List<? extends PObject> getAbilitiesByType(final String aCategory, final String aType) + public static List<Ability> getAbilitiesByType(final String aCategory, final String aType) { List<Ability> abilityList = new ArrayList<Ability>(); for ( Categorisable c : getUnmodifiableAbilityList(aCategory) ) Modified: Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2006-12-31 16:06:48 UTC (rev 1841) +++ Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2006-12-31 16:29:42 UTC (rev 1842) @@ -50,71 +50,72 @@ /** * <code>PCTemplate</code>. - * - * @author Mark Hulsman <hul...@pu...> - * @version $Revision$ + * + * @author Mark Hulsman <hul...@pu...> + * @version $Revision$ */ public final class PCTemplate extends PObject implements HasCost { - /////////////////////////////////////////////////////////////////////// + // ///////////////////////////////////////////////////////////////////// // Static properties - /////////////////////////////////////////////////////////////////////// + // ///////////////////////////////////////////////////////////////////// - private AbilityStore abilityCatStore = null; - private List<String> featStrings = null; - /** A Map storing a List of Ability keys Keyed on AbilityCategory */ - private Map<AbilityCategory, List<String>> theAutoAbilityKeys = null; - private List<String> hitDiceStrings = null; - private List<String> templates = new ArrayList<String>(); + private AbilityStore abilityCatStore = null; + private List<String> featStrings = null; + /** A Map storing a List of Ability keys Keyed on AbilityCategory */ + private Map<AbilityCategory, List<String>> theAutoAbilityKeys = null; + private List<String> hitDiceStrings = null; + private List<String> templates = new ArrayList<String>(); - private HashMap<String, String> chosenFeatStrings = null; - - /** + private HashMap<String, String> chosenFeatStrings = null; + + /** * A Map storing a Map of chosen Ability keys keyed on the level it is * granted at with a prefix of L (level-based) or H (hitdice-based) keyed on * AbilityCategory. */ private Map<AbilityCategory, Map<String, String>> theChosenAbilityKeys = null; - - private List<String> templatesAdded = null; - private String cost = "1"; + private List<String> templatesAdded = null; + private String cost = "1"; + private String favoredClass = ""; // If set these two will override any other choices. - private String gender = Constants.s_NONE; - private String handed = Constants.s_NONE; + private String gender = Constants.s_NONE; + private String handed = Constants.s_NONE; - private String levelAdjustment = "0"; // now a string so that we can handle - // formulae - private String region = Constants.s_NONE; - private String subRace = Constants.s_NONE; - private String subregion = Constants.s_NONE; - private String templateSize = ""; - private boolean removable = true; - private int ChallengeRating = 0; - private int bonusInitialFeats = 0; - private int bonusSkillsPerLevel = 0; - private String hitDieLock = ""; - private int levelsPerFeat = 3; - private int nonProficiencyPenalty = 1; - private String raceType = ""; + private String levelAdjustment = "0"; // now a string so that we can + // handle + // formulae + private String region = Constants.s_NONE; + private String subRace = Constants.s_NONE; + private String subregion = Constants.s_NONE; + private String templateSize = ""; + private boolean removable = true; + private int ChallengeRating = 0; + private int bonusInitialFeats = 0; + private int bonusSkillsPerLevel = 0; + private String hitDieLock = ""; + private int levelsPerFeat = 3; + private int nonProficiencyPenalty = 1; + private String raceType = ""; private Integer hands; private Integer legs; private Integer reach; - private List<String> addedSubTypes = new ArrayList<String>(); + private List<String> addedSubTypes = new ArrayList<String>(); - private Point2D.Double face = null; + private Point2D.Double face = null; private List<String> removedSubTypes = new ArrayList<String>(); private List<String> levelMods = new ArrayList<String>(); - - /** - * A DoubleKeyMap storing abilities to be granted at a certain level. - * The Map uses level as a primary key and the ability type as the secondary - * key. + + /** + * A DoubleKeyMap storing abilities to be granted at a certain level. The + * Map uses level as a primary key and the ability type as the secondary + * key. */ private DoubleKeyMap<Integer, String, String> theLevelAbilities = null; @@ -129,19 +130,19 @@ /** * Set the number of Bonus feats that this template grants the character it * is applied to at level 0 (i.e. before classes are added). - * - * @param argBonusInitialFeats Number of Bonus feats gained + * + * @param argBonusInitialFeats + * Number of Bonus feats gained */ public void setBonusInitialFeats(final int argBonusInitialFeats) { bonusInitialFeats = argBonusInitialFeats; } - /** * Get the number of Bonus feats that this template grants the character it * is applied to at level 0 - * + * * @return the number of Bonus feats */ public int getBonusInitialFeats() @@ -149,64 +150,65 @@ return bonusInitialFeats; } - /** * Set a Bonus to the number of skill points per level that this template * grants the character it is applied to. - * - * @param argBonusSkillsPerLevel Number of bonus skill points per level. + * + * @param argBonusSkillsPerLevel + * Number of bonus skill points per level. */ public void setBonusSkillsPerLevel(final int argBonusSkillsPerLevel) { bonusSkillsPerLevel = argBonusSkillsPerLevel; } - /** * Get the Bonus to the number of skill points per level that this template * grants the character it is applied to. - * - * @return the number of bonus skill points per level granted by this template + * + * @return the number of bonus skill points per level granted by this + * template */ public int getBonusSkillsPerLevel() { return bonusSkillsPerLevel; } - /** * Set an adjustment to the Challenge rating of a Character that this - * Template is added to. This adjustment is independent of and additional - * to any adjustment made with LEVEL:<num>:CR and HD:<num>:CR tags - * - * @param argCR The adjustment to challenge rating + * Template is added to. This adjustment is independent of and additional to + * any adjustment made with LEVEL:<num>:CR and HD:<num>:CR tags + * + * @param argCR + * The adjustment to challenge rating */ public void setCR(final int argCR) { ChallengeRating = argCR; } - /** * Get the total adjustment to Challenge rating of a character at a given - * level (Class and Hit Dice). This will include the absolute adjustment + * level (Class and Hit Dice). This will include the absolute adjustment * made with CR:, LEVEL:<num>:CR and HD:<num>:CR tags - * - * @param level The level to calculate the adjustment for - * @param hitdice The Hit dice to calculate the adjustment for - * - * @return a Challenge Rating adjustment + * + * @param level + * The level to calculate the adjustment for + * @param hitdice + * The Hit dice to calculate the adjustment for + * + * @return a Challenge Rating adjustment */ public int getCR(final int level, final int hitdice) { int localCR = ChallengeRating; - if ( theLevelAbilities != null ) + if (theLevelAbilities != null) { - for ( int lvl = 0; lvl < level; lvl++ ) + for (int lvl = 0; lvl < level; lvl++) { final String crValue = theLevelAbilities.get(lvl, "CR"); - if ( crValue != null ) + if (crValue != null) { localCR += Integer.parseInt(crValue); } @@ -215,12 +217,11 @@ for (int x = 0; x < getListSize(hitDiceStrings); ++x) { - if ( - contains(hitDiceStrings.get(x), "CR:") && - doesHitDiceQualify(hitdice, x)) + if (contains(hitDiceStrings.get(x), "CR:") + && doesHitDiceQualify(hitdice, x)) { - localCR += Integer.parseInt( - getStringAfter("CR:", hitDiceStrings.get(x))); + localCR += Integer.parseInt(getStringAfter("CR:", + hitDiceStrings.get(x))); } } @@ -230,8 +231,8 @@ /** * Get a list of Feats chosen (from those potentially granted by this * Template) by the Character it was applied to. - * - * @return a hashmap of Feat names + * + * @return a hashmap of Feat names */ public HashMap<String, String> getChosenFeatStrings() { @@ -240,34 +241,36 @@ // TODO - This is rather gross. The class should not give out this sort of // internal information. - public Map<String, String> getChosenAbilityKeys(final AbilityCategory aCategory) + public Map<String, String> getChosenAbilityKeys( + final AbilityCategory aCategory) { - if (theChosenAbilityKeys != null ) + if (theChosenAbilityKeys != null) { return theChosenAbilityKeys.get(aCategory); } return null; } + /** * Set the COST of things granted by this Template. - * + * * XXX This seems insane to me, it's used for at least two different - * unrelated things in the code base. The tag this is generated from - * is undocumented and is not used in the current data. - * - * @param argCost the cost as a string, it will be converted to a double - * before being used. + * unrelated things in the code base. The tag this is generated from is + * undocumented and is not used in the current data. + * + * @param argCost + * the cost as a string, it will be converted to a double before + * being used. */ public void setCost(final String argCost) { cost = argCost; } - /** * Get the COST of things granted by this Template. - * - * @return the cost bonuses granted by this Template + * + * @return the cost bonuses granted by this Template */ public double getCost() { @@ -275,37 +278,36 @@ } /** - * Set the name of a favoured class to add to the Character this Template - * is applied to - * - * @param newClass the name of the class + * Set the name of a favoured class to add to the Character this Template is + * applied to + * + * @param newClass + * the name of the class */ public void setFavoredClass(final String newClass) { favoredClass = newClass; } - /** * Get a string that is the name of a single favoured class to be added to - * the character this Template is applied to. Each Template can only add - * a single favoured class. - * - * @return the name of the favoured class to add + * the character this Template is applied to. Each Template can only add a + * single favoured class. + * + * @return the name of the favoured class to add */ public String getFavoredClass() { return favoredClass; } - /** * <code>setGenderLock</code> locks gender to appropriate PropertyFactory * setting if String matches 'Male','Female', or 'Neuter'. - * + * * author arcady <ar...@us...> - * - * @param genderString + * + * @param genderString */ public void setGenderLock(final String genderString) { @@ -323,11 +325,10 @@ } } - /** * Get the gender that Characters this Template is applied to are locked at. - * - * @return the gender at which to lock the character + * + * @return the gender at which to lock the character */ public String getGenderLock() { @@ -336,48 +337,40 @@ /** * Set a lock on the hitdie size of a character that this template is - * applied to. Possible formats for the lock include - * - * 12 - * The character now has a Hit Dice of 12. - * - * %+2 - * Adds 2 to the current Hit Dice size. - * - * %-4 - * Subtracts 4 from the current Hit Dice size. - * - * %*3 - * Multiplies the current Hit Dice size by 3. - * - * %/2 - * Divides the current Hit Dice size by 2. - * - * %up2 - * Steps up the Hit Dice size by two steps. If the creature has a Hit - * Die of d6 it will be stepped up to d10. - * - * %down1 - * Steps down the Hit Dice size by one step. If the creature has a Hit - * Die of d6 it will be stepped down to d4. - * - * %up1|CLASS.TYPE=Monster - * Steps up the Hit Dice size by one step for any Monster class levels - * the creature has. If the creature has a Monster class Hit Die of d8 - * it will be stepped up to d10. - * - * @param hitDieLock the sting to lock to + * applied to. Possible formats for the lock include + * + * 12 The character now has a Hit Dice of 12. + * + * %+2 Adds 2 to the current Hit Dice size. + * + * %-4 Subtracts 4 from the current Hit Dice size. + * + * %*3 Multiplies the current Hit Dice size by 3. + * + * %/2 Divides the current Hit Dice size by 2. + * + * %up2 Steps up the Hit Dice size by two steps. If the creature has a Hit + * Die of d6 it will be stepped up to d10. + * + * %down1 Steps down the Hit Dice size by one step. If the creature has a + * Hit Die of d6 it will be stepped down to d4. + * + * %up1|CLASS.TYPE=Monster Steps up the Hit Dice size by one step for any + * Monster class levels the creature has. If the creature has a Monster + * class Hit Die of d8 it will be stepped up to d10. + * + * @param hitDieLock + * the sting to lock to */ public void setHitDieLock(final String hitDieLock) { this.hitDieLock = hitDieLock; } - /** * Get a string that will be used to manipulate the hit die of any creature * this template is applied to - * + * * @return the hit die manipulation string */ protected String getHitDieLock() @@ -388,23 +381,23 @@ /** * Set a formula for level adjustment (jep) to be applied to any creature * this template is applied to. - * - * @param argLevelAdjustment The formula for the level adjustment + * + * @param argLevelAdjustment + * The formula for the level adjustment */ public void setLevelAdjustment(final String argLevelAdjustment) { levelAdjustment = argLevelAdjustment; } - /** - * Calculate the level adjustment using the variable parser of the PC - * object passed in. If no PC is passed, attempts to convert the string to - * an int. - * - * @param aPC the PC to get the details of the varible parser from - * - * @return a level adjustment + * Calculate the level adjustment using the variable parser of the PC object + * passed in. If no PC is passed, attempts to convert the string to an int. + * + * @param aPC + * the PC to get the details of the varible parser from + * + * @return a level adjustment */ public int getLevelAdjustment(final PlayerCharacter aPC) { @@ -431,48 +424,48 @@ return lvlAdjust; } - /** * Get the formula that would be used to calculate a Level adjustment for * creatures this Template is applied to. - * - * @return DOCUMENT ME! + * + * @return DOCUMENT ME! */ public String getLevelAdjustmentFormula() { return levelAdjustment; } - /** - * Set an override for the one feat per 3 levels for creatures this template is applied to - * - * @param argLevelsPerFeat the number of levels between level dependant feats + * Set an override for the one feat per 3 levels for creatures this template + * is applied to + * + * @param argLevelsPerFeat + * the number of levels between level dependant feats */ public void setLevelsPerFeat(final int argLevelsPerFeat) { levelsPerFeat = argLevelsPerFeat; } - /** - * Takes an integer input which it uses to access Games mode's "statlist" array. - * If that stat has been locked at 10 then it is considered a non-ability. - * XXX This is insanely bad design, it's completely arse about face. What should - * have been done was find a way to mark a stat as a non-ability and then have the - * stat checking code interpret that as "no bonus or penalty - treat like it was - * locked at 10". Doing it this way means there is no way to actually lock a stat - * at 10. - * TODO: Fix this mess! + * Takes an integer input which it uses to access Games mode's "statlist" + * array. If that stat has been locked at 10 then it is considered a + * non-ability. XXX This is insanely bad design, it's completely arse about + * face. What should have been done was find a way to mark a stat as a + * non-ability and then have the stat checking code interpret that as "no + * bonus or penalty - treat like it was locked at 10". Doing it this way + * means there is no way to actually lock a stat at 10. TODO: Fix this mess! * disparaging comments Andrew Wilson 20060308 - * - * @param statIdx index number of the stat in question - * - * @return Whether this has been defined as a non-ability + * + * @param statIdx + * index number of the stat in question + * + * @return Whether this has been defined as a non-ability */ public boolean isNonAbility(final int statIdx) { - final List<PCStat> statList = SettingsHandler.getGame().getUnmodifiableStatList(); + final List<PCStat> statList = SettingsHandler.getGame() + .getUnmodifiableStatList(); if ((statIdx < 0) || (statIdx >= statList.size())) { @@ -494,37 +487,35 @@ return false; } - /** * Set up a penalty for being non=proficient with a weapon - * - * @param npp the amount of penalty to apply to weapons that the creature - * this template was applied to is not proficient with. + * + * @param npp + * the amount of penalty to apply to weapons that the creature + * this template was applied to is not proficient with. */ public void setNonProficiencyPenalty(final int npp) { nonProficiencyPenalty = npp; } - /** - * Get the amount of penalty to apply to weapons that the creature - * this template was applied to is not proficient with. - * + * Get the amount of penalty to apply to weapons that the creature this + * template was applied to is not proficient with. + * * author: arcady June 4, 2002 - * - * @return nonProficiencyPenalty + * + * @return nonProficiencyPenalty */ public int getNonProficiencyPenalty() { return nonProficiencyPenalty; } - /** * Produce a tailored PCC output, used for saving custom templates. - * - * @return PCC Text + * + * @return PCC Text */ public String getPCCText() { @@ -541,7 +532,8 @@ txt.append("\tBONUSSKILLPOINTS:").append(bonusSkillsPerLevel); } - if ((getChooseLanguageAutos() != null) && (getChooseLanguageAutos().length() > 0)) + if ((getChooseLanguageAutos() != null) + && (getChooseLanguageAutos().length() > 0)) { txt.append("\tCHOOSE:LANGAUTO:").append(getChooseLanguageAutos()); } @@ -571,7 +563,7 @@ { final StringBuffer buffer = new StringBuffer(); - for ( String feat : featStrings ) + for (String feat : featStrings) { if (buffer.length() != 0) { @@ -587,23 +579,25 @@ if (theAutoAbilityKeys != null) { final Set<AbilityCategory> categories = theAutoAbilityKeys.keySet(); - for ( final AbilityCategory category : categories ) + for (final AbilityCategory category : categories) { - if ( category == AbilityCategory.FEAT ) + if (category == AbilityCategory.FEAT) { continue; } - + final StringBuffer buffer = new StringBuffer(); - for ( final String key : theAutoAbilityKeys.get(category) ) + for (final String key : theAutoAbilityKeys.get(category)) { - if ( buffer.length() != 0 ) + if (buffer.length() != 0) { buffer.append(Constants.PIPE); } buffer.append(key); } - txt.append("\tABILITY:AUTO|CATEGORY=").append(category.getKeyName()).append("|").append(buffer.toString()); + txt.append("\tABILITY:AUTO|CATEGORY=").append( + category.getKeyName()).append("|") + .append(buffer.toString()); } } @@ -634,7 +628,7 @@ { final StringBuffer buffer = new StringBuffer(); - for ( Language lang : getLanguageBonus() ) + for (Language lang : getLanguageBonus()) { if (buffer.length() != 0) { @@ -648,7 +642,7 @@ } final List<String> las = getLevelAbilities(); - for ( final String la : las ) + for (final String la : las) { txt.append("\t").append(la); } @@ -760,7 +754,7 @@ { final StringBuffer buffer = new StringBuffer(); - for ( final String profKey : getWeaponProfBonus() ) + for (final String profKey : getWeaponProfBonus()) { if (buffer.length() != 0) { @@ -775,13 +769,13 @@ if (face != null) { - if(CoreUtility.doublesEqual(face.getY(), 0.0)) + if (CoreUtility.doublesEqual(face.getY(), 0.0)) { - txt.append("\tFACE:").append( face.getX()); + txt.append("\tFACE:").append(face.getX()); } else { - txt.append("\tFACE:").append( face.getX() + "," + face.getY()); + txt.append("\tFACE:").append(face.getX() + "," + face.getY()); } } @@ -799,19 +793,19 @@ { txt.append("\tREACH:").append(reach); } - + txt.append(super.getPCCText(false)); return txt.toString(); } - /** * Answers the question does the PC I've passed in meet the prerequisites of * this template. - * - * @param aPC The PC that we're asking the question about - * + * + * @param aPC + * The PC that we're asking the question about + * * @return true if the PC passes the Templates prerequisites */ public boolean isQualified(final PlayerCharacter aPC) @@ -824,88 +818,83 @@ return PrereqHandler.passesAll(getPreReqList(), aPC, this); } - /** * Get the override that this template applies to racetype - * - * @return The new racetype + * + * @return The new racetype */ public String getRaceType() { return raceType; } - /** * Set the override that this template applies to racetype - * - * @param aType The new racetype + * + * @param aType + * The new racetype */ public void setRaceType(final String aType) { raceType = aType; } - /** * Get the override that this template applies to subracetype - * - * @return The new subracetype + * + * @return The new subracetype */ public String getSubRace() { return subRace; } - /** * Set the override that this template applies to subracetype - * - * @param argSubRace The new subrace type + * + * @param argSubRace + * The new subrace type */ public void setSubRace(final String argSubRace) { subRace = argSubRace; } - - /** * Set the override that this template applies to Region - * - * @param argRegion The new Region + * + * @param argRegion + * The new Region */ public void setRegion(final String argRegion) { region = argRegion; } - /** * Get the override that this template applies to Region - * - * @return The new Region + * + * @return The new Region */ public String getRegion() { return region; } - /** * Set the override that this template applies to SubRegion - * - * @param argSubregion The new SubRegion + * + * @param argSubregion + * The new SubRegion */ public void setSubRegion(final String argSubregion) { subregion = argSubregion; } - /** * Get the override that this template applies to SubRegion - * + * * @return The new SubRegion */ public String getSubRegion() @@ -913,31 +902,29 @@ return subregion; } - /** * Set the property that controls whether this Template is removable - * - * @param argRemovable Whether this Template is removable + * + * @param argRemovable + * Whether this Template is removable */ public void setRemovable(final boolean argRemovable) { removable = argRemovable; } - /** - * Query whether this Template is removable. Factors in the visibility of + * Query whether this Template is removable. Factors in the visibility of * the Template - * - * @return whether this Template is removable + * + * @return whether this Template is removable */ public boolean isRemovable() { boolean result = false; - if ( - (getVisibility() == Visibility.DEFAULT) || - (getVisibility() == Visibility.DISPLAY_ONLY)) + if ((getVisibility() == Visibility.DEFAULT) + || (getVisibility() == Visibility.DISPLAY_ONLY)) { result = removable; } @@ -945,31 +932,35 @@ return result; } - /** * Get the Spell Resistance granted by this template to a character at a - * given level (Class and Hit Dice). This will include the absolute + * given level (Class and Hit Dice). This will include the absolute * adjustment made with SR:, LEVEL:<num>:SR and HD:<num>:SR tags - * + * * Note: unlike DR and CR, the value returned here includes the PCs own * Spell Resistance. - * - * @param level The level to calculate the SR for - * @param hitdice The Hit dice to calculate the SR for - * @param aPC DOCUMENT ME! - * - * @return the Spell Resistance granted by this Template at the given level and HD + * + * @param level + * The level to calculate the SR for + * @param hitdice + * The Hit dice to calculate the SR for + * @param aPC + * DOCUMENT ME! + * + * @return the Spell Resistance granted by this Template at the given level + * and HD */ - public int getSR(final int level, final int hitdice, final PlayerCharacter aPC) + public int getSR(final int level, final int hitdice, + final PlayerCharacter aPC) { int aSR = getSR(aPC); - if ( theLevelAbilities != null ) + if (theLevelAbilities != null) { - for ( int lvl = 0; lvl < level; lvl++ ) + for (int lvl = 0; lvl < level; lvl++) { final String srValue = theLevelAbilities.get(lvl, "SR"); - if ( srValue != null ) + if (srValue != null) { final int sr = Integer.parseInt(srValue); aSR = Math.max(aSR, sr); @@ -979,32 +970,31 @@ for (int x = 0; x < getListSize(hitDiceStrings); ++x) { - if ( - contains(hitDiceStrings.get(x), "SR:") && - doesHitDiceQualify(hitdice, x)) + if (contains(hitDiceStrings.get(x), "SR:") + && doesHitDiceQualify(hitdice, x)) { - aSR = Math.max( - Integer.parseInt( - getStringAfter("SR:", hitDiceStrings.get(x))), - aSR); + aSR = Math.max(Integer.parseInt(getStringAfter("SR:", + hitDiceStrings.get(x))), aSR); } } return aSR; } - /** - * Get a list of Special Abilities added by this Template at a given - * level (Class and Hit Dice). This will include the absolute adjustment - * made with LEVEL:<num>:SA and HD:<num>:SA tags - * - * @param level The level to calculate the adjustment for - * @param hitdice The Hit dice to calculate the adjustment for - * - * @return A list of Special Abilities + * Get a list of Special Abilities added by this Template at a given level + * (Class and Hit Dice). This will include the absolute adjustment made with + * LEVEL:<num>:SA and HD:<num>:SA tags + * + * @param level + * The level to calculate the adjustment for + * @param hitdice + * The Hit dice to calculate the adjustment for + * + * @return A list of Special Abilities */ - public List<SpecialAbility> getSpecialAbilityList(final int level, final int hitdice) + public List<SpecialAbility> getSpecialAbilityList(final int level, + final int hitdice) { final List<SpecialAbility> specialAbilityList = getListFor(ListKey.SPECIAL_ABILITY); @@ -1013,12 +1003,12 @@ return specialAbilityList; } - if ( theLevelAbilities != null ) + if (theLevelAbilities != null) { - for ( int lvl = 0; lvl < level; lvl++ ) + for (int lvl = 0; lvl < level; lvl++) { final String saString = theLevelAbilities.get(lvl, "SA"); - if ( saString != null ) + if (saString != null) { specialAbilityList.add(new SpecialAbility(saString)); } @@ -1027,14 +1017,12 @@ for (int x = 0; x < getListSize(hitDiceStrings); ++x) { - if ( - contains(hitDiceStrings.get(x), "SA:") && - doesHitDiceQualify(hitdice, x)) + if (contains(hitDiceStrings.get(x), "SA:") + && doesHitDiceQualify(hitdice, x)) { - final String saString = getStringAfter( - "SA:", - hitDiceStrings.get(x)); - final SpecialAbility sa = new SpecialAbility(saString); + final String saString = getStringAfter("SA:", hitDiceStrings + .get(x)); + final SpecialAbility sa = new SpecialAbility(saString); specialAbilityList.add(sa); } @@ -1043,15 +1031,15 @@ return specialAbilityList; } - /** * Manipulate the list of subTypes that this Template add or removes from * the creature it is applied to. - * - * Takes a | separated list of subtypes to add. may optionally be prefaced + * + * Takes a | separated list of subtypes to add. may optionally be prefaced * with .REMOVE. in which case the subtype is removed. - * - * @param aString the string to process + * + * @param aString + * the string to process */ public void addSubTypeString(final String aString) { @@ -1072,10 +1060,9 @@ } } - /** * Get the list of added SubTypes - * + * * @return the Subtypes added. */ public List<String> getAddedSubTypes() @@ -1083,10 +1070,9 @@ return Collections.unmodifiableList(addedSubTypes); } - /** * Get the list of removed SubTypes - * + * * @return the Subtypes removed. */ public List<String> getRemovedSubTypes() @@ -1094,34 +1080,32 @@ return Collections.unmodifiableList(removedSubTypes); } - /** * Method getTemplateList. Returns an array list containing the raw * templates granted by this template. This includes CHOOSE: strings which * list templates a user will be asked to choose from. - * - * @return ArrayList of granted templates + * + * @return ArrayList of granted templates */ public List<String> getTemplateList() { return templates; } - /** * Set the override that this template applies to size - * - * @param argSize the size of the creature this Template is applied to + * + * @param argSize + * the size of the creature this Template is applied to */ public void setTemplateSize(final String argSize) { templateSize = argSize; } - /** * Get the override that this template applies to size - * + * * @return the size of the creature this Template is applied to */ public String getTemplateSize() @@ -1130,26 +1114,28 @@ } /** - * Grants the character an ability at the Hit die or hit die range specified. - * The text may contain the following tags: CR - Challenge Rating, DR - Damage - * Reduction, FEAT - Feat, SA - Special Ability, SR - Spell Resistance - * - * 1-3:DR:5/1 Grants Damage Reduction of 5/+1 if natural hit dice is between - * one and three. - * - * 1+:SR:15 Grants Spell Resistance of 15 if natural hit dice is greater - * than one. - * - * 2-7:CR:2 Grants an increase in Challenge Rating of two if natural hit - * dice is between two and seven. - * - * 15+:SA:Uncanny Dodge Grants the "Uncanny Dodge" special ability if natural - * hit dice is grater than fifteen. - * - * 10+:FEAT:Alertness Grants the "Alertness" feat if natural hit dice is - * greater than ten. - * - * @param hitDiceString a string in the format specified above + * Grants the character an ability at the Hit die or hit die range + * specified. The text may contain the following tags: CR - Challenge + * Rating, DR - Damage Reduction, FEAT - Feat, SA - Special Ability, SR - + * Spell Resistance + * + * 1-3:DR:5/1 Grants Damage Reduction of 5/+1 if natural hit dice is between + * one and three. + * + * 1+:SR:15 Grants Spell Resistance of 15 if natural hit dice is greater + * than one. + * + * 2-7:CR:2 Grants an increase in Challenge Rating of two if natural hit + * dice is between two and seven. + * + * 15+:SA:Uncanny Dodge Grants the "Uncanny Dodge" special ability if + * natural hit dice is grater than fifteen. + * + * 10+:FEAT:Alertness Grants the "Alertness" feat if natural hit dice is + * greater than ten. + * + * @param hitDiceString + * a string in the format specified above */ public void addHitDiceString(final String hitDiceString) { @@ -1198,49 +1184,62 @@ hitDiceStrings.add(hitDiceString); } - /** - * Get an array of strings which may grant the following abilities at a given hit die: - * - * 1-3:DR:5/1 Grants Damage Reduction of 5/+1 if natural hit dice is between - * one and three. - * - * 1+:SR:15 Grants Spell Resistance of 15 if natural hit dice is greater - * than one. - * - * 2-7:CR:2 Grants an increase in Challenge Rating of two if natural hit - * dice is between two and seven. - * - * 15+:SA:Uncanny Dodge Grants the "Uncanny Dodge" special ability if natural - * hit dice is grater than fifteen. - * - * 10+:FEAT:Alertness Grants the "Alertness" feat if natural hit dice is - * greater than ten. - * - * @return an array of strings in the format specified above + * Get a list of strings which may grant the following abilities at a given + * hit die: + * + * 1-3:DR:5/1 Grants Damage Reduction of 5/+1 if natural hit dice is between + * one and three. + * + * 1+:SR:15 Grants Spell Resistance of 15 if natural hit dice is greater + * than one. + * + * 2-7:CR:2 Grants an increase in Challenge Rating of two if natural hit + * dice is between two and seven. + * + * 15+:SA:Uncanny Dodge Grants the "Uncanny Dodge" special ability if + * natural hit dice is grater than fifteen. + * + * 10+:FEAT:Alertness Grants the "Alertness" feat if natural hit dice is + * greater than ten. + * + * @return a list of strings in the format specified above */ - @SuppressWarnings("unchecked") //Collections.EMPTY_LIST is not generic. public List<String> getHitDiceStrings() { - return hitDiceStrings != null ? hitDiceStrings : Collections.EMPTY_LIST; + List<String> returnList; + if (hitDiceStrings != null) + { + returnList = hitDiceStrings; + } + else + { + returnList = Collections.emptyList(); + } + return returnList; + } /** - * Grants the character an ability at the level specified (total character level). + * Grants the character an ability at the level specified (total character + * level). * - * <p>The type parameter may contain the following tags: + * <p> + * The type parameter may contain the following tags: * <ul> - * <li>CR - Challenge Rating</li> - * <li>DR - Damage Reduction</li> - * <li>FEAT - Feat</li> - * <li>SA - Special Ability</li> + * <li>CR - Challenge Rating</li> + * <li>DR - Damage Reduction</li> + * <li>FEAT - Feat</li> + * <li>SA - Special Ability</li> * <li>SR - Spell Resistance</li> * </ul> - * - * <p>Feats added by this tag are considered automatic feats and do not count against - * a PC's feat pool. - * - * <p>Example:<br /> + * + * <p> + * Feats added by this tag are considered automatic feats and do not count + * against a PC's feat pool. + * + * <p> + * Example:<br /> * <code>addLevelAbility(1,"DR", "5/+1");<br/> * Grants Damage Reduction of 5/+1 at Level 1. * <p> @@ -1250,11 +1249,12 @@ * @param aLevel The level at which this ability will be granted * @param aType One of the types listed above * @param aValue A String to use as the value for that type - * + * */ - public void addLevelAbility(final int aLevel, final String aType, final String aValue) + public void addLevelAbility(final int aLevel, final String aType, + final String aValue) { - if ( theLevelAbilities == null ) + if (theLevelAbilities == null) { theLevelAbilities = new DoubleKeyMap<Integer, String, String>(); } @@ -1290,32 +1290,35 @@ { theLevelAbilities = null; } - + public List<String> getLevelAbilities() { final List<String> ret = new ArrayList<String>(); - - if ( theLevelAbilities != null ) + + if (theLevelAbilities != null) { - for ( final int lvl : theLevelAbilities.getKeySet() ) + for (final int lvl : theLevelAbilities.getKeySet()) { - for ( final String type : theLevelAbilities.getSecondaryKeySet(lvl) ) + for (final String type : theLevelAbilities + .getSecondaryKeySet(lvl)) { final String value = theLevelAbilities.get(lvl, type); final StringBuffer txt = new StringBuffer(200); - txt.append("LEVEL:").append(lvl).append(":").append(type).append(":").append(value); + txt.append("LEVEL:").append(lvl).append(":").append(type) + .append(":").append(value); ret.add(txt.toString()); } } } return ret; } - + /** * Add a list of subsidiary Templates to this template i.e. Templates (or * choices of templates) that this Template will grant. - * - * @param templateList the templates/template choices to add + * + * @param templateList + * the templates/template choices to add */ public void addTemplate(final String templateList) { @@ -1385,22 +1388,22 @@ } } - /** * Make a copy of this Template - * - * @return a clone of this Template - * - * @throws CloneNotSupportedException + * + * @return a clone of this Template + * + * @throws CloneNotSupportedException */ public Object clone() throws CloneNotSupportedException { final PCTemplate aTemp = (PCTemplate) super.clone(); - aTemp.templates = new ArrayList<String>(templates); + aTemp.templates = new ArrayList<String>(templates); - if ( theLevelAbilities != null ) + if (theLevelAbilities != null) { - aTemp.theLevelAbilities = new DoubleKeyMap<Integer, String, String>(theLevelAbilities); + aTemp.theLevelAbilities = new DoubleKeyMap<Integer, String, String>( + theLevelAbilities); } if (getListSize(hitDiceStrings) != 0) @@ -1411,8 +1414,8 @@ if (abilityCatStore != null && !abilityCatStore.isEmpty()) { aTemp.abilityCatStore = new AbilityStore(); - aTemp.abilityCatStore.addAbilityInfo( - abilityCatStore.getParsableStringRepresentation(), "", "|", false, false); + aTemp.abilityCatStore.addAbilityInfo(abilityCatStore + .getParsableStringRepresentation(), "", "|", false, false); } if (getListSize(featStrings) != 0) @@ -1420,40 +1423,42 @@ aTemp.featStrings = new ArrayList<String>(featStrings); } - if ( theAutoAbilityKeys != null ) + if (theAutoAbilityKeys != null) { - aTemp.theAutoAbilityKeys = new HashMap<AbilityCategory, List<String>>(theAutoAbilityKeys); + aTemp.theAutoAbilityKeys = new HashMap<AbilityCategory, List<String>>( + theAutoAbilityKeys); } - + if (chosenFeatStrings != null) { - aTemp.chosenFeatStrings = new HashMap<String, String>(chosenFeatStrings); + aTemp.chosenFeatStrings = new HashMap<String, String>( + chosenFeatStrings); } - if ( theChosenAbilityKeys != null ) + if (theChosenAbilityKeys != null) { - aTemp.theChosenAbilityKeys = new HashMap<AbilityCategory, Map<String, String>>(theChosenAbilityKeys); + aTemp.theChosenAbilityKeys = new HashMap<AbilityCategory, Map<String, String>>( + theChosenAbilityKeys); } return aTemp; } - /** * Generate a string that represents the changes this Template will apply. - * - * @param aPC the Pc we'd like the string generated with reference to - * + * + * @param aPC + * the Pc we'd like the string generated with reference to + * * @return a string explaining the Template */ public String modifierString(final PlayerCharacter aPC) { - final StringBuffer mods = new StringBuffer(50); // More likely to be true than 16 - // (the default) + final StringBuffer mods = new StringBuffer(50); // More likely to be + // true than 16 + // (the default) - for ( - int x = 0; - x < SettingsHandler.getGame().getUnmodifiableStatList().size(); - ++x) + for (int x = 0; x < SettingsHandler.getGame().getUnmodifiableStatList() + .size(); ++x) { if (isNonAbility(x)) { @@ -1465,7 +1470,8 @@ if (statMod != 0) { - mods.append(statName(x)).append(':').append(statMod).append(' '); + mods.append(statName(x)).append(':').append(statMod) + .append(' '); } } } @@ -1477,7 +1483,8 @@ if (getDRList().size() != 0) { - mods.append("DR:").append(DamageReduction.getDRString(aPC, getDRList())); + mods.append("DR:").append( + DamageReduction.getDRString(aPC, getDRList())); } if (aPC == null) @@ -1494,10 +1501,10 @@ mods.append("SR:").append(x).append(' '); } -// if ((getDR() != null) && !"".equals(getDR())) -// { -// mods.append("DR:").append(getDR()).append(' '); -// } + // if ((getDR() != null) && !"".equals(getDR())) + // { + // mods.append("DR:").append(getDR()).append(' '); + // } return mods.toString(); } @@ -1511,36 +1518,39 @@ if (getCR(aPC.getTotalLevels(), aPC.totalHitDice()) != 0) { - mods.append("CR:").append(getCR(aPC.getTotalLevels(), aPC.totalHitDice())) - .append(' '); + mods.append("CR:").append( + getCR(aPC.getTotalLevels(), aPC.totalHitDice())).append(' '); } if (getSR(aPC.getTotalLevels(), aPC.totalHitDice(), aPC) != 0) { - mods.append("SR:") - .append(getSR(aPC.getTotalLevels(), aPC.totalHitDice(), aPC)).append(' '); + mods.append("SR:").append( + getSR(aPC.getTotalLevels(), aPC.totalHitDice(), aPC)).append( + ' '); } -// if (!getDR(aPC.getTotalLevels(), aPC.totalHitDice()).equals("")) -// { -// mods.append("DR:").append(getDR(aPC.getTotalLevels(), aPC.totalHitDice())) -// .append(' '); -// } + // if (!getDR(aPC.getTotalLevels(), aPC.totalHitDice()).equals("")) + // { + // mods.append("DR:").append(getDR(aPC.getTotalLevels(), + // aPC.totalHitDice())) + // .append(' '); + // } return mods.toString(); } - /** * Returns an array list containing the templates granted by this template. * If there are choices to be made - * - * @param isImporting Whether the PC is being imported - * @param aPC - * - * @return a list of templates + * + * @param isImporting + * Whether the PC is being imported + * @param aPC + * + * @return a list of templates */ - List<String> getTemplates(final boolean isImporting, final PlayerCharacter aPC) + List<String> getTemplates(final boolean isImporting, + final PlayerCharacter aPC) { final List<String> newTemplates = new ArrayList<String>(); templatesAdded = new ArrayList<String>(); @@ -1553,7 +1563,8 @@ if (templateKey.startsWith("CHOOSE:")) { - templateKey = chooseTemplate(this, templateKey.substring(7), true, aPC); + templateKey = chooseTemplate(this, + templateKey.substring(7), true, aPC); } if (templateKey.length() != 0) @@ -1567,21 +1578,27 @@ return newTemplates; } - /** - * Modify the list passed in to include any special abilities granted by this Template - * - * @param aList The list to be modified - * @param level The level to add Special abilities for - * @param hitdice the hit die (/range) to add Special Abilities for - * - * @return the list passed in with any special abilities this template grants added to it + * Modify the list passed in to include any special abilities granted by + * this Template + * + * @param aList + * The list to be modified + * @param level + * The level to add Special abilities for + * @param hitdice + * the hit die (/range) to add Special Abilities for + * + * @return the list passed in with any special abilities this template + * grants added to it */ - List<SpecialAbility> addSpecialAbilitiesToList(final List<SpecialAbility> aList, final int level, final int hitdice) + List<SpecialAbility> addSpecialAbilitiesToList( + final List<SpecialAbility> aList, final int level, final int hitdice) { /* - * CONSIDER Is this really proper behaviour?!? If the PObject has anything, then - * do the detailed work? That doesn't terribly make sense to me - TRP + * CONSIDER Is this really proper behaviour?!? If the PObject has + * anything, then do the detailed work? That doesn't terribly make sense + * to me - TRP */ if (containsListFor(ListKey.SPECIAL_ABILITY)) { @@ -1591,36 +1608,37 @@ return aList; } - - /** - * Choose a template from template list, allow the chooser to be closed without - * choosing a template - * - * @param templateList List of available templates - * @param aPC The Pc that prerequisites will be checked against - * - * @return the chosen template + * Choose a template from template list, allow the chooser to be closed + * without choosing a template + * + * @param templateList + * List of available templates + * @param aPC + * The Pc that prerequisites will be checked against + * + * @return the chosen template */ -// static String chooseTemplate(final String templateList, final PlayerCharacter aPC) -// { -// return chooseTemplate(templateList, false, aPC); -// } - - + // static String chooseTemplate(final String templateList, final + // PlayerCharacter aPC) + // { + // return chooseTemplate(templateList, false, aPC); + // } /** * Construct a chooser and ask the operator to choose a template - * - * @param templateList List of available templates - * @param forceChoice Whether the user is permitted to close the chooser without making a choice - * @param aPC The Pc that prerequisites will be checked against - * - * @return the chosen template + * + * @param templateList + * List of available templates + * @param forceChoice + * Whether the user is permitted to close the chooser without + * making a choice + * @param aPC + * The Pc that prerequisites will be checked against + * + * @return the chosen template */ - static String chooseTemplate( - final PObject anOwner, - final String templateList, - final boolean forceChoice, + static String chooseTemplate(final PObject anOwner, + final String templateList, final boolean forceChoice, final PlayerCharacter aPC) { final List<PCTemplate> availableList = new ArrayList<PCTemplate>(); @@ -1628,7 +1646,9 @@ while (strTok.hasMoreTokens()) { PCTemplate template = Globals.getTemplateKeyed(strTok.nextToken()); - if (template != null && PrereqHandler.passesAll(template.getPreReqList(), aPC, template)) + if (template != null + && PrereqHandler.passesAll(template.getPreReqList(), aPC, + template)) { availableList.add(template); } @@ -1650,7 +1670,8 @@ { return ""; } - Globals.getChoiceFromList(title, availableList, selectedList, 1, forceChoice); + Globals.getChoiceFromList(title, availableList, selectedList, 1, + forceChoice); if (selectedList != null && selectedList.size() == 1) { return selectedList.get(0).getKeyName(); @@ -1659,11 +1680,11 @@ return ""; } - /** * Add a subsidiary Template that this Template will add - * - * @param templateName the name of the Template to add + * + * @param templateName + * the name of the Template to add */ public void addTemplateName(final String templateName) { @@ -1674,25 +1695,33 @@ templatesAdded.add(templateName); } - /** * Get... [truncated message content] |
From: <jde...@us...> - 2007-01-01 22:37:25
|
Revision: 1852 http://svn.sourceforge.net/pcgen/?rev=1852&view=rev Author: jdempsey Date: 2007-01-01 14:37:25 -0800 (Mon, 01 Jan 2007) Log Message: ----------- Fix bug #1625482 - Error Checking PRESPELLTYPE for class Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-01-01 20:13:11 UTC (rev 1851) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-01-01 22:37:25 UTC (rev 1852) @@ -4681,10 +4681,8 @@ + allSpellLevel); final int index = baseSpellIndex(); - final PCStat aStat; - if ((index != -2) && (index >= 0) && (index < aPC.getStatList().size())) { - aStat = aPC.getStatList().getStatAt(index); + final PCStat aStat = aPC.getStatList().getStatAt(index); stat = aPC.getStatList().getTotalStatFor(aStat.getAbb()); } @@ -4728,45 +4726,44 @@ if (castInfo.hasKnownProgression()) { List<String> knownList = castInfo.getKnownForLevel(pcLevel); - String spells = ""; if (spellLevel >= 0 && spellLevel < knownList.size()) { - spells = knownList.get(spellLevel); - } + String spells = knownList.get(spellLevel); - if (spells.endsWith("+d")) { - psiSpecialty = true; - spells = spells.substring(0, spells.length() - 2); - } - - int t; - if (castInfo.containsSpellFormula()) { - t = aPC.getVariableValue(spells, "").intValue(); - } else { - t = Integer.parseInt(spells); - } - total += (t * mult); - - // add Stat based bonus - final String bonusSpell = Globals.getBonusSpellMap().get( - String.valueOf(spellLevel)); - - if (Globals.checkRule(RuleConstants.BONUSSPELLKNOWN) - && (bonusSpell != null) - && !bonusSpell.equals("0|0")) { - final StringTokenizer s = new StringTokenizer( - bonusSpell, "|"); - final int base = Integer.parseInt(s.nextToken()); - final int range = Integer.parseInt(s.nextToken()); - - if (stat >= base) { - total += Math.max(0, (stat - base + range) / range); + if (spells.endsWith("+d")) { + psiSpecialty = true; + spells = spells.substring(0, spells.length() - 2); } + + int t; + if (castInfo.containsSpellFormula()) { + t = aPC.getVariableValue(spells, "").intValue(); + } else { + t = Integer.parseInt(spells); + } + total += (t * mult); + + // add Stat based bonus + final String bonusSpell = Globals.getBonusSpellMap().get( + String.valueOf(spellLevel)); + + if (Globals.checkRule(RuleConstants.BONUSSPELLKNOWN) + && (bonusSpell != null) + && !bonusSpell.equals("0|0")) { + final StringTokenizer s = new StringTokenizer( + bonusSpell, "|"); + final int base = Integer.parseInt(s.nextToken()); + final int range = Integer.parseInt(s.nextToken()); + + if (stat >= base) { + total += Math.max(0, (stat - base + range) / range); + } + } + + if (psiSpecialty) { + total += castInfo.getKnownSpellsFromSpecialty(); + } } - - if (psiSpecialty) { - total += castInfo.getKnownSpellsFromSpecialty(); - } } // if we have known spells (0==no known spells recorded) Modified: Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2007-01-01 20:13:11 UTC (rev 1851) +++ Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2007-01-01 22:37:25 UTC (rev 1852) @@ -397,6 +397,84 @@ assertEquals("Should be able to cast 11th level spells with feat", 11, charClass.getHighestLevelSpell(character)); } + + public void testGetKnownForLevel() + { + PCClass megaCasterClass = new PCClass(); + megaCasterClass.setName("MegaCaster"); + megaCasterClass.setAbbrev("MC"); + megaCasterClass.setSpellType("ARCANE"); + megaCasterClass.setSpellBaseStat("CHA"); + megaCasterClass.setSpellBookUsed(false); + megaCasterClass.setMemorizeSpells(false); + megaCasterClass + .setKnown(1, Arrays.asList("4,2,2,3,4,5+d,0".split(","))); + megaCasterClass.setCast(1, Arrays.asList("3,1,2,3,4,5,0,0".split(","))); + megaCasterClass.setKnown(2, Arrays.asList("4,2,2,3,4,5,6,7,8,9,10" + .split(","))); + megaCasterClass.setCast(2, Arrays.asList("3,1,2,3,4,5,6,7,8,9,10" + .split(","))); + Globals.getClassList().add(megaCasterClass); + + final PlayerCharacter character = getCharacter(); + + // Test retrieval for a non-spell casting class. + character.incrementClassLevel(1, nqClass); + PCClass charClass = character.getClassKeyed(nqClass.getKeyName()); + assertEquals("Known 0th level for non spell casting class", 0, + charClass.getKnownForLevel(0, character)); + + // Test retrieval for a spell casting class. + character.incrementClassLevel(1, megaCasterClass); + charClass = character.getClassKeyed(megaCasterClass.getKeyName()); + assertEquals("Known 0th level for character's class", 4, charClass + .getKnownForLevel(0, character)); + assertEquals("Known 1st level where stat is too low", 0, charClass + .getKnownForLevel(1, character)); + setPCStat(character, "CHA", 11); + character.calcActiveBonuses(); + assertEquals("Known 1st level where stat is high enough, but no bonus", + 2, charClass.getKnownForLevel(1, character)); + setPCStat(character, "CHA", 18); + character.calcActiveBonuses(); + assertEquals("Known 1st level where stat gives bonus but not active", + 2, charClass.getKnownForLevel(1, character)); + + RuleCheck bonusKnownRule = new RuleCheck(); + bonusKnownRule.setName(RuleConstants.BONUSSPELLKNOWN); + bonusKnownRule.setDefault("Y"); + GameMode gameMode = SettingsHandler.getGame(); + gameMode.addRule(bonusKnownRule); + Globals.getBonusSpellMap().put("1", "12|8"); + Globals.getBonusSpellMap().put("5", "20|8"); + assertEquals("Known 1st level where stat gives bonus and active", 3, + charClass.getKnownForLevel(1, character)); + + assertEquals("Known 2nd level for character's class", 2, charClass + .getKnownForLevel(2, character)); + assertEquals("Known 3rd level for character's class", 3, charClass + .getKnownForLevel(3, character)); + assertEquals("Known 4th level for character's class", 4, charClass + .getKnownForLevel(4, character)); + charClass.setHasSpellFormula(true); + charClass.setKnownSpellsFromSpecialty(1); + assertEquals("Known 5th level for character's class", 6, charClass + .getKnownForLevel(5, character)); + assertEquals("Known 6th level for character's class", 0, charClass + .getKnownForLevel(6, character)); + assertEquals("Known 7th level for character's class", 0, charClass + .getKnownForLevel(7, character)); + + // Add spell bonus for level above known max + Globals.getBonusSpellMap().put("7", "12|8"); + assertEquals("Known 7th level for character's class", 0, charClass + .getKnownForLevel(7, character)); + + assertEquals("Known 8th level for character's class", 0, charClass + .getKnownForLevel(8, character)); + + } + /** * Parse a class definition and return the populated PCClass object. * @@ -422,7 +500,7 @@ } return reconstClass; } - + /** * @see pcgen.AbstractCharacterTestCase#setUp() */ @@ -500,13 +578,13 @@ prClass = new PCClass(); prClass.setName("PreReqClass"); - prClass.setName("KEY_PreReqClass"); + prClass.setKeyName("KEY_PreReqClass"); prClass.setAbbrev("PCl"); prClass.addBonusList("0|MISC|SR|10|PREVARGTEQ:Foo,2"); prClass.addPreReq(prereq); qClass = new PCClass(); qClass.setName("QualClass"); - qClass.setName("KEY_QualClass"); + qClass.setKeyName("KEY_QualClass"); qClass.setAbbrev("QC1"); qClass.setQualifyString("KEY_PreReqClass|PreReqVar"); nqClass = new PCClass(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2007-01-02 06:42:04
|
Revision: 1855 http://svn.sourceforge.net/pcgen/?rev=1855&view=rev Author: jdempsey Date: 2007-01-01 22:42:02 -0800 (Mon, 01 Jan 2007) Log Message: ----------- Freq #1262317 - Ability Object: Add ability tags - Remove unused or duplicate methods. - Add some unit tests. - Correct off by one error in PlayerCharacter.hasAbility. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java Trunk/pcgen/code/src/test/pcgen/core/PObjectTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-01-02 03:20:55 UTC (rev 1854) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-01-02 06:42:02 UTC (rev 1855) @@ -3550,31 +3550,6 @@ return aList; } - /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in - * PCClass for PCClassLevel creation (in the factory) - */ - public List<Ability> getVirtualAbilityList(final AbilityCategory aCategory) - { - if ( aCategory == AbilityCategory.FEAT ) - { - return getVirtualFeatList(); - } - final List<Ability> ret = new ArrayList<Ability>(); - - if ( vAbilityMap != null ) - { - for ( final int lvl : vAbilityMap.getSecondaryKeySet(aCategory) ) - { - if ( lvl <= level ) - { - ret.addAll(vAbilityMap.get(aCategory, lvl)); - } - } - } - return ret; - } - /** * Here is where we do the real work of setting the vision information on * the PObject @@ -3842,53 +3817,7 @@ templates.add(LevelProperty.getLevelProperty(lvl, template)); } - //TODO: Replace these with equivalents for the PObject addAbility method. - /* - * DELETEMETHOD - or at least that's my dream. I would like to have this - * system be intelligent enough to distinguish items that are level - * dependent from those that are not and to then process those correctly and - * load them correctly into the PCClassLevels. Therefore, since this is - * really only overriding what PObject is doing to make a different case for - * items that are level dependent, this becomes an irrelevant method (the - * PObject methods should be used for non-level dependent, and PCClass - * should handle the rest as LevelPropertys to be loaded into the - * appropriate PCClassLevel) - */ - public void addVirtualAbility(final AbilityCategory aCategory, final Ability anAbility) - { - if ( aCategory == AbilityCategory.FEAT ) - { - addVirtualFeat(anAbility); - } - addVirtualAbility(aCategory, -9, anAbility); - } - /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel - * require this method - */ - public void addVirtualAbility(final AbilityCategory aCategory, - final int aLevel, - final Ability anAbility) - { - if ( aCategory == AbilityCategory.FEAT ) - { - addVirtualFeat(anAbility); - return; - } - if ( vAbilityMap == null ) - { - vAbilityMap = new DoubleKeyMap<AbilityCategory, Integer, List<Ability>>(); - } - List<Ability> abilities = vAbilityMap.get(aCategory, aLevel); - if ( abilities == null ) - { - abilities = new ArrayList<Ability>(); - } - abilities.add(anAbility); - } - - /** * Adds virtual feats to the vFeatList * @@ -3919,48 +3848,7 @@ super.addVirtualFeats(vList); } - - /* - * DELETEMETHOD - or at least that's my dream. I would like to have this - * system be intelligent enough to distinguish items that are level - * dependent from those that are not and to then process those correctly and - * load them correctly into the PCClassLevels. Therefore, since this is - * really only overriding what PObject is doing to make a different case for - * items that are level dependent, this becomes an irrelevant method (the - * PObject methods should be used for non-level dependent, and PCClass - * should handle the rest as LevelPropertys to be loaded into the - * appropriate PCClassLevel) - */ - public void addVirtualAbilities(final AbilityCategory aCategory, final List<Ability> aList) - { - if ( aCategory == AbilityCategory.FEAT ) - { - addVirtualFeats(aList); - return; - } - addVirtualAbilities(aCategory, -9, aList); - } - /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel - * require this method - */ - public void addVirtualAbilities(final AbilityCategory aCategory, - final int aLevel, - final List<Ability> aList) - { - if ( aCategory == AbilityCategory.FEAT ) - { - addVirtualFeats(aLevel, aList); - return; - } - if ( vAbilityMap == null ) - { - vAbilityMap = new DoubleKeyMap<AbilityCategory, Integer, List<Ability>>(); - } - vAbilityMap.put(aCategory, aLevel, aList); - } - /** * returns the value at which another attack is gained attackCycle of 4 * means a second attack is gained at a BAB of +5/+1 Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-02 03:20:55 UTC (rev 1854) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-02 06:42:02 UTC (rev 1855) @@ -16073,7 +16073,7 @@ { start = end = anAbilityType.ordinal(); } - for (int i = start; i < end; i++) + for (int i = start; i <= end; i++) { final Ability.Nature nature = Ability.Nature.values()[i]; boolean hasIt = false; @@ -17085,29 +17085,7 @@ return getVirtualFeatList(); } List<Ability> ret = theAbilities.get(aCategory, Ability.Nature.VIRTUAL); - if (ret == null) - { - ret = new ArrayList<Ability>(); - for (final PObject pobj : getPObjectList()) - { - if (pobj instanceof PCClass) - { - final List<Ability> abilities = ((PCClass) pobj) - .getVirtualAbilityList(aCategory); - for (final Ability ability : abilities) - { - if (PrereqHandler.passesAll(ability.getPreReqList(), - this, ability)) - { - ret.add(ability); - } - } - } - } - } - theAbilities.put(aCategory, Ability.Nature.VIRTUAL, ret); - return Collections.unmodifiableList(ret); } Modified: Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2007-01-02 03:20:55 UTC (rev 1854) +++ Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2007-01-02 06:42:02 UTC (rev 1855) @@ -36,12 +36,14 @@ import junit.framework.TestSuite; import pcgen.AbstractCharacterTestCase; import pcgen.PCGenTestCase; +import pcgen.core.Ability.Nature; import pcgen.core.pclevelinfo.PCLevelInfo; import pcgen.core.prereq.Prerequisite; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.CampaignSourceEntry; import pcgen.persistence.lst.FeatLoader; import pcgen.persistence.lst.PCClassLoader; +import pcgen.persistence.lst.RaceLoader; import plugin.pretokens.parser.PreVariableParser; /** @@ -510,6 +512,55 @@ } /** + * Test the definition and application of abilities. + * @throws PersistenceLayerException + */ + public void testAddAbility() throws PersistenceLayerException + { + // Create some abilities to be added + Ability ab1 = new Ability(); + ab1.setName("Ability1"); + ab1.setCategory("TestCat"); + Ability ab2 = new Ability(); + ab2.setName("Ability2"); + ab2.setCategory("TestCat"); + AbilityCategory cat = new AbilityCategory("TestCat"); + SettingsHandler.getGame().addAbilityCategory(cat); + Globals.addAbility(ab1); + Globals.addAbility(ab2); + + // Link them to a template + CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); + String classPCCText = + "CLASS:Cleric HD:8 TYPE:Base.PC ABB:Clr ABILITY:TestCat|AUTO|Ability1\n" + + "CLASS:Cleric STARTSKILLPTS:2 CSKILL:Concentration|TYPE.Craft\n" + + "2 ABILITY:TestCat|AUTO|Ability2"; + PCClass pcclass = parsePCClassText(classPCCText, cse); + List<String> keys = pcclass.getAbilityKeys(null, cat, Nature.AUTOMATIC); + assertEquals(2, keys.size()); + assertEquals(ab1.getKeyName(), keys.get(0)); + assertEquals(ab2.getKeyName(), keys.get(1)); + + // Add the class to the character + PlayerCharacter pc = getCharacter(); + pc.incrementClassLevel(1, pcclass, true); + // Need to do this to populate the ability list + pc.getAutomaticAbilityList(cat); + assertTrue("Character should have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + assertFalse("Character should not have ability2.", pc.hasAbility(cat, + Nature.AUTOMATIC, ab2)); + + pc.incrementClassLevel(1, pcclass, true); + pc.getAutomaticAbilityList(cat); + assertTrue("Character should have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + assertTrue("Character should have ability2.", pc.hasAbility(cat, + Nature.AUTOMATIC, ab2)); + } + + + /** * Parse a class definition and return the populated PCClass object. * * @param classPCCText The textual definition of the class. Modified: Trunk/pcgen/code/src/test/pcgen/core/PObjectTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PObjectTest.java 2007-01-02 03:20:55 UTC (rev 1854) +++ Trunk/pcgen/code/src/test/pcgen/core/PObjectTest.java 2007-01-02 06:42:02 UTC (rev 1855) @@ -23,10 +23,13 @@ */ package pcgen.core; +import java.util.List; + import junit.framework.Test; import junit.framework.TestSuite; import pcgen.AbstractCharacterTestCase; import pcgen.PCGenTestCase; +import pcgen.core.Ability.Nature; import pcgen.core.bonus.BonusObj; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.AbilityLoader; @@ -306,6 +309,50 @@ } /** + * Test the definition and application of abilities. + * @throws PersistenceLayerException + */ + public void testAddAbility() throws PersistenceLayerException + { + // Create some abilities to be added + Ability ab1 = new Ability(); + ab1.setName("Ability1"); + ab1.setCategory("TestCat"); + Ability ab2 = new Ability(); + ab2.setName("Ability2"); + ab2.setCategory("TestCat"); + AbilityCategory cat = new AbilityCategory("TestCat"); + SettingsHandler.getGame().addAbilityCategory(cat); + Globals.addAbility(ab1); + Globals.addAbility(ab2); + + // Link them to a template + Race race = new Race(); + CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); + RaceLoader loader = new RaceLoader(); + loader.setCurrentSource(cse); + loader + .parseLine( + race, + "Race1 ABILITY:TestCat|AUTO|Ability1 ABILITY:TestCat|AUTO|Ability2", + cse); + List<String> keys = race.getAbilityKeys(null, cat, Nature.AUTOMATIC); + assertEquals(2, keys.size()); + assertEquals(ab1.getKeyName(), keys.get(0)); + assertEquals(ab2.getKeyName(), keys.get(1)); + + // Add the template to the character + PlayerCharacter pc = getCharacter(); + pc.setRace(race); + // Need to do this to populate the ability list + pc.getAutomaticAbilityList(cat); + assertTrue("Character should have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + assertTrue("Character should have ability2.", pc.hasAbility(cat, + Nature.AUTOMATIC, ab2)); + } + + /** * @see pcgen.AbstractCharacterTestCase#setUp() */ @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2007-01-05 02:59:17
|
Revision: 1878 http://svn.sourceforge.net/pcgen/?rev=1878&view=rev Author: jdempsey Date: 2007-01-04 18:59:17 -0800 (Thu, 04 Jan 2007) Log Message: ----------- Freq #1262317 - Ability Object: Add ability tags - Include feat category abilities when building lists of feats. - Add some tests of the PCTemplate functionality. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Added Paths: ----------- Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/template/AbilityToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2007-01-05 01:19:55 UTC (rev 1877) +++ Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2007-01-05 02:59:17 UTC (rev 1878) @@ -344,10 +344,7 @@ if (anAbility == null) { - ShowMessageDelegate.showMessageDialog( - "Adding unknown feat: " + anAbilityKey, - Constants.s_APPNAME, - MessageType.INFORMATION); + Logging.errorPrint("Attempted to add unknown feat: " + anAbilityKey); } else { Modified: Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2007-01-05 01:19:55 UTC (rev 1877) +++ Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2007-01-05 02:59:17 UTC (rev 1878) @@ -59,7 +59,6 @@ // Static properties // ///////////////////////////////////////////////////////////////////// - private AbilityStore abilityCatStore = null; private List<String> featStrings = null; private List<String> hitDiceStrings = null; private List<String> templates = new ArrayList<String>(); @@ -550,12 +549,6 @@ txt.append("\tFAVOREDCLASS:").append(favoredClass); } - if (abilityCatStore != null && !abilityCatStore.isEmpty()) - { - txt.append("\tABILITY:"); - txt.append(abilityCatStore.getParsableStringRepresentation()); - } - if (getListSize(featStrings) > 0) { final StringBuffer buffer = new StringBuffer(); @@ -1385,13 +1378,6 @@ aTemp.hitDiceStrings = new ArrayList<String>(hitDiceStrings); } - if (abilityCatStore != null && !abilityCatStore.isEmpty()) - { - aTemp.abilityCatStore = new AbilityStore(); - aTemp.abilityCatStore.addAbilityInfo(abilityCatStore - .getParsableStringRepresentation(), "", "|", false, false); - } - if (getListSize(featStrings) != 0) { aTemp.featStrings = new ArrayList<String>(featStrings); @@ -1894,37 +1880,6 @@ } /** - * Add a | separated list of available abilities that this Template may - * grant. This is the function called by the Lst parser to make the - * Abilities available to this Template. - * - * See AbilityStore.addAbilityInfo for details of the string - * - * @param abilityString - */ - public void addAbilityString(final String abilityString) - { - - if (".CLEAR".equals(abilityString)) - { - abilityCatStore = null; - return; - } - - if (abilityString == null || "".equals(abilityString)) - { - return; - } - - if (abilityCatStore == null) - { - abilityCatStore = new AbilityStore(); - } - - abilityCatStore.addAbilityInfo(abilityString, "", "|", false, false); - } - - /** * Add a | separated list of available feats that this Template may grant. * This is the function called by the Lst parser to make the feats available * to this Template @@ -1936,11 +1891,15 @@ { if (".CLEAR".equals(abilityString)) { - abilityCatStore = null; + featStrings = null; return; } - addAbilityString("CATEGORY=FEAT|" + abilityString); + if (featStrings == null) + { + featStrings = new ArrayList<String>(); + } + featStrings.add(abilityString); } /** @@ -1973,22 +1932,6 @@ feats = new ArrayList<String>(); } - /* - * This is very, very temporary. - * - * This needs to be changed very soon so that this entire routine uses - * AbilityInfo objects instead of the names of abilities. - */ - if (abilityCatStore != null) - { - Iterator<Categorisable> it = abilityCatStore.getKeyIterator("ALL"); - - while (it.hasNext()) - { - feats.add(it.next().getKeyName()); - } - } - // arknight modified this back in 1.27 with the comment: Added support // for // Spycraft Game Mode we no longer support Spycraft (at this time), and Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-05 01:19:55 UTC (rev 1877) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-05 02:59:17 UTC (rev 1878) @@ -50,6 +50,7 @@ import java.util.TreeMap; import java.util.TreeSet; +import pcgen.core.Ability.Nature; import pcgen.core.bonus.Bonus; import pcgen.core.bonus.BonusObj; // import pcgen.core.bonus.TypedBonus; @@ -8034,7 +8035,7 @@ setAggregateAbilitiesStable(null, false); // setAutomaticFeatsStable(false); // setAggregateFeatsStable(false); - // AbilityUtilities.rebuildAutoAbilityList(this); + getAutomaticAbilityList(AbilityCategory.FEAT); // rebuildFeatAggreagateList(); calcActiveBonuses(); @@ -17519,6 +17520,20 @@ } } } + + // Grab any Abilities of category FEAT lurking in any PObjects + for (PObject pobj : getPObjectList()) + { + for (String key : pobj.getAbilityKeys(this, AbilityCategory.FEAT, Nature.AUTOMATIC)) + { + Logging.errorPrint("Got ability key " + key + " from " + pobj + "."); + Ability added = + AbilityUtilities + .addCloneOfGlobalAbilityToListWithChoices( + stableAutomaticFeatList, + Constants.FEAT_CATEGORY, key); + } + } return stableAutomaticFeatList; } Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/template/AbilityToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/template/AbilityToken.java 2007-01-05 01:19:55 UTC (rev 1877) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/template/AbilityToken.java 2007-01-05 02:59:17 UTC (rev 1878) @@ -1,32 +0,0 @@ -package plugin.lsttokens.template; - -import pcgen.core.PCTemplate; -import pcgen.persistence.lst.PCTemplateLstToken; - -/** - * Class deals with ABILITY Token - */ -public class AbilityToken implements PCTemplateLstToken -{ - - /** - * Get token name - * @return token name - */ - public String getTokenName() - { - return "ABILITY"; - } - - /** - * Parse ability token for template - * @param template - * @param value - * @return true - */ - public boolean parse(PCTemplate template, String value) - { - template.addAbilityString(value); - return true; - } -} Added: Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java (rev 0) +++ Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java 2007-01-05 02:59:17 UTC (rev 1878) @@ -0,0 +1,313 @@ +/* + * PCTemplateTest.java + * Copyright 2007 (C) James Dempsey <jde...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on Jan 3, 2007 + * + * $Id: PCTemplateTest.java 1855 2007-01-02 06:42:02Z jdempsey $ + * + */ +package pcgen.core; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +import junit.framework.Test; +import junit.framework.TestSuite; +import pcgen.AbstractCharacterTestCase; +import pcgen.PCGenTestCase; +import pcgen.core.Ability.Nature; +import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.PCTemplateLoader; + +/** + * <code>PCTemplateTest</code> tests the fucntion of the PCTemplate class. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class PCTemplateTest extends AbstractCharacterTestCase +{ + private PCClass testClass; + + /** + * Constructs a new <code>PCTemplateTest</code>. + * + * @see PCGenTestCase#PCGenTestCase() + */ + public PCTemplateTest() + { + // Do Nothing + } + + /** + * Constructs a new <code>PCTemplateTest</code> with the given <var>name</var>. + * + * @param name the test case name + * + * @see PCGenTestCase#PCGenTestCase(String) + */ + public PCTemplateTest(final String name) + { + super(name); + } + + /** + * Run the tests + * @param args + */ + public static void main(final String[] args) + { + junit.textui.TestRunner.run(PCTemplateTest.class); + } + + /** + * Returns all the test methods in this class. + * @return A <tt>TestSuite</tt> + */ + public static Test suite() + { + // quick method, adds all methods beginning with "test" + return new TestSuite(PCTemplateTest.class); + } + + /** + * Test the definition and application of abilities. + * @throws PersistenceLayerException + * @throws MalformedURLException + */ + public void testAddAbility() throws PersistenceLayerException, MalformedURLException + { + // Create some abilities to be added + Ability ab1 = new Ability(); + ab1.setName("Ability1"); + ab1.setCategory("TestCat"); + Ability ab2 = new Ability(); + ab2.setName("Ability2"); + ab2.setCategory("TestCat"); + AbilityCategory cat = new AbilityCategory("TestCat"); + SettingsHandler.getGame().addAbilityCategory(cat); + Globals.addAbility(ab1); + Globals.addAbility(ab2); + + // Link them to a template + PCTemplate template = new PCTemplate(); + //CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); + PCTemplateLoader + .parseLine( + template, + "Template1 ABILITY:TestCat|AUTO|Ability1 ABILITY:TestCat|AUTO|Ability2", + new URL("file://PCTemplateTest.java"), -9); + List<String> keys = template.getAbilityKeys(null, cat, Nature.AUTOMATIC); + assertEquals(2, keys.size()); + assertEquals(ab1.getKeyName(), keys.get(0)); + assertEquals(ab2.getKeyName(), keys.get(1)); + + // Add the template to the character + PlayerCharacter pc = getCharacter(); + pc.addTemplate(template); + // Need to do this to populate the ability list + pc.getAutomaticAbilityList(cat); + assertTrue("Character should have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + assertTrue("Character should have ability2.", pc.hasAbility(cat, + Nature.AUTOMATIC, ab2)); + } + + /** + * Test the definition and application of abilities of category FEAT. + * @throws PersistenceLayerException + * @throws MalformedURLException + */ + public void testAddFeatAbility() throws PersistenceLayerException, MalformedURLException + { + // Create some abilities to be added + Ability ab1 = new Ability(); + ab1.setName("Ability1"); + ab1.setCategory(AbilityCategory.FEAT.getKeyName()); + Ability ab2 = new Ability(); + ab2.setName("Ability2"); + ab2.setCategory(AbilityCategory.FEAT.getKeyName()); + Globals.addAbility(ab1); + Globals.addAbility(ab2); + + // Link them to a template + PCTemplate template = new PCTemplate(); + //CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); + PCTemplateLoader + .parseLine( + template, + "Template1 ABILITY:FEAT|AUTO|Ability1 ABILITY:FEAT|AUTO|Ability2", + new URL("file://PCTemplateTest.java"), -9); + List<String> keys = template.getAbilityKeys(null, AbilityCategory.FEAT, Nature.AUTOMATIC); + assertEquals(2, keys.size()); + assertEquals(ab1.getKeyName(), keys.get(0)); + assertEquals(ab2.getKeyName(), keys.get(1)); + + // Add the template to the character + PlayerCharacter pc = getCharacter(); + pc.addTemplate(template); + // Need to do this to populate the ability list + //pc.getAutomaticAbilityList(AbilityCategory.FEAT); + assertTrue("Character should have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + assertTrue("Character should have ability2.", pc.hasAbility(AbilityCategory.FEAT, + Nature.AUTOMATIC, ab2)); + } + + /** + * Test the definition and application of abilities. + * @throws PersistenceLayerException + * @throws MalformedURLException + */ + public void testAddLevelAbility() throws PersistenceLayerException, MalformedURLException + { + // Create some abilities to be added + Ability ab1 = new Ability(); + ab1.setName("Ability1"); + ab1.setCategory("TestCat"); + Ability ab2 = new Ability(); + ab2.setName("Ability2"); + ab2.setCategory("TestCat"); + AbilityCategory cat = new AbilityCategory("TestCat"); + SettingsHandler.getGame().addAbilityCategory(cat); + Globals.addAbility(ab1); + Globals.addAbility(ab2); + + // Link them to a template + PCTemplate template = new PCTemplate(); + //CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); + PCTemplateLoader + .parseLine( + template, + "Template1 LEVEL:2:ABILITY:TestCat|AUTO|Ability1 ABILITY:TestCat|AUTO|Ability2", + new URL("file://PCTemplateTest.java"), -9); + List<String> keys = template.getAbilityKeys(null, cat, Nature.AUTOMATIC); + assertEquals(2, keys.size()); + assertEquals(ab1.getKeyName(), keys.get(0)); + assertEquals(ab2.getKeyName(), keys.get(1)); + + // Add the template to the character + PlayerCharacter pc = getCharacter(); + pc.addTemplate(template); + // Need to do this to populate the ability list + pc.getAutomaticAbilityList(cat); + assertFalse("Character should not have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + assertTrue("Character should have ability2.", pc.hasAbility(cat, + Nature.AUTOMATIC, ab2)); + + // Level the character up, testing for when the level tag kicks in + pc.incrementClassLevel(1, testClass); + pc.calcActiveBonuses(); + pc.getAutomaticAbilityList(cat); + assertFalse("Character should not have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + + pc.incrementClassLevel(1, testClass); + pc.calcActiveBonuses(); + pc.getAutomaticAbilityList(cat); + assertTrue("Character should have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + + } + + /** + * Test the definition and application of abilities of category FEAT. + * @throws PersistenceLayerException + * @throws MalformedURLException + */ + public void testAddLevelFeatAbility() throws PersistenceLayerException, MalformedURLException + { + // Create some abilities to be added + Ability ab1 = new Ability(); + ab1.setName("Ability1"); + ab1.setCategory(AbilityCategory.FEAT.getKeyName()); + Ability ab2 = new Ability(); + ab2.setName("Ability2"); + ab2.setCategory(AbilityCategory.FEAT.getKeyName()); + Globals.addAbility(ab1); + Globals.addAbility(ab2); + + // Link them to a template + PCTemplate template = new PCTemplate(); + //CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); + PCTemplateLoader + .parseLine( + template, + "Template1 LEVEL:2:ABILITY:Feat|AUTO|Ability1 ABILITY:Feat|AUTO|Ability2", + new URL("file://PCTemplateTest.java"), -9); + List<String> keys = template.getAbilityKeys(null, AbilityCategory.FEAT, Nature.AUTOMATIC); + assertEquals(2, keys.size()); + assertEquals(ab1.getKeyName(), keys.get(0)); + assertEquals(ab2.getKeyName(), keys.get(1)); + + // Add the template to the character + PlayerCharacter pc = getCharacter(); + pc.addTemplate(template); + // Need to do this to populate the ability list + pc.getAutomaticAbilityList(AbilityCategory.FEAT); + assertFalse("Character should not have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + assertTrue("Character should have ability2.", pc.hasAbility(AbilityCategory.FEAT, + Nature.AUTOMATIC, ab2)); + + // Level the character up, testing for when the level tag kicks in + pc.incrementClassLevel(1, testClass); + pc.calcActiveBonuses(); + pc.getAutomaticAbilityList(AbilityCategory.FEAT); + assertFalse("Character should not have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + + pc.incrementClassLevel(1, testClass); + pc.calcActiveBonuses(); + pc.getAutomaticAbilityList(AbilityCategory.FEAT); + assertTrue("Character should have ability1.", pc.hasAbility(null, + Nature.AUTOMATIC, ab1)); + + } + + /** + * @see pcgen.AbstractCharacterTestCase#setUp() + */ + @Override + protected void setUp() throws Exception + { + super.setUp(); + + // Create the test class + testClass = new PCClass(); + testClass.setName("TestClass"); + testClass.setKeyName("KEY_TestClass"); + testClass.setAbbrev("TC"); + Globals.getClassList().add(testClass); + + } + + /** + * @see pcgen.AbstractCharacterTestCase#tearDown() + */ + @Override + protected void tearDown() throws Exception + { + super.tearDown(); + } +} Property changes on: Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java ___________________________________________________________________ Name: keywords + Author Revision Date Id Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2007-01-07 00:14:09
|
Revision: 1900 http://svn.sourceforge.net/pcgen/?rev=1900&view=rev Author: jdempsey Date: 2007-01-06 16:14:09 -0800 (Sat, 06 Jan 2007) Log Message: ----------- Correct issue with null PREREQ list being returned to foreach loop, flagged by guiElwood test. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PrereqObject.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/PObjectLoaderTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PrereqObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PrereqObject.java 2007-01-06 22:11:27 UTC (rev 1899) +++ Trunk/pcgen/code/src/java/pcgen/core/PrereqObject.java 2007-01-07 00:14:09 UTC (rev 1900) @@ -150,7 +150,7 @@ { return Collections.unmodifiableList(thePrereqs); } - return null; + return Collections.emptyList(); } /** Modified: Trunk/pcgen/code/src/test/pcgen/persistence/lst/PObjectLoaderTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/persistence/lst/PObjectLoaderTest.java 2007-01-06 22:11:27 UTC (rev 1899) +++ Trunk/pcgen/code/src/test/pcgen/persistence/lst/PObjectLoaderTest.java 2007-01-07 00:14:09 UTC (rev 1900) @@ -125,6 +125,7 @@ PObjectLoader.parseTag(object, "PRE:.CLEAR"); list = object.getPreReqList(); - assertNull(list); + assertNotNull("Prereq list should never be null as it is used in foreach loops directly.", list); + assertTrue("Prereqlist should be empty after the clear", list.isEmpty()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-01-07 21:52:04
|
Revision: 1917 http://svn.sourceforge.net/pcgen/?rev=1917&view=rev Author: thpr Date: 2007-01-07 13:52:04 -0800 (Sun, 07 Jan 2007) Log Message: ----------- [ 1620957 ] Change QUALIFY syntax Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/Race.java Trunk/pcgen/code/src/java/pcgen/core/prereq/PrereqHandler.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java Trunk/pcgen/code/src/java/plugin/lsttokens/QualifyToken.java Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/util/StringPClassUtil.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2007-01-07 20:56:00 UTC (rev 1916) +++ Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -632,11 +632,6 @@ txt.append("\tSIZE:").append(templateSize); } - if (!"alwaysValid".equals(getQualifyString())) - { - txt.append("\tQUALIFY:").append(getQualifyString()); - } - if (!Constants.s_NONE.equals(region)) { txt.append("\tREGION:"); Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2007-01-07 20:56:00 UTC (rev 1916) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -61,7 +61,9 @@ import pcgen.persistence.lst.output.prereq.PrerequisiteWriter; import pcgen.persistence.lst.prereq.PreParserFactory; import pcgen.util.DoubleKeyMap; +import pcgen.util.HashMapToList; import pcgen.util.Logging; +import pcgen.util.StringPClassUtil; import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.Load; @@ -154,6 +156,8 @@ private List<Description> theDescriptions = null; + private HashMapToList<Class, String> qualifyKeys = null; + /* ************ * Methods * ************/ @@ -1609,20 +1613,25 @@ * Set the qualify string * @param aString */ - public final void setQualifyString(final String aString) + public final void putQualifyString(Class cl, String key) { - stringChar.put(StringKey.QUALIFY, aString); + if (qualifyKeys == null) + { + qualifyKeys = new HashMapToList<Class, String>(); + } + qualifyKeys.addToListFor(cl, key); } - - /** - * Get the qualify string - * @return the qualify string - */ - public final String getQualifyString() + + public final boolean containsQualify() { - String characteristic = stringChar.get(StringKey.QUALIFY); - return characteristic == null ? Constants.EMPTY_STRING : characteristic; + return qualifyKeys != null && !qualifyKeys.isEmpty(); } + + //TODO This exposes internal structure - be careful. + public final HashMapToList<Class, String> getQualifyMap() + { + return qualifyKeys; + } /** * Set the SR @@ -2849,11 +2858,31 @@ } } - aString = getQualifyString(); - - if (!aString.equals("alwaysValid") && aString.length() > 0) + HashMapToList<Class, String> hmtl = getQualifyMap(); + if (hmtl != null) { - txt.append("\tQUALIFY:").append(aString); + for (Class cl : hmtl.getKeySet()) + { + String s = StringPClassUtil.getStringFor(cl); + List<String> l = hmtl.getListFor(cl); + if (l != null) { + boolean started = false; + for (String key : l) { + if (!"alwaysValid".equals(key)) { + if (started) { + txt.append(Constants.PIPE); + } else { + txt.append("\tQUALIFY:"); + if (s.length() > 0) { + txt.append(s + Constants.PIPE); + } + started = true; + } + txt.append(key); + } + } + } + } } if (!(this instanceof PCClass)) Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-07 20:56:00 UTC (rev 1916) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -82,6 +82,7 @@ import pcgen.persistence.lst.prereq.PreParserFactory; import pcgen.util.Delta; import pcgen.util.DoubleKeyMap; +import pcgen.util.HashMapToList; import pcgen.util.Logging; import pcgen.util.PropertyFactory; import pcgen.util.enumeration.AttackType; @@ -146,7 +147,7 @@ private final ArrayList<CompanionMod> companionModList = new ArrayList<CompanionMod>(); /** This character's list of followers */ private final List<Follower> followerList = new ArrayList<Follower>(); - private List<String> qualifyArrayList = new ArrayList<String>(); + private HashMapToList<Class, String> qualifyArrayMap = new HashMapToList<Class, String>(); private Follower followerMaster = null; // Who is the master now? // List of Equip Sets @@ -4064,9 +4065,14 @@ return iBonus; } - public boolean checkQualifyList(final String qualifierItem) + public boolean checkQualifyList(Class cl, final String qualifierItem) { - return getQualifyList().contains(qualifierItem); + /* + * The use of Object.class here is the "universalizer" to account + * for the 5.10.* format of Qualify - which is "allow anything all at once" + */ + return getQualifyMap().containsInList(cl, qualifierItem) + || getQualifyMap().containsInList(Object.class, qualifierItem); } /** @@ -10837,11 +10843,11 @@ /* * Build on-the-fly so removing templates won't mess up qualify list */ - List<String> getQualifyList() + HashMapToList<Class, String> getQualifyMap() { if (!qualifyListStable) { - qualifyArrayList = new ArrayList<String>(); + qualifyArrayMap = new HashMapToList<Class, String>(); // Try all possible POBjects for (PObject pObj : getPObjectList()) @@ -10851,23 +10857,16 @@ continue; } - final String qString = pObj.getQualifyString(); - final StringTokenizer aTok = new StringTokenizer(qString, "|"); - while (aTok.hasMoreTokens()) + if (pObj.containsQualify()) { - final String qualifier = aTok.nextToken(); - - if (!qualifyArrayList.contains(qualifier)) - { - qualifyArrayList.add(qualifier); - } + qualifyArrayMap.addAllLists(pObj.getQualifyMap()); } } setQualifyListStable(true); } - return qualifyArrayList; + return qualifyArrayMap; } void addVariable(final String variableString) @@ -14731,7 +14730,7 @@ aClone.classList.add((PCClass) (pcClass.clone())); } aClone.companionModList.addAll(companionModList); - aClone.qualifyArrayList.addAll(qualifyArrayList); + aClone.qualifyArrayMap.addAllLists(qualifyArrayMap); if (followerMaster != null) { aClone.followerMaster = (Follower) followerMaster.clone(); Modified: Trunk/pcgen/code/src/java/pcgen/core/Race.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Race.java 2007-01-07 20:56:00 UTC (rev 1916) +++ Trunk/pcgen/code/src/java/pcgen/core/Race.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -797,11 +797,6 @@ txt.append("\tLEVELADJUSTMENT:").append(levelAdjustment); } - if (!"alwaysValid".equals(getQualifyString())) - { - txt.append("\tQUALIFY:").append(getQualifyString()); - } - if (!Constants.s_NONE.equals(displayName)) { txt.append("\tRACENAME:").append(displayName); Modified: Trunk/pcgen/code/src/java/pcgen/core/prereq/PrereqHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/prereq/PrereqHandler.java 2007-01-07 20:56:00 UTC (rev 1916) +++ Trunk/pcgen/code/src/java/pcgen/core/prereq/PrereqHandler.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -74,7 +74,7 @@ if ((character != null) && (caller != null)) { // Check for QUALIFY: - if (character.checkQualifyList(caller.getKeyName())) + if (character.checkQualifyList(caller.getClass(), caller.getKeyName())) { return true; } @@ -205,7 +205,7 @@ boolean autoQualifies = false; int total = 0; - if ((caller != null) && character.checkQualifyList(caller.getKeyName()) && (!overrideQualify)) + if ((caller != null) && character.checkQualifyList(caller.getClass(), caller.getKeyName()) && (!overrideQualify)) { autoQualifies = true; } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java 2007-01-07 20:56:00 UTC (rev 1916) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -26,6 +26,12 @@ import pcgen.core.Globals; import pcgen.core.PCClass; import pcgen.core.PObject; +import pcgen.core.utils.CoreUtility; +import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.GlobalLstToken; +import pcgen.persistence.lst.TokenStore; +import pcgen.util.HashMapToList; +import pcgen.util.Logging; import pcgen.util.PropertyFactory; import pcgen.util.enumeration.Visibility; @@ -106,7 +112,12 @@ obj.setLevelExchange(exchangeLevel.getText().trim()); // obj.setSkillPoints(Integer.parseInt(startSkillPoints.getText().trim())); obj.setSkillPointFormula(startSkillPoints.getText().trim()); - obj.setQualifyString(qualify.getText().trim()); + GlobalLstToken token = (GlobalLstToken) TokenStore.inst().getTokenMap(GlobalLstToken.class).get("QUALIFY"); + try { + token.parse(obj, qualify.getText(), -9); + } catch (PersistenceLayerException e) { + Logging.errorPrint("Invalid QUALIFY: " + qualify.getText(), e); + } obj.setExClass(exClass.getText().trim()); obj.setHasSubClass(hasSubClass.getSelectedObjects() != null); obj.setModToSkills(modToSkills.getSelectedObjects() != null); @@ -176,7 +187,15 @@ exchangeLevel.setText(obj.getLevelExchange()); // startSkillPoints.setText(String.valueOf(obj.getSkillPoints())); startSkillPoints.setText(obj.getSkillPointFormula()); - qualify.setText(obj.getQualifyString()); + HashMapToList<Class, String> hmtl = obj.getQualifyMap(); + if (hmtl != null) + { + List ol = hmtl.getListFor(Object.class); + if (ol != null && !ol.isEmpty()) + { + qualify.setText(CoreUtility.join(ol, "|")); + } + } exClass.setText(obj.getExClass()); hasSubClass.setSelected(obj.hasSubClass()); modToSkills.setSelected(obj.getModToSkills()); @@ -209,7 +228,7 @@ txtDisplayName = new JTextField(); abbreviation = new JTextField(); - qualify = new JTextField(); +// qualify = new JTextField(); exchangeLevel = new JTextField(); startSkillPoints = new JTextField(); exClass = new JTextField(); @@ -281,12 +300,12 @@ gridBagConstraints = buildConstraints(gridBagConstraints, 5, 2, true); add(startSkillPoints, gridBagConstraints); - tempLabel = new JLabel("Qualify:"); - gridBagConstraints = buildConstraints(gridBagConstraints, 0, 3, true); - add(tempLabel, gridBagConstraints); +// tempLabel = new JLabel("Qualify:"); +// gridBagConstraints = buildConstraints(gridBagConstraints, 0, 3, true); +// add(tempLabel, gridBagConstraints); - gridBagConstraints = buildConstraints(gridBagConstraints, 1, 3, true); - add(qualify, gridBagConstraints); +// gridBagConstraints = buildConstraints(gridBagConstraints, 1, 3, true); +// add(qualify, gridBagConstraints); tempLabel = new JLabel("Multi-Class Pre-Reqs:"); gridBagConstraints = buildConstraints(gridBagConstraints, 2, 3, true); Added: Trunk/pcgen/code/src/java/pcgen/util/StringPClassUtil.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/StringPClassUtil.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/StringPClassUtil.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -0,0 +1,65 @@ +package pcgen.util; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import pcgen.core.Ability; +import pcgen.core.Deity; +import pcgen.core.Domain; +import pcgen.core.Equipment; +import pcgen.core.EquipmentModifier; +import pcgen.core.PCClass; +import pcgen.core.PCTemplate; +import pcgen.core.Race; +import pcgen.core.Skill; +import pcgen.core.WeaponProf; +import pcgen.core.spell.Spell; + +public class StringPClassUtil { + + private static Map<String, Class> classMap; + private static Map<Class, String> stringMap; + + static { + classMap = new HashMap<String, Class>(); + stringMap = new HashMap<Class, String>(); + + classMap.put("DEITY", Deity.class); + classMap.put("DOMAIN", Domain.class); + classMap.put("EQUIPMENT", Equipment.class); + classMap.put("EQMOD", EquipmentModifier.class); + classMap.put("FEAT", Ability.class); + classMap.put("PCCLASS", PCClass.class); + classMap.put("RACE", Race.class); + classMap.put("SPELL", Spell.class); + classMap.put("SKILL", Skill.class); + classMap.put("TEMPLATE", PCTemplate.class); + classMap.put("WEAPONPROF", WeaponProf.class); + + stringMap.put(Deity.class, "DEITY"); + stringMap.put(Domain.class, "DOMAIN"); + stringMap.put(Equipment.class, "EQUIPMENT"); + stringMap.put(EquipmentModifier.class, "EQMOD"); + stringMap.put(Ability.class, "FEAT"); + stringMap.put(PCClass.class, "PCCLASS"); + stringMap.put(Race.class, "RACE"); + stringMap.put(Spell.class, "SPELL"); + stringMap.put(Skill.class, "SKILL"); + stringMap.put(PCTemplate.class, "TEMPLATE"); + stringMap.put(WeaponProf.class, "WEAPONPROF"); + } + + public static Class getClassFor(String key) { + return classMap.get(key); + } + + public static Set<String> getValidStrings() { + return classMap.keySet(); + } + + public static String getStringFor(Class cl) { + return stringMap.get(cl); + } + +} Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/QualifyToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/QualifyToken.java 2007-01-07 20:56:00 UTC (rev 1916) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/QualifyToken.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -2,8 +2,10 @@ import java.util.Arrays; import java.util.List; +import java.util.StringTokenizer; import pcgen.core.Ability; +import pcgen.core.Constants; import pcgen.core.Deity; import pcgen.core.Domain; import pcgen.core.Equipment; @@ -16,6 +18,7 @@ import pcgen.core.spell.Spell; import pcgen.persistence.lst.GlobalLstToken; import pcgen.util.Logging; +import pcgen.util.StringPClassUtil; /** * Deals with the QUALIFY token for Abilities @@ -34,7 +37,27 @@ Logging.errorPrint("Cannot use QUALIFY on a " + obj.getClass()); return false; } - obj.setQualifyString(value); + StringTokenizer st = new StringTokenizer(value, Constants.PIPE); + String key = st.nextToken(); + Class c = StringPClassUtil.getClassFor(key); + if (c == null) { + c = Object.class; + Logging.errorPrint(getTokenName() + " expecting a POBJECT Type, found: " + key); + Logging.errorPrint(" 5.12 Format is: QualifyType|Key[|Key] value was: " + value); + Logging.errorPrint(" Valid QualifyTypes are: " + StringPClassUtil.getValidStrings()); + Logging.errorPrint(" QUALIFY without a Type will fail after PCGen 5.12"); + } else { + key = st.nextToken(); + } + + while (true) { + obj.putQualifyString(c, key); + if (!st.hasMoreTokens()) { + break; + } + key = st.nextToken(); + } + return true; } Modified: Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2007-01-07 20:56:00 UTC (rev 1916) +++ Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2007-01-07 21:52:04 UTC (rev 1917) @@ -223,7 +223,8 @@ aQClass.setName("QualClass"); aQClass.setKeyName("KEY_QualClass"); aQClass.setAbbrev("QC1"); - aQClass.setQualifyString("KEY_PreReqClass|PreReqVar"); + aQClass.putQualifyString(PCClass.class, "KEY_PreReqClass"); + //aQClass.setQualifyString("KEY_PreReqClass|PreReqVar"); final PCClass aNqClass = new PCClass(); aNqClass.setName("NonQualClass"); @@ -271,6 +272,80 @@ /** * Test the interaction of prerequisites on PCClasses and bonuses and the + * Bypass Class Prereqs flag. + * @throws Exception + */ + public void testBypassClassPrereqsDeprecated() throws Exception + { + // Setup class with prereqs and var based abilities with prereqs. + final PreVariableParser parser = new PreVariableParser(); + final Prerequisite aPrereq = + parser.parse("VARGTEQ", "Foo,1", false, false); + final RuleCheck aClassPreRule = new RuleCheck(); + aClassPreRule.setName("CLASSPRE"); + aClassPreRule.setDefault("N"); + final GameMode gameMode = SettingsHandler.getGame(); + gameMode.addRule(aClassPreRule); + + final PCClass aPrClass = new PCClass(); + aPrClass.setName("PreReqClass"); + aPrClass.setKeyName("KEY_PreReqClass"); + aPrClass.setAbbrev("PCl"); + aPrClass.addBonusList("0|MISC|SR|10|PREVARGTEQ:Foo,2"); + aPrClass.addPreReq(aPrereq); + final PCClass aQClass = new PCClass(); + aQClass.setName("QualClass"); + aQClass.setKeyName("KEY_QualClass"); + aQClass.setAbbrev("QC1"); + aQClass.putQualifyString(Object.class, "KEY_PreReqClass"); + aQClass.putQualifyString(Object.class, "PreReqVar"); + + final PCClass aNqClass = new PCClass(); + aNqClass.setName("NonQualClass"); + aNqClass.setKeyName("KEY_NonQualClass"); + aNqClass.setAbbrev("NQC"); + aNqClass.addVariable(0, "Foo", "1"); + aNqClass.addVariable(2, "Foo", "2"); + + // Setup character without prereqs + final PlayerCharacter character = getCharacter(); + + // Test no prereqs and no bypass fails class and var + assertFalse("PC with no prereqs should fail class qual test.", aPrClass + .isQualified(character)); + assertEquals("PC with no prereqs should fail var qual test.", 0.0, + aPrClass.getBonusTo("MISC", "SR", 1, character), 0.1); + + // Test no prereqs and bypass passes class and fails var + aClassPreRule.setDefault("Y"); + assertTrue( + "PC with no prereqs should pass class qual test when bypassing prereqs is on.", + aPrClass.isQualified(character)); + assertEquals( + "PC with no prereqs should fail var qual test when bypass prereqs is on.", + 0.0, aPrClass.getBonusTo("MISC", "SR", 1, character), 0.1); + + // Test prereqs and bypass pass class and var + character.incrementClassLevel(1, aNqClass); + assertTrue("PC with prereqs and bypass should pass class qual test.", + aPrClass.isQualified(character)); + character.incrementClassLevel(1, aNqClass); + assertEquals("PC with prereqs and bypass should pass var qual test.", + 10.0, aPrClass.getBonusTo("MISC", "SR", 1, character), 0.1); + + // Test prereqs and no bypass passes class and var + aClassPreRule.setDefault("N"); + assertTrue( + "PC with prereqs and no bypass should pass class qual test.", + aPrClass.isQualified(character)); + assertEquals( + "PC with prereqs and no bypass should pass var qual test.", 10.0, + aPrClass.getBonusTo("MISC", "SR", 1, character), 0.1); + + } + + /** + * Test the interaction of prerequisites on PCClasses and bonuses and the * Qualifies functionality associated with a class. * @throws Exception */ @@ -674,7 +749,8 @@ qClass.setName("QualClass"); qClass.setKeyName("KEY_QualClass"); qClass.setAbbrev("QC1"); - qClass.setQualifyString("KEY_PreReqClass|PreReqVar"); + qClass.putQualifyString(PCClass.class, "KEY_PreReqClass"); + //qClass.setQualifyString("KEY_PreReqClass|PreReqVar"); nqClass = new PCClass(); nqClass.setName("NonQualClass"); nqClass.setKeyName("KEY_NonQualClass"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-01-12 03:19:36
|
Revision: 1934 http://svn.sourceforge.net/pcgen/?rev=1934&view=rev Author: thpr Date: 2007-01-11 19:19:36 -0800 (Thu, 11 Jan 2007) Log Message: ----------- Partial Implementation of [ 1632897 ] Proper Loader Use Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityClassSkills.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentModifierLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java Trunk/pcgen/code/src/test/pcgen/util/TestHelper.java Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityClassSkills.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityClassSkills.java 2007-01-11 17:30:07 UTC (rev 1933) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityClassSkills.java 2007-01-12 03:19:36 UTC (rev 1934) @@ -53,6 +53,11 @@ LevelAbilityClassSkills(final PObject aOwner, final int aLevel, final String aList) { + /* + * TODO Why does this allow something other than PCClass as an owner, when + * it will create an artificial PCClass later on if the owner is not a PCClass? + * That seems like it will only introduce bugs later on in the system... + */ super(aOwner, aLevel, aList); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentLoader.java 2007-01-11 17:30:07 UTC (rev 1933) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentLoader.java 2007-01-12 03:19:36 UTC (rev 1934) @@ -25,59 +25,57 @@ */ package pcgen.persistence.lst; -import java.net.URL; import java.util.Map; import java.util.StringTokenizer; import pcgen.core.Equipment; +import pcgen.core.EquipmentList; +import pcgen.core.PObject; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.SystemLoader; import pcgen.util.Logging; /** + * * @author David Rice <dav...@jc...> * @version $Revision$ */ -public final class EquipmentLoader -{ - /** - * Creates a new instance of EquipmentLoader - */ - private EquipmentLoader() - { - // Empty Constructor - } +public final class EquipmentLoader extends LstObjectFileLoader<Equipment> { - /** - * Parse the line - * @param equipment - * @param inputLine - * @param sourceURL - * @param lineNum - * @throws PersistenceLayerException - */ - public static void parseLine(Equipment equipment, String inputLine, - URL sourceURL, int lineNum) throws PersistenceLayerException - { - if (equipment == null) - { - return; + @Override + protected void addGlobalObject(PObject pObj) { + //getEquipmentKeyedNoCustom?? + final Equipment aTemplate = EquipmentList + .getEquipmentNamed(pObj.getKeyName()); + if (aTemplate == null) { + EquipmentList.addEquipment((Equipment) pObj); } - final StringTokenizer colToken = - new StringTokenizer(inputLine, SystemLoader.TAB_DELIM); - int col = 0; + } - if (!equipment.isNewItem()) - { - col = 1; // .MOD skips required fields - colToken.nextToken(); // skip name + @Override + protected Equipment getObjectKeyed(String aKey) { + return EquipmentList.getEquipmentNamed(aKey); + } + + @Override + public Equipment parseLine(Equipment equipment, String inputLine, + CampaignSourceEntry source) throws PersistenceLayerException { + if (equipment == null) { + equipment = new Equipment(); } + + final StringTokenizer colToken = new StringTokenizer(inputLine, + SystemLoader.TAB_DELIM); + + String name = colToken.nextToken(); + equipment.setName(name); + equipment.setSourceCampaign(source.getCampaign()); + equipment.setSourceFile(source.getFile()); - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(EquipmentLstToken.class); - while (colToken.hasMoreTokens()) - { + Map<String, LstToken> tokenMap = TokenStore.inst().getTokenMap( + EquipmentLstToken.class); + while (colToken.hasMoreTokens()) { final String colString = colToken.nextToken().trim(); colString.length(); @@ -92,110 +90,48 @@ // TODO Handle Exception } EquipmentLstToken token = (EquipmentLstToken) tokenMap.get(key); - if (col == 0) + if (token != null) { - equipment.setName(colString); - } - else if (token != null) - { final String value = colString.substring(idxColon + 1); LstUtils.deprecationCheck(token, equipment, value); if (!token.parse(equipment, value)) { - Logging.errorPrint("Error parsing ability " - + equipment.getName() + ':' + sourceURL.getFile() + ':' + Logging.errorPrint("Error parsing Equipment " + + equipment.getName() + ':' + source.getFile() + ':' + colString + "\""); } } else if (colString.startsWith("Cost:")) { Logging.errorPrint("Cost deprecated, use COST " - + equipment.getName() + ':' + sourceURL.getFile() + ':' + + equipment.getName() + ':' + source.getFile() + ':' + colString + "\""); token = (EquipmentLstToken) tokenMap.get("COST"); final String value = colString.substring(idxColon + 1); if (!token.parse(equipment, value)) { - Logging.errorPrint("Error parsing ability " - + equipment.getName() + ':' + sourceURL.getFile() + ':' + Logging.errorPrint("Error parsing Equipment " + + equipment.getName() + ':' + source.getFile() + ':' + colString + "\""); } } - //else if ((aLen > 9) && colString.startsWith("DEFBONUS:")) - //{ - // equipment.setDefBonus(colString.substring(7)); - //} - /*else if ((aLen > 13) && colString.startsWith("TREASURELIST:")) - { - if (SettingsHandler.isGMGen()) - { - String treasureList = colString.substring(13); - StringTokenizer treasureTok = new StringTokenizer(treasureList, "|"); - - while (treasureTok.hasMoreTokens()) - { - StringTokenizer cmdTok = new StringTokenizer(treasureTok.nextToken(), "="); - String lists = cmdTok.nextToken(); - int weight = Integer.parseInt(cmdTok.nextToken().trim()); - StringTokenizer listTok = new StringTokenizer(lists, ","); - - while (listTok.hasMoreTokens()) - { - equipment.addTreasureList(listTok.nextToken(), weight); - } - } - } - }*/ - /*else if ((aLen > 6) && colString.startsWith("TECHLEVEL:")) - { - equipment.setTechLevel(colString.substring(10)); - }*/ else if (PObjectLoader.parseTag(equipment, colString)) { continue; } else { - Logging.errorPrint("Illegal equipment info " - + sourceURL.toString() + ":" + Integer.toString(lineNum) - + " \"" + colString + "\""); + Logging.errorPrint("Illegal Equipment info " + + source.toString() + ":" + " \"" + colString + "\""); } - col++; } + + completeObject(equipment); + return null; + } - // final String bonusType = equipment.getBonusType(); - // - // if (equipment.isArmor()) - // { - // if (bonusType == null) - // { - // equipment.setBonusType("Armor"); - // - // return; - // } - // - // if (bonusType.lastIndexOf("Armor") > -1) - // { - // return; - // } - // - // equipment.setBonusType(bonusType + "Armor"); - // } - // else if (equipment.isShield()) - // { - // if (bonusType == null) - // { - // equipment.setBonusType("Shield"); - // - // return; - // } - // - // if (bonusType.lastIndexOf("Shield") > -1) - // { - // return; - // } - // - // equipment.setBonusType(bonusType + "Shield"); - // } + @Override + protected void performForget(PObject objToForget) { + EquipmentList.remove((Equipment) objToForget); } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentModifierLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentModifierLoader.java 2007-01-11 17:30:07 UTC (rev 1933) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentModifierLoader.java 2007-01-12 03:19:36 UTC (rev 1934) @@ -22,104 +22,130 @@ */ package pcgen.persistence.lst; -import java.net.URL; import java.util.Map; import java.util.StringTokenizer; +import pcgen.core.Campaign; +import pcgen.core.Constants; +import pcgen.core.EquipmentList; import pcgen.core.EquipmentModifier; +import pcgen.core.PObject; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.SystemLoader; import pcgen.util.Logging; /** - * - * @author David Rice <dav...@jc...> + * + * @author David Rice <dav...@jc...> * @version $Revision$ */ -public final class EquipmentModifierLoader -{ - /** Creates a new instance of EquipmentModifierLoader */ - private EquipmentModifierLoader() - { - // Empty Constructor +public final class EquipmentModifierLoader extends + LstObjectFileLoader<EquipmentModifier> { + @Override + protected void addGlobalObject(PObject pObj) { + // getEquipmentKeyedNoCustom?? + final EquipmentModifier aTemplate = EquipmentList.getModifierKeyed(pObj + .getKeyName()); + if (aTemplate == null) { + EquipmentList.getModifierList().add((EquipmentModifier) pObj); + } + } - /** - * Parse the line - * @param obj - * @param inputLine - * @param sourceURL - * @param lineNum - * @throws PersistenceLayerException - */ - public static void parseLine(EquipmentModifier obj, String inputLine, - URL sourceURL, int lineNum) throws PersistenceLayerException - { - if (obj == null) - { - return; - } + @Override + protected EquipmentModifier getObjectKeyed(String aKey) { + return EquipmentList.getModifierKeyed(aKey); + } - final StringTokenizer colToken = - new StringTokenizer(inputLine, SystemLoader.TAB_DELIM); - int col = -1; - - if (!obj.isNewItem()) - { - col = 1; // just force it past required fields since .MOD doesn't specify them - colToken.nextToken(); // skip name + @Override + public EquipmentModifier parseLine(EquipmentModifier eqMod, + String inputLine, CampaignSourceEntry source) + throws PersistenceLayerException { + if (eqMod == null) { + eqMod = new EquipmentModifier(); } - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(EquipmentModifierLstToken.class); - while (colToken.hasMoreTokens()) - { - final String colString = colToken.nextToken().trim(); + final StringTokenizer colToken = new StringTokenizer(inputLine, + SystemLoader.TAB_DELIM); - final int idxColon = colString.indexOf(':'); - String key = ""; - try - { - key = colString.substring(0, idxColon); - } - catch (Exception e) - { - // TODO Handle Exception - } - EquipmentModifierLstToken token = - (EquipmentModifierLstToken) tokenMap.get(key); + String name = colToken.nextToken(); + eqMod.setName(name.replace('|', ' ')); + eqMod.setSourceCampaign(source.getCampaign()); + eqMod.setSourceFile(source.getFile()); - col++; + Map<String, LstToken> tokenMap = TokenStore.inst().getTokenMap( + EquipmentModifierLstToken.class); + while (colToken.hasMoreTokens()) { + while (colToken.hasMoreTokens()) { + final String colString = colToken.nextToken().trim(); - if (col == 0) - { - obj.setName(colString.replace('|', ' ')); - } - else if (token != null) - { - final String value = colString.substring(idxColon + 1); - LstUtils.deprecationCheck(token, obj, value); - if (!token.parse(obj, value)) - { - Logging.errorPrint("Error parsing ability " - + obj.getDisplayName() + ':' + sourceURL.getFile() - + ':' + colString + "\""); + final int idxColon = colString.indexOf(':'); + String key = ""; + try { + key = colString.substring(0, idxColon); + } catch (Exception e) { + // TODO Handle Exception } + + EquipmentModifierLstToken token = (EquipmentModifierLstToken) tokenMap + .get(key); + if (token != null) { + final String value = colString.substring(idxColon + 1); + LstUtils.deprecationCheck(token, eqMod, value); + if (!token.parse(eqMod, value)) { + Logging.errorPrint("Error parsing ability " + + eqMod.getDisplayName() + ':' + + source.getFile() + ':' + colString + "\""); + } + } else if (PObjectLoader.parseTag(eqMod, colString)) { + continue; + } else { + Logging.errorPrint("Illegal equipment modifier info " + + source + ":" + " \"" + colString + "\""); + } } - else if (PObjectLoader.parseTag(obj, colString)) - { - continue; - } - //else if (colString.startsWith(Constants.s_TAG_TYPE)) - //{ - // obj.setType(colString.substring(Constants.s_TAG_TYPE.length())); - //} - else - { - Logging.errorPrint("Illegal equipment modifier info " - + String.valueOf(sourceURL) + ":" - + Integer.toString(lineNum) + " \"" + colString + "\""); - } } + + completeObject(eqMod); + return null; } + + @Override + protected void performForget(PObject objToForget) { + throw new java.lang.UnsupportedOperationException( + "Cannot FORGET an EquipmentModifier"); + } + + /** + * This method adds the default available equipment modififiers to the + * Globals. + * @throws PersistenceLayerException + * + * @throws PersistenceLayerException + * if some bizarre error occurs, likely due to a change in + * EquipmentModifierLoader + */ + public void addDefaultEquipmentMods() throws PersistenceLayerException { + CampaignSourceEntry source = new CampaignSourceEntry(new Campaign(), + getClass().getName() + ".java"); + setCurrentSource(source); + String aLine; + EquipmentModifier anObj = new EquipmentModifier(); + aLine = "Add Type\tKEY:ADDTYPE\tTYPE:ALL\tCOST:0\tNAMEOPT:NONAME\tSOURCELONG:PCGen Internal\tCHOOSE:COUNT=ALL|desired TYPE(s)|TYPE=EQTYPES"; + parseLine(anObj, aLine, source); + + // + // Add internal equipment modifier for adding weapon/armor types to + // equipment + // + anObj = new EquipmentModifier(); + aLine = Constants.s_INTERNAL_EQMOD_WEAPON + + "\tTYPE:Weapon\tVISIBLE:No\tCHOOSE:DUMMY\tNAMEOPT:NONAME"; + parseLine(anObj, aLine, source); + + anObj = new EquipmentModifier(); + aLine = Constants.s_INTERNAL_EQMOD_ARMOR + + "\tTYPE:Armor\tVISIBLE:No\tCHOOSE:DUMMY\tNAMEOPT:NONAME"; + parseLine(anObj, aLine, source); + } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2007-01-11 17:30:07 UTC (rev 1933) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2007-01-12 03:19:36 UTC (rev 1934) @@ -49,7 +49,6 @@ import java.util.StringTokenizer; import java.util.TreeSet; -import pcgen.core.BioSet; import pcgen.core.Campaign; import pcgen.core.Constants; import pcgen.core.CustomData; @@ -57,13 +56,11 @@ import pcgen.core.Domain; import pcgen.core.Equipment; import pcgen.core.EquipmentList; -import pcgen.core.EquipmentModifier; import pcgen.core.GameMode; import pcgen.core.Globals; import pcgen.core.Kit; import pcgen.core.LevelInfo; import pcgen.core.PCClass; -import pcgen.core.PCTemplate; import pcgen.core.PObject; import pcgen.core.PlayerCharacter; import pcgen.core.SettingsHandler; @@ -73,8 +70,6 @@ import pcgen.core.character.CompanionMod; import pcgen.core.spell.Spell; import pcgen.core.utils.CoreUtility; -import pcgen.core.utils.MessageType; -import pcgen.core.utils.ShowMessageDelegate; import pcgen.gui.pcGenGUI; import pcgen.io.PCGFile; import pcgen.persistence.PersistenceLayerException; @@ -101,10 +96,9 @@ */ private static final int[] loadOrder = { - LstConstants.EQMODIFIER_TYPE // loaded before the equipment so any modifiers will be found - , LstConstants.EQUIPMENT_TYPE, LstConstants.LOAD_TYPE, + LstConstants.LOAD_TYPE, LstConstants.CLASSSKILL_TYPE, LstConstants.CLASSSPELL_TYPE, - LstConstants.REQSKILL_TYPE, LstConstants.TEMPLATE_TYPE, + LstConstants.REQSKILL_TYPE, LstConstants.COMPANIONMOD_TYPE, LstConstants.KIT_TYPE}; private static final int MODE_EXCLUDE = -1; private static final int MODE_DEFAULT = 0; @@ -249,6 +243,9 @@ private final Map<String, String> loadedFiles = new HashMap<String, String>(); private PCClassLoader classLoader = new PCClassLoader(); + private PCTemplateLoader templateLoader = new PCTemplateLoader(); + private EquipmentLoader equipmentLoader = new EquipmentLoader(); + private EquipmentModifierLoader eqModLoader = new EquipmentModifierLoader(); private PaperInfoLoader paperLoader = new PaperInfoLoader(); private PointBuyLoader pointBuyLoader = new PointBuyLoader(); private SponsorLoader sponsorLoader = new SponsorLoader(); @@ -285,6 +282,8 @@ campaignLoader.addObserver(this); deityLoader.addObserver(this); domainLoader.addObserver(this); + equipmentLoader.addObserver(this); + eqModLoader.addObserver(this); eqSlotLoader.addObserver(this); abilityLoader.addObserver(this); featLoader.addObserver(this); @@ -299,6 +298,7 @@ skillLoader.addObserver(this); spellLoader.addObserver(this); statCheckLoader.addObserver(this); + templateLoader.addObserver(this); traitLoader.addObserver(this); wProfLoader.addObserver(this); } @@ -476,7 +476,13 @@ deityLoader.loadLstFiles(deityFileList); classLoader.loadLstFiles(classFileList); + + templateLoader.loadLstFiles(templateFileList); + + eqModLoader.loadLstFiles(equipmodFileList); + equipmentLoader.loadLstFiles(equipmentFileList); + // loaded before equipment to cover costs // TODO: Convert remaining items to new persistence framework! @@ -510,8 +516,8 @@ checkRequiredDeities(); // Add default EQ mods - addDefaultEquipmentMods(); - + eqModLoader.addDefaultEquipmentMods(); + // Load custom items loadCustomItems(); @@ -652,24 +658,6 @@ break; - case LstConstants.EQUIPMENT_TYPE: - anObj = EquipmentList.getEquipmentNamed(aString); - EquipmentLoader.parseLine((Equipment) anObj, - modLines.get(i).toString(), null, 0); - modLines.remove(i); - modFileType.remove(i); - - break; - - case LstConstants.TEMPLATE_TYPE: - anObj = Globals.getTemplateKeyed(aString); - PCTemplateLoader.parseLine((PCTemplate) anObj, - modLines.get(i).toString(), null, 0); - modLines.remove(i); - modFileType.remove(i); - - break; - default: logError("In LstSystemLoader.loadMod the fileType " + modFileType.get(i).toString() @@ -722,18 +710,6 @@ break; - case LstConstants.EQUIPMENT_TYPE: - anObj = EquipmentList.getEquipmentNamed(aString); - EquipmentList.remove((Equipment) anObj); - - break; - - case LstConstants.TEMPLATE_TYPE: - anObj = Globals.getTemplateKeyed(aString); - Globals.getTemplateList().remove(anObj); - - break; - default: logError("In LstSystemLoader.loadMod the fileType " + modFileType.get(i).toString() @@ -811,11 +787,6 @@ break; - case LstConstants.EQUIPMENT_TYPE: - lineList = equipmentFileList; - - break; - case LstConstants.LOAD_TYPE: break; @@ -833,16 +804,6 @@ lineList = new ArrayList<CampaignSourceEntry>(); break; - case LstConstants.TEMPLATE_TYPE: - lineList = templateFileList; - - break; - - case LstConstants.EQMODIFIER_TYPE: - lineList = equipmodFileList; - - break; - case LstConstants.KIT_TYPE: lineList = kitFileList; @@ -1013,39 +974,6 @@ } /** - * This method adds the default available equipment modififiers to the Globals. - * - * @throws PersistenceLayerException if some bizarre error occurs, likely due - * to a change in EquipmentModifierLoader - */ - private void addDefaultEquipmentMods() throws PersistenceLayerException - { - String aLine; - EquipmentModifier anObj = new EquipmentModifier(); - aLine = - "Add Type\tKEY:ADDTYPE\tTYPE:ALL\tCOST:0\tNAMEOPT:NONAME\tSOURCELONG:PCGen Internal\tCHOOSE:COUNT=ALL|desired TYPE(s)|TYPE=EQTYPES"; - EquipmentModifierLoader.parseLine(anObj, aLine, null, -1); - EquipmentList.getModifierList().add(anObj); - - // - // Add internal equipment modifier for adding weapon/armor types to equipment - // - anObj = new EquipmentModifier(); - aLine = - Constants.s_INTERNAL_EQMOD_WEAPON - + "\tTYPE:Weapon\tVISIBLE:No\tCHOOSE:DUMMY\tNAMEOPT:NONAME"; - EquipmentModifierLoader.parseLine(anObj, aLine, null, -1); - EquipmentList.getModifierList().add(anObj); - - anObj = new EquipmentModifier(); - aLine = - Constants.s_INTERNAL_EQMOD_ARMOR - + "\tTYPE:Armor\tVISIBLE:No\tCHOOSE:DUMMY\tNAMEOPT:NONAME"; - EquipmentModifierLoader.parseLine(anObj, aLine, null, -1); - EquipmentList.getModifierList().add(anObj); - } - - /** * This method adds a given list of objects to the appropriate Globals * storage. * @@ -1074,25 +1002,6 @@ break; - case LstConstants.EQUIPMENT_TYPE: - - final Equipment eq = - EquipmentList - .getEquipmentKeyed(((Equipment) aArrayList - .get(i)).getKeyName()); - - if (eq == null) - { - Object o = aArrayList.get(i); - if (o instanceof Equipment) - { - Equipment e = (Equipment) o; - EquipmentList.addEquipment(e); - } - } - - break; - case LstConstants.CLASSSKILL_TYPE: parseClassSkillFrom(aArrayList.get(i).toString()); @@ -1130,35 +1039,6 @@ break; - case LstConstants.TEMPLATE_TYPE: - - final PCTemplate aTemplate = - Globals.getTemplateKeyed(((PCTemplate) aArrayList - .get(i)).getKeyName()); - - if (aTemplate == null) - { - Globals.getTemplateList().add( - (PCTemplate) aArrayList.get(i)); - } - - break; - - case LstConstants.EQMODIFIER_TYPE: - - final EquipmentModifier aModifier = - EquipmentList - .getModifierKeyed(((EquipmentModifier) aArrayList - .get(i)).getKeyName()); - - if (aModifier == null) - { - EquipmentList.getModifierList().add( - (EquipmentModifier) aArrayList.get(i)); - } - - break; - case LstConstants.KIT_TYPE: break; @@ -1398,14 +1278,6 @@ break; - case LstConstants.EQUIPMENT_TYPE: - anObj = - initFileTypeEquipment(isForgetItem, nameString, - fileType, isModItem, copyName, anObj, - sourceCampaign, sourceMap, aList, aLine, aURL); - - break; - case LstConstants.LOAD_TYPE: Globals.getLoadStrings().add(aLine); @@ -1428,21 +1300,6 @@ break; - case LstConstants.TEMPLATE_TYPE: - anObj = - initFileTypeTemplate(isForgetItem, nameString, - fileType, isModItem, anObj, sourceCampaign, - sourceMap, aList, aLine, aURL); - - break; - - case LstConstants.EQMODIFIER_TYPE: - anObj = - initFileTypeEqModifier(sourceCampaign, sourceMap, - aLine, aURL, aList); - - break; - case LstConstants.KIT_TYPE: if (aLine.startsWith("REGION:")) @@ -1523,28 +1380,6 @@ } - private static PObject initFileTypeEqModifier(Campaign sourceCampaign, - Map<String, String> sourceMap, String aLine, final URL aURL, - List<PObject> aList) throws PersistenceLayerException - { - final PObject anObj; - anObj = new EquipmentModifier(); - anObj.setSourceCampaign(sourceCampaign); - try - { - anObj.setSourceMap(sourceMap); - } - catch (ParseException e) - { - throw new PersistenceLayerException(e.toString()); - } - EquipmentModifierLoader.parseLine((EquipmentModifier) anObj, aLine, - aURL, lineNum); - aList.add(anObj); - - return anObj; - } - private PObject initFileTypeCompanionMod(boolean forgetItem, String nameString, int fileType, boolean modItem, PObject anObj, Campaign sourceCampaign, Map<String, String> sourceMap, @@ -1623,205 +1458,6 @@ return anObj; } - private PObject initFileTypeEquipment(boolean forgetItem, - String nameString, int fileType, boolean modItem, String copyName, - PObject anObj, Campaign sourceCampaign, Map<String, String> sourceMap, - List<PObject> aList, String aLine, final URL aURL) - throws PersistenceLayerException - { - if (forgetItem) - { - forgetItem(EquipmentList.getEquipmentNamed(nameString), nameString, - fileType); - - return anObj; - } - - if (!modItem) - { - if (copyName == null) - { - anObj = new Equipment(); - anObj.setSourceCampaign(sourceCampaign); - try - { - anObj.setSourceMap(sourceMap); - } - catch (ParseException e) - { - throw new PersistenceLayerException(e.toString()); - } - } - else - { - anObj = EquipmentList.getEquipmentNamed(nameString); - - if (anObj != null) - { - try - { - anObj = (PObject) anObj.clone(); - } - catch (CloneNotSupportedException exc) - { - ShowMessageDelegate.showMessageDialog(exc.getMessage(), - Constants.s_APPNAME, MessageType.ERROR); - } - - anObj.setName(copyName); - } - else - { - logError("Could not copy " + nameString + " to create " - + copyName); - } - } - - if (anObj != null) - { - aList.add(anObj); - } - } - else - { - anObj = EquipmentList.getEquipmentNamed(nameString); - - if (anObj == null) - { - List<Equipment> eqList = new ArrayList<Equipment>(); - for (PObject pObj : aList) - { - eqList.add((Equipment) pObj); - } - anObj = EquipmentList.getEquipmentNamed(nameString, eqList); - } - } - - if (modItem && (anObj == null)) - { - modLines.add(aLine); - modFileType.add(fileType); - } - - if (anObj != null) - { - try - { - boolean noSource = anObj.getSourceEntry() == null; - int hashCode = 0; - if (!noSource) - { - hashCode = anObj.getSourceEntry().hashCode(); - } - - EquipmentLoader.parseLine((Equipment) anObj, aLine, aURL, - lineNum); - - if ((noSource && anObj.getSourceEntry() != null) - || (!noSource && hashCode != anObj.getSourceEntry() - .hashCode())) - { - // We never had a source and now we do so set the source - // map - try - { - anObj.setSourceMap(sourceMap); - } - catch (ParseException notUsed) - { - Logging.errorPrintLocalised( - "Errors.LstFileLoader.ParseDate", sourceMap); //$NON-NLS-1$ - } - } - } - catch (PersistenceLayerException ple) - { - logError("Unable to parse the equipment file: '" - + aURL + "':'" + aLine + "' " + ple.getMessage()); - } - } - - return anObj; - } - - private PObject initFileTypeTemplate(boolean forgetItem, String aKey, - int fileType, boolean modItem, PObject anObj, Campaign sourceCampaign, - Map<String, String> sourceMap, List<PObject> aList, String aLine, - final URL aURL) throws PersistenceLayerException - { - if (forgetItem) - { - forgetItem(Globals.getTemplateKeyed(aKey), aKey, fileType); - - return anObj; - } - - if (!modItem) - { - anObj = new PCTemplate(); - anObj.setSourceCampaign(sourceCampaign); - try - { - anObj.setSourceMap(sourceMap); - } - catch (ParseException e) - { - throw new PersistenceLayerException(e.toString()); - } - aList.add(anObj); - } - else - { - anObj = Globals.getTemplateKeyed(aKey); - } - - if (anObj == null) - { - modLines.add(aLine); - modFileType.add(fileType); - } - - if (anObj != null) - { - try - { - boolean noSource = anObj.getSourceEntry() == null; - int hashCode = 0; - if (!noSource) - { - hashCode = anObj.getSourceEntry().hashCode(); - } - - PCTemplateLoader.parseLine((PCTemplate) anObj, aLine, aURL, - lineNum); - - if ((noSource && anObj.getSourceEntry() != null) - || (!noSource && hashCode != anObj.getSourceEntry() - .hashCode())) - { - // We never had a source and now we do so set the source - // map - try - { - anObj.setSourceMap(sourceMap); - } - catch (ParseException notUsed) - { - Logging.errorPrintLocalised( - "Errors.LstFileLoader.ParseDate", sourceMap); //$NON-NLS-1$ - } - } - } - catch (PersistenceLayerException ple) - { - logError("Unable to parse the template file: '" - + aURL + "':'" + aLine + "' " + ple.getMessage()); - } - } - - return anObj; - } - /** * Reads the source file for the campaign aCamp and adds the names * of files to be loaded to raceFileList, classFileList etc. Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2007-01-11 17:30:07 UTC (rev 1933) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2007-01-12 03:19:36 UTC (rev 1934) @@ -58,6 +58,11 @@ { PCClass pcClass = target; + /* + * FIXME TODO This should probably be done AFTER SUB*CLASS string checking, + * as a null PCClass with SUB* items is meaningless... and an error that should + * be flagged to the user - thpr 1/10/07 + */ if (pcClass == null) { pcClass = new PCClass(); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java 2007-01-11 17:30:07 UTC (rev 1933) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java 2007-01-12 03:19:36 UTC (rev 1934) @@ -26,93 +26,91 @@ */ package pcgen.persistence.lst; -import java.net.URL; import java.util.Map; import java.util.StringTokenizer; +import pcgen.core.Globals; import pcgen.core.PCTemplate; +import pcgen.core.PObject; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.SystemLoader; import pcgen.util.Logging; /** - * - * @author David Rice <dav...@jc...> + * + * @author David Rice <dav...@jc...> * @version $Revision$ */ -public final class PCTemplateLoader -{ - /** Creates a new instance of PCTemplateLoader */ - private PCTemplateLoader() - { - // Empty Constructor - } +public final class PCTemplateLoader extends LstObjectFileLoader<PCTemplate> { - public static void parseLine(PCTemplate template, String inputLine, - URL sourceURL, int lineNum) throws PersistenceLayerException - { - if (template == null) - { - return; + @Override + protected void addGlobalObject(PObject pObj) { + final PCTemplate aTemplate = Globals + .getTemplateKeyed(pObj.getKeyName()); + if (aTemplate == null) { + Globals.getTemplateList().add((PCTemplate) pObj); } - final StringTokenizer colToken = - new StringTokenizer(inputLine, SystemLoader.TAB_DELIM); - int col = 0; - if (!template.isNewItem()) - { - col = 1; // .MOD skip required fields (name in this case) - colToken.nextToken(); + } + + @Override + protected PCTemplate getObjectKeyed(String aKey) { + return Globals.getTemplateKeyed(aKey); + } + + @Override + public PCTemplate parseLine(PCTemplate template, String inputLine, + CampaignSourceEntry source) throws PersistenceLayerException { + if (template == null) { + template = new PCTemplate(); } + + final StringTokenizer colToken = new StringTokenizer(inputLine, + SystemLoader.TAB_DELIM); + + String name = colToken.nextToken(); + template.setName(name); + template.setSourceCampaign(source.getCampaign()); + template.setSourceFile(source.getFile()); - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(PCTemplateLstToken.class); - while (colToken.hasMoreTokens()) - { + Map<String, LstToken> tokenMap = TokenStore.inst().getTokenMap( + PCTemplateLstToken.class); + while (colToken.hasMoreTokens()) { final String colString = colToken.nextToken().trim(); final int idxColon = colString.indexOf(':'); String key = ""; - try - { + try { key = colString.substring(0, idxColon); - } - catch (StringIndexOutOfBoundsException e) - { + } catch (StringIndexOutOfBoundsException e) { // TODO Handle Exception } PCTemplateLstToken token = (PCTemplateLstToken) tokenMap.get(key); - if (col == 0) - { - template.setName(colString); - } - else if (colString.startsWith("CHOOSE:LANGAUTO:")) - { + if (colString.startsWith("CHOOSE:LANGAUTO:")) { template.setChooseLanguageAutos(colString.substring(16)); - } - else if (token != null) - { + } else if (token != null) { final String value = colString.substring(idxColon + 1); LstUtils.deprecationCheck(token, template, value); - if (!token.parse(template, value)) - { + if (!token.parse(template, value)) { Logging.errorPrint("Error parsing template " - + template.getDisplayName() + ':' - + sourceURL.toString() + ':' + colString + "\""); + + template.getDisplayName() + ':' + + source.toString() + ':' + colString + "\""); } - } - else if (PObjectLoader.parseTag(template, colString)) - { + } else if (PObjectLoader.parseTag(template, colString)) { continue; - } - else - { + } else { Logging.errorPrint("Unknown tag '" + colString + "' in " - + sourceURL.toString()); + + source.toString()); } - - ++col; } + + completeObject(template); + return null; } + + @Override + protected void performForget(PObject objToForget) { + Globals.getTemplateList().remove(objToForget); + } } Modified: Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java 2007-01-11 17:30:07 UTC (rev 1933) +++ Trunk/pcgen/code/src/test/pcgen/core/PCTemplateTest.java 2007-01-12 03:19:36 UTC (rev 1934) @@ -24,7 +24,6 @@ package pcgen.core; import java.net.MalformedURLException; -import java.net.URL; import java.util.List; import junit.framework.Test; @@ -33,6 +32,7 @@ import pcgen.PCGenTestCase; import pcgen.core.Ability.Nature; import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.CampaignSourceEntry; import pcgen.persistence.lst.PCTemplateLoader; /** @@ -47,6 +47,7 @@ public class PCTemplateTest extends AbstractCharacterTestCase { private PCClass testClass; + private PCTemplateLoader loader = new PCTemplateLoader(); /** * Constructs a new <code>PCTemplateTest</code>. @@ -111,11 +112,16 @@ // Link them to a template PCTemplate template = new PCTemplate(); //CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); - PCTemplateLoader + + CampaignSourceEntry source = + new CampaignSourceEntry(new Campaign(), getClass().getName() + + ".java"); + loader.setCurrentSource(source); + loader .parseLine( template, "Template1 ABILITY:TestCat|AUTO|Ability1 ABILITY:TestCat|AUTO|Ability2", - new URL("file://PCTemplateTest.java"), -9); + source); List<String> keys = template.getAbilityKeys(null, cat, Nature.AUTOMATIC); assertEquals(2, keys.size()); assertEquals(ab1.getKeyName(), keys.get(0)); @@ -151,12 +157,15 @@ // Link them to a template PCTemplate template = new PCTemplate(); - //CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); - PCTemplateLoader + CampaignSourceEntry source = + new CampaignSourceEntry(new Campaign(), getClass().getName() + + ".java"); + loader.setCurrentSource(source); + loader .parseLine( template, "Template1 ABILITY:FEAT|AUTO|Ability1 ABILITY:FEAT|AUTO|Ability2", - new URL("file://PCTemplateTest.java"), -9); + source); List<String> keys = template.getAbilityKeys(null, AbilityCategory.FEAT, Nature.AUTOMATIC); assertEquals(2, keys.size()); assertEquals(ab1.getKeyName(), keys.get(0)); @@ -194,12 +203,15 @@ // Link them to a template PCTemplate template = new PCTemplate(); - //CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); - PCTemplateLoader + CampaignSourceEntry source = + new CampaignSourceEntry(new Campaign(), getClass().getName() + + ".java"); + loader.setCurrentSource(source); + loader .parseLine( template, "Template1 LEVEL:2:ABILITY:TestCat|AUTO|Ability1 ABILITY:TestCat|AUTO|Ability2", - new URL("file://PCTemplateTest.java"), -9); + source); List<String> keys = template.getAbilityKeys(null, cat, Nature.AUTOMATIC); assertEquals(2, keys.size()); assertEquals(ab1.getKeyName(), keys.get(0)); @@ -249,12 +261,15 @@ // Link them to a template PCTemplate template = new PCTemplate(); - //CampaignSourceEntry cse = new CampaignSourceEntry(new Campaign(), ""); - PCTemplateLoader + CampaignSourceEntry source = + new CampaignSourceEntry(new Campaign(), getClass().getName() + + ".java"); + loader.setCurrentSource(source); + loader .parseLine( template, "Template1 LEVEL:2:ABILITY:Feat|AUTO|Ability1 ABILITY:Feat|AUTO|Ability2", - new URL("file://PCTemplateTest.java"), -9); + source); List<String> keys = template.getAbilityKeys(null, AbilityCategory.FEAT, Nature.AUTOMATIC); assertEquals(2, keys.size()); assertEquals(ab1.getKeyName(), keys.get(0)); Modified: Trunk/pcgen/code/src/test/pcgen/util/TestHelper.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/util/TestHelper.java 2007-01-11 17:30:07 UTC (rev 1933) +++ Trunk/pcgen/code/src/test/pcgen/util/TestHelper.java 2007-01-12 03:19:36 UTC (rev 1934) @@ -27,11 +27,11 @@ import gmgen.pluginmgr.PluginLoader; import java.lang.reflect.Field; -import java.net.URL; import java.util.Arrays; import java.util.StringTokenizer; import pcgen.core.Ability; +import pcgen.core.Campaign; import pcgen.core.Constants; import pcgen.core.Equipment; import pcgen.core.EquipmentList; @@ -47,6 +47,7 @@ import pcgen.core.bonus.BonusObj; import pcgen.core.prereq.Prerequisite; import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.CampaignSourceEntry; import pcgen.persistence.lst.EquipmentLoader; import pcgen.persistence.lst.prereq.PreParserFactory; @@ -89,6 +90,8 @@ gamemode.getSizeAdjustmentNamed("Medium").setIsDefaultSize(true); } + private static EquipmentLoader loader = new EquipmentLoader(); + /** * Make some equipment * @param input @@ -103,8 +106,11 @@ Equipment eq = new Equipment(); try { - URL x = null; - EquipmentLoader.parseLine(eq, input, x, 0); + CampaignSourceEntry source = + new CampaignSourceEntry(new Campaign(), TestHelper.class.getName() + + ".java"); + loader.setCurrentSource(source); + loader.parseLine(eq, input, source); EquipmentList.addEquipment(eq); return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-01-18 02:30:03
|
Revision: 1972 http://svn.sourceforge.net/pcgen/?rev=1972&view=rev Author: thpr Date: 2007-01-17 18:30:01 -0800 (Wed, 17 Jan 2007) Log Message: ----------- Complete [ 1620957 ] Change QUALIFY syntax to work with Ability Objects (category based) Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/prereq/PrereqHandler.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java Trunk/pcgen/code/src/java/plugin/lsttokens/QualifyToken.java Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2007-01-18 00:51:14 UTC (rev 1971) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2007-01-18 02:30:01 UTC (rev 1972) @@ -61,7 +61,6 @@ import pcgen.persistence.lst.output.prereq.PrerequisiteWriter; import pcgen.persistence.lst.prereq.PreParserFactory; import pcgen.util.DoubleKeyMap; -import pcgen.util.HashMapToList; import pcgen.util.Logging; import pcgen.util.StringPClassUtil; import pcgen.util.chooser.ChooserFactory; @@ -156,7 +155,7 @@ private List<Description> theDescriptions = null; - private HashMapToList<Class, String> qualifyKeys = null; + private DoubleKeyMap<Class, String, List<String>> qualifyKeys = null; /* ************ * Methods @@ -1611,24 +1610,39 @@ /** * Set the qualify string - * @param aString */ - public final void putQualifyString(Class cl, String key) - { + public void putQualifyString(Class cl, String category, String key) { if (qualifyKeys == null) { - qualifyKeys = new HashMapToList<Class, String>(); + qualifyKeys = new DoubleKeyMap<Class, String, List<String>>(); } - qualifyKeys.addToListFor(cl, key); + List<String> list = qualifyKeys.get(cl, category); + if (list == null) { + list = new ArrayList<String>(); + qualifyKeys.put(cl, category, list); + } + list.add(key); + //No need to put list back in qualifyKeys, it is fetched by reference } - - public final boolean containsQualify() + + public final boolean grantsQualify(PObject qualTestObject) { - return qualifyKeys != null && !qualifyKeys.isEmpty(); + if (qualifyKeys == null) { + return false; + } + Class<? extends PObject> cl = qualTestObject.getClass(); + String key = qualTestObject.getKeyName(); + String category = Ability.class.equals(cl) ? ((Ability) qualTestObject) + .getCategory() : null; + List<String> directList = qualifyKeys.get(cl, category); + List<String> oldSyntaxList = qualifyKeys + .get(Object.class, category); + return (directList != null && directList.contains(key)) + || (oldSyntaxList != null && oldSyntaxList.contains(key)); } //TODO This exposes internal structure - be careful. - public final HashMapToList<Class, String> getQualifyMap() + public final DoubleKeyMap<Class, String, List<String>> getQualifyMap() { return qualifyKeys; } @@ -2858,27 +2872,34 @@ } } - HashMapToList<Class, String> hmtl = getQualifyMap(); - if (hmtl != null) + DoubleKeyMap<Class, String, List<String>> dkm = getQualifyMap(); + if (dkm != null) { - for (Class cl : hmtl.getKeySet()) + for (Class cl : dkm.getKeySet()) { String s = StringPClassUtil.getStringFor(cl); - List<String> l = hmtl.getListFor(cl); - if (l != null) { - boolean started = false; - for (String key : l) { - if (!"alwaysValid".equals(key)) { - if (started) { - txt.append(Constants.PIPE); - } else { - txt.append("\tQUALIFY:"); - if (s.length() > 0) { - txt.append(s + Constants.PIPE); + for (String category : dkm.getSecondaryKeySet(cl)) + { + List<String> l = dkm.get(cl, category); + if (l != null) { + boolean started = false; + for (String key : l) { + if (!"alwaysValid".equals(key)) { + if (started) { + txt.append(Constants.PIPE); + } else { + txt.append("\tQUALIFY:"); + if (s.length() > 0) { + txt.append(s); + } + if (category != null) { + txt.append('=').append(category); + } + txt.append(Constants.PIPE); + started = true; } - started = true; + txt.append(key); } - txt.append(key); } } } Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-18 00:51:14 UTC (rev 1971) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-18 02:30:01 UTC (rev 1972) @@ -218,7 +218,6 @@ // Should we sort the gear automatically? private boolean autoSortGear = true; - private boolean qualifyListStable = false; private final boolean useMonsterDefault = SettingsHandler .isMonsterDefault(); @@ -4064,14 +4063,27 @@ return iBonus; } - public boolean checkQualifyList(Class cl, final String qualifierItem) + public boolean checkQualifyList(PObject testQualObj) { /* * The use of Object.class here is the "universalizer" to account * for the 5.10.* format of Qualify - which is "allow anything all at once" + * - Tom Parker 1/17/07 */ - return getQualifyMap().containsInList(cl, qualifierItem) - || getQualifyMap().containsInList(Object.class, qualifierItem); + // Try all possible POBjects + for (PObject pObj : getPObjectList()) + { + if (pObj == null) + { + continue; + } + + if (pObj.grantsQualify(testQualObj)) + { + return true; + } + } + return false; } /** @@ -8028,8 +8040,6 @@ addTemplateKeyed(templates.get(i)); } - setQualifyListStable(false); - if (!isImporting()) { getSpellList(); @@ -10381,8 +10391,6 @@ setAutomaticFeatsStable(false); } - setQualifyListStable(false); - // karianna 1184888 adjustMoveRates(); @@ -10839,35 +10847,6 @@ return Double.valueOf(0); } - /* - * Build on-the-fly so removing templates won't mess up qualify list - */ - HashMapToList<Class, String> getQualifyMap() - { - if (!qualifyListStable) - { - qualifyArrayMap = new HashMapToList<Class, String>(); - - // Try all possible POBjects - for (PObject pObj : getPObjectList()) - { - if (pObj == null) - { - continue; - } - - if (pObj.containsQualify()) - { - qualifyArrayMap.addAllLists(pObj.getQualifyMap()); - } - } - - setQualifyListStable(true); - } - - return qualifyArrayMap; - } - void addVariable(final String variableString) { variableList.add(variableString); @@ -11758,12 +11737,6 @@ return hasWeaponProfKeyed(wp.getKeyName()); } - private void setQualifyListStable(final boolean state) - { - qualifyListStable = state; - // setDirty(true); - } - private SortedSet<String> getRacialFavoredClasses() { String rfc = getRace().getFavoredClass(); @@ -13042,7 +13015,6 @@ { clearActiveBonusMap(); processedBonusList.clear(); - setQualifyListStable(false); // // We do a first pass of just the "static" bonuses @@ -14849,7 +14821,6 @@ // aClone.setAggregateAbilitiesStable(null, false); aClone.setAutomaticFeatsStable(false); aClone.setVirtualFeatsStable(false); - aClone.setQualifyListStable(false); aClone.adjustMoveRates(); aClone.calcActiveBonuses(); Modified: Trunk/pcgen/code/src/java/pcgen/core/prereq/PrereqHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/prereq/PrereqHandler.java 2007-01-18 00:51:14 UTC (rev 1971) +++ Trunk/pcgen/code/src/java/pcgen/core/prereq/PrereqHandler.java 2007-01-18 02:30:01 UTC (rev 1972) @@ -74,7 +74,7 @@ if ((character != null) && (caller != null)) { // Check for QUALIFY: - if (character.checkQualifyList(caller.getClass(), caller.getKeyName())) + if (character.checkQualifyList(caller)) { return true; } @@ -205,7 +205,7 @@ boolean autoQualifies = false; int total = 0; - if ((caller != null) && character.checkQualifyList(caller.getClass(), caller.getKeyName()) && (!overrideQualify)) + if ((caller != null) && character.checkQualifyList(caller) && (!overrideQualify)) { autoQualifies = true; } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java 2007-01-18 00:51:14 UTC (rev 1971) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java 2007-01-18 02:30:01 UTC (rev 1972) @@ -30,7 +30,7 @@ import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.GlobalLstToken; import pcgen.persistence.lst.TokenStore; -import pcgen.util.HashMapToList; +import pcgen.util.DoubleKeyMap; import pcgen.util.Logging; import pcgen.util.PropertyFactory; import pcgen.util.enumeration.Visibility; @@ -187,10 +187,10 @@ exchangeLevel.setText(obj.getLevelExchange()); // startSkillPoints.setText(String.valueOf(obj.getSkillPoints())); startSkillPoints.setText(obj.getSkillPointFormula()); - HashMapToList<Class, String> hmtl = obj.getQualifyMap(); - if (hmtl != null) + DoubleKeyMap<Class, String, List<String>> dkm = obj.getQualifyMap(); + if (dkm != null) { - List ol = hmtl.getListFor(Object.class); + List<String> ol = dkm.get(Object.class, null); if (ol != null && !ol.isEmpty()) { qualify.setText(CoreUtility.join(ol, "|")); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/QualifyToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/QualifyToken.java 2007-01-18 00:51:14 UTC (rev 1971) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/QualifyToken.java 2007-01-18 02:30:01 UTC (rev 1972) @@ -39,7 +39,25 @@ } StringTokenizer st = new StringTokenizer(value, Constants.PIPE); String key = st.hasMoreTokens() ? st.nextToken() : ""; - Class c = StringPClassUtil.getClassFor(key); + Class c; + String category = null; + int equalLoc = key.indexOf('='); + if (equalLoc == -1) { + if ("ABILITY".equals(key)) { + Logging.errorPrint("Invalid use of ABILITY in QUALIFY " + + "(requires ABILITY=<vategory>): " + key); + return false; + } + c = StringPClassUtil.getClassFor(key); + } else { + if (!"ABILITY".equals(key.substring(0, equalLoc))) { + Logging.errorPrint("Invalid use of = in QUALIFY " + + "(only valid for ABILITY): " + key); + return false; + } + c = Ability.class; + category = key.substring(equalLoc + 1); + } if (c == null) { c = Object.class; Logging.errorPrint(getTokenName() + " expecting a POBJECT Type, found: " + key); @@ -51,7 +69,7 @@ } while (true) { - obj.putQualifyString(c, key); + obj.putQualifyString(c, category, key); if (!st.hasMoreTokens()) { break; } Modified: Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2007-01-18 00:51:14 UTC (rev 1971) +++ Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2007-01-18 02:30:01 UTC (rev 1972) @@ -221,7 +221,7 @@ aQClass.setName("QualClass"); aQClass.setKeyName("KEY_QualClass"); aQClass.setAbbrev("QC1"); - aQClass.putQualifyString(PCClass.class, "KEY_PreReqClass"); + aQClass.putQualifyString(PCClass.class, null, "KEY_PreReqClass"); //aQClass.setQualifyString("KEY_PreReqClass|PreReqVar"); final PCClass aNqClass = new PCClass(); @@ -295,8 +295,8 @@ aQClass.setName("QualClass"); aQClass.setKeyName("KEY_QualClass"); aQClass.setAbbrev("QC1"); - aQClass.putQualifyString(Object.class, "KEY_PreReqClass"); - aQClass.putQualifyString(Object.class, "PreReqVar"); + aQClass.putQualifyString(Object.class, null, "KEY_PreReqClass"); + aQClass.putQualifyString(Object.class, null, "PreReqVar"); final PCClass aNqClass = new PCClass(); aNqClass.setName("NonQualClass"); @@ -747,7 +747,7 @@ qClass.setName("QualClass"); qClass.setKeyName("KEY_QualClass"); qClass.setAbbrev("QC1"); - qClass.putQualifyString(PCClass.class, "KEY_PreReqClass"); + qClass.putQualifyString(PCClass.class, null, "KEY_PreReqClass"); //qClass.setQualifyString("KEY_PreReqClass|PreReqVar"); nqClass = new PCClass(); nqClass.setName("NonQualClass"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <van...@us...> - 2007-01-22 22:07:03
|
Revision: 2006 http://svn.sourceforge.net/pcgen/?rev=2006&view=rev Author: vandaelek Date: 2007-01-22 14:06:25 -0800 (Mon, 22 Jan 2007) Log Message: ----------- [ 1442041 ] PREDOMAIN:ANY Added myself to list of code monkeys Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui/prop/PCGenProp.properties Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDomainTester.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreDomainTest.java Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/PCGenProp.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/PCGenProp.properties 2007-01-22 19:10:23 UTC (rev 2005) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/PCGenProp.properties 2007-01-22 22:06:25 UTC (rev 2006) @@ -10,7 +10,7 @@ # Version number should be x.y.z (e.g. 2.0.0) VersionNumber=5.11.6 ReleaseDate=January 7, 2007 -CodeMonkeys=B. K. Oxley (binkley), Jonas Karlsson, Matthew Woodard, Peter Kahle, Tim Dugger, Tom Epperly, Brian Forester, Mario Bonassin, Jason Buchanan, Mark Hulsmanand, Jerry Hill, Eric Statz, Kurt Wimmer, David Fallon, Tyler Bannister, Thomas Clegg, Greg Bingleman, Emily Smirle, Arcady, Thomas Behr, Ryan Koppenhaver, Jayme Cox, Scott Ellsworth, Chris Ryan, James Dempsey, Walter Duncan, Devon Jones, Felipe Diniz, Frugal, Richard Askham, David Hibbs, John Watson, Stefan Radermacher, Ross Lodge, Benjamin Pew, Brian Kuehn, Aaron Divinsky, Andrew Wilson, Brian Hoff, Tom Parker, Andriy Sen +CodeMonkeys=B. K. Oxley (binkley), Jonas Karlsson, Matthew Woodard, Peter Kahle, Tim Dugger, Tom Epperly, Brian Forester, Mario Bonassin, Jason Buchanan, Mark Hulsmanand, Jerry Hill, Eric Statz, Kurt Wimmer, David Fallon, Tyler Bannister, Thomas Clegg, Greg Bingleman, Emily Smirle, Arcady, Thomas Behr, Ryan Koppenhaver, Jayme Cox, Scott Ellsworth, Chris Ryan, James Dempsey, Walter Duncan, Devon Jones, Felipe Diniz, Frugal, Richard Askham, David Hibbs, John Watson, Stefan Radermacher, Ross Lodge, Benjamin Pew, Brian Kuehn, Aaron Divinsky, Andrew Wilson, Brian Hoff, Tom Parker, Andriy Sen, Koen Van Daele TestMonkeys=Dave Cortijo, Martin Brabander, John Sussenberger, Stephen Gryphon, Richard O'Doherty-Gregg, Brad Stiles, Chris Andersen, Joseff, and many more. ListMonkeys=Robert Hilson, KahnB, \xC9ric Beaudoin (Space Monkey), Tir Gwaith (Andrew McDougall), Mynex (Rob Reed), Thomas Behr, Tom Deprez, Luc Hermitte, Matt Haffner, Hugo Perez, Michael Telford, Sean Kelly, Ashley McKay, Duane Moore, Tom Cowan, Clint Howarth, Gordon Vincent, Gary Silvers, Rob Bowell, Dan Young, Magus Knightcrawler, Lee Calabrese, Barak (Chris Chandler), Kevin W. Patterson (kwp), Jessica 'Artist Wench' Whiting, Wayne Crawford, oddballmage, Ian Dale, Joshua Nelson (DJ_Chair), Y2Krankor (Greg G), Paul W. King, Jeremy (Duo) Banks, dlm1065 (Doug McMillan), Paul Miller, Eric Beeckmans, Michael Gray (Taluonr Iscandar), Kenneth Walters (GldDragon35), Mike Sledge (zodar6), Patryk Adamski (Ruemere), Larry Davis (Sir George Anonymous), Thomas Jannes (chipoulou), Samuel Hendricks (NotMousse), Sigurdur H. Olafsson, Andargor the Wise, Beaver (Michael Beaver), Martin Fagerstr\xF6m, Anders Lindgren (Blithwyn), Eddy Anthony (MoSaT), Darkon Turas, Emily Smirle, Aaron Divinsky, Frank Kliewe, Sean Silvamiramon and many more. WWWHome=http://pcgen.sourceforge.net Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDomainTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDomainTester.java 2007-01-22 19:10:23 UTC (rev 2005) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDomainTester.java 2007-01-22 22:06:25 UTC (rev 2006) @@ -57,12 +57,16 @@ Logging.errorPrintLocalised( "PreDomain.error.bad_operand", prereq.toString()); //$NON-NLS-1$ } - - final boolean hasDomain = + + if ( prereq.getKey().toUpperCase().equals("ANY") ) { + runningTotal = character.getCharacterDomainUsed(); + } else { + final boolean hasDomain = character.getCharacterDomainKeyed(prereq.getKey()) != null; + + runningTotal = hasDomain ? 1 : 0; + } - runningTotal = hasDomain ? 1 : 0; - runningTotal = prereq.getOperator().compare(runningTotal, number); return countedTotal(prereq, runningTotal); } Modified: Trunk/pcgen/code/src/test/pcgen/core/prereq/PreDomainTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/prereq/PreDomainTest.java 2007-01-22 19:10:23 UTC (rev 2005) +++ Trunk/pcgen/code/src/test/pcgen/core/prereq/PreDomainTest.java 2007-01-22 22:06:25 UTC (rev 2006) @@ -132,7 +132,46 @@ assertTrue("Character's deity has Good and animal domains", PrereqHandler.passes(prereq, character, null)); } + + /** + * Test for any domain. + * + * @author Koen Van Daele <van...@us...> + * @throws Exception + */ + public void testAny() throws Exception + { + final PlayerCharacter character = getCharacter(); + Prerequisite prereq; + + final PreParserFactory factory = PreParserFactory.getInstance(); + prereq = factory.parse("PREDOMAIN:1,ANY"); + + assertFalse("Character has no domains", PrereqHandler.passes( + prereq, character, null)); + + CharacterDomain cd = new CharacterDomain(); + cd.setDomain(Globals.getDomainKeyed("Good"), character); + character.addCharacterDomain(cd); + + assertTrue("Character has one domain", PrereqHandler.passes(prereq, + character, null)); + + prereq = factory.parse("PREDOMAIN:2,ANY"); + + assertFalse("Character has only one domain", PrereqHandler.passes( + prereq, character, null)); + + CharacterDomain cd1 = new CharacterDomain(); + cd1.setDomain(Globals.getDomainKeyed("Animal"), character); + character.addCharacterDomain(cd1); + + assertTrue("Character has two domains", PrereqHandler.passes( + prereq, character, null)); + + } + protected void setUp() throws Exception { super.setUp(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <van...@us...> - 2007-02-04 17:21:08
|
Revision: 2115 http://svn.sourceforge.net/pcgen/?rev=2115&view=rev Author: vandaelek Date: 2007-02-04 09:20:39 -0800 (Sun, 04 Feb 2007) Log Message: ----------- Started internationalisation of InfoTempMod. Added a helper class and Unit Test for the setInfoLabelText methods. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/gui/utils/InfoLabelTextBuilder.java Trunk/pcgen/code/src/test/pcgen/gui/utils/ Trunk/pcgen/code/src/test/pcgen/gui/utils/InfoLabelTextBuilderTest.java Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-02-04 14:44:47 UTC (rev 2114) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-02-04 17:20:39 UTC (rev 2115) @@ -2076,6 +2076,50 @@ in_ieBonusEditorSelected=Selected +# Info Temp Mod Tab + +in_itmInfoLabelTextSource=Source + +in_itmInfoLabelTextDesc=Desc + +in_itmInfoLabelTextType=Type + +in_itmInfoLabelTextProperties=Properties + +in_itmInfoLabelTextWeight=WT + +in_itmInfoLabelTextAC=AC + +in_itmInfoLabelTextMaxDex=MAXDEX + +in_itmInfoLabelTextAcCheck=ACCHECK + +in_itmInfoLabelTextArcaneFailure=Arcane Failure + +in_itmInfoLabelTextMove=Move + +in_itmInfoLabelTextSize=Size + +in_itmInfoLabelTextDamage=Damage + +in_itmInfoLabelTextCritMult=Crit Mult + +in_itmInfoLabelTextCritRange=Crit Range + +in_itmInfoLabelTextRange=Range + +in_itmInfoLabelTextCharges=Charges + +in_itmInfoLabelTextCost=Cost + +in_itmInfoLabelTextDuration=Duration + +in_itmInfoLabelTextRange=Range + +in_itmInfoLabelTextTarget=Target + +in_itmInfoLabelTextSpellDescription=Description + in_demTitleDomain=Domain Editor in_demTitleFeat=Feat Editor Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java 2007-02-04 14:44:47 UTC (rev 2114) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java 2007-02-04 17:20:39 UTC (rev 2115) @@ -95,6 +95,7 @@ import pcgen.gui.panes.FlippingSplitPane; import pcgen.gui.utils.AbstractTreeTableModel; import pcgen.gui.utils.ClickHandler; +import pcgen.gui.utils.InfoLabelTextBuilder; import pcgen.gui.utils.JLabelPane; import pcgen.gui.utils.JTreeTable; import pcgen.gui.utils.JTreeTableMouseAdapter; @@ -517,70 +518,63 @@ if (aClass != null) { - StringBuffer b = new StringBuffer(300); - b.append("<html><font size=+1><b>").append(aClass.getDisplayName()) - .append("</b></font>"); - + + InfoLabelTextBuilder b = new InfoLabelTextBuilder(aClass.getDisplayName()); + String bString = aClass.getDefaultSourceString(); if (bString.length() > 0) { - b.append(" <b>SOURCE:</b>").append(bString); + b.appendI18nElement("in_itmInfoLabelTextSource" , bString); //$NON-NLS-1$ } bString = aClass.getTempDescription(); if (bString.length() > 0) { - b.append(" <br><b>Desc:</b>").append(bString); + b.appendLineBreak().appendElement("in_itmInfoLabelTextDesc", bString); //$NON-NLS-1$ } - b.append("</html>"); infoLabel.setText(b.toString()); } else if (aFeat != null) { - StringBuffer b = new StringBuffer(300); - b.append("<html><font size=+1><b>").append(aFeat.piSubString()) - .append("</b></font>"); - b.append(" <b>Type:</b> ").append(aFeat.getType()); + InfoLabelTextBuilder b = new InfoLabelTextBuilder(aFeat.piSubString()); + + b.appendI18nElement("in_itmInfoLabelTextType" , aFeat.getType()); //$NON-NLS-1$ String bString = aFeat.getDefaultSourceString(); if (bString.length() > 0) { - b.append(" <b>SOURCE:</b>").append(bString); + b.appendI18nElement("in_itmInfoLabelTextSource" , bString); //$NON-NLS-1$ } bString = aFeat.getTempDescription(); if (bString.length() > 0) { - b.append(" <br><b>Desc:</b>").append(bString); + b.appendLineBreak().appendElement("in_itmInfoLabelTextDesc", bString); //$NON-NLS-1$ } - b.append("</html>"); infoLabel.setText(b.toString()); } else if (eqI != null) { - StringBuffer b = new StringBuffer(300); - b.append("<html><font size=+1><b>").append(eqI.piSubString()) - .append("</b></font>"); - + InfoLabelTextBuilder b = new InfoLabelTextBuilder(eqI.piSubString()); + if (!eqI.longName().equals(eqI.getName())) { b.append("(").append(eqI.longName()).append(")"); } - b.append(" <b>Type:</b> ").append(eqI.getType()); + b.appendI18nElement("in_itmInfoLabelTextType" , eqI.getType()); //$NON-NLS-1$ String IDS = eqI.getInterestingDisplayString(pc); if (IDS.length() > 0) { - b.append(" <b>Properties</b>:").append( - eqI.getInterestingDisplayString(pc)); + b.appendI18nElement("in_itmInfoLabelTextProperties" , eqI.getInterestingDisplayString(pc) ); //$NON-NLS-1$ } String bString = @@ -589,22 +583,22 @@ if (bString.length() > 0) { - b.append(" <b>WT</b>:").append(bString); + b.appendElement("in_itmInfoLabelTextWT" , bString); //$NON-NLS-1$ } Integer a = eqI.getACBonus(pc); if (a.intValue() > 0) { - b.append(" <b>AC</b>:").append(a.toString()); + b.appendI18nElement("in_itmInfoLabelTextAC" , a.toString()); //$NON-NLS-1$ } if (eqI.isArmor() || eqI.isShield()) { a = eqI.getMaxDex(pc); - b.append(" <b>MAXDEX</b>:").append(a.toString()); + b.appendI18nElement("in_itmInfoLabelTextMaxDex",a.toString()); //$NON-NLS-1$ a = eqI.acCheck(pc); - b.append(" <b>ACCHECK</b>:").append(a.toString()); + b.appendI18nElement("in_itmInfoLabelTextAcCheck",a.toString()); //$NON-NLS-1$ } if (Globals.getGameModeShowSpellTab()) @@ -613,7 +607,7 @@ if (eqI.isArmor() || eqI.isShield() || (a.intValue() != 0)) { - b.append(" <b>Arcane Failure</b>:").append(a.toString()); + b.appendI18nElement("in_itmInfoLabelTextArcaneFailure",a.toString()); //$NON-NLS-1$ } } @@ -621,121 +615,111 @@ if (bString.length() > 0) { - b.append(" <b>Move</b>:").append(bString); + b.appendI18nElement("in_itmInfoLabelTextMove",bString); //$NON-NLS-1$ } bString = eqI.getSize(); if (bString.length() > 0) { - b.append(" <b>Size</b>:").append(bString); + b.appendI18nElement("in_itmInfoLabelTextSize",bString); //$NON-NLS-1$ } if (eqI.isWeapon()) { - b.append(" <b>Damage</b>:").append(eqI.getDamage(pc)); - b.append(" <b>Crit Mult</b>:").append(eqI.getCritMult()); - b.append(" <b>Crit Range</b>:").append(eqI.getCritRange(pc)); + b.appendI18nElement("in_itmInfoLabelTextDamage",eqI.getDamage(pc)); //$NON-NLS-1$ + b.appendI18nElement("in_itmInfoLabelTextCritMult",eqI.getCritMult()); //$NON-NLS-1$ + b.appendI18nElement("in_itmInfoLabelTextCritRange",eqI.getCritRange(pc)); //$NON-NLS-1$ bString = eqI.getRange(pc).toString(); if (bString.length() > 0) { - b.append(" <b>Range</b>:").append(bString); + b.appendI18nElement("in_itmInfoLabelTextRange",bString); //$NON-NLS-1$ } } - final int charges = eqI.getRemainingCharges(); + final Integer charges = eqI.getRemainingCharges(); if (charges >= 0) { - b.append(" <b>Charges</b>:").append(charges); + b.appendI18nElement("in_itmInfoLabelTextCharges",charges.toString()); //$NON-NLS-1$ } - b.append(" <b>Cost</b>:").append(eqI.getCost(pc)); - b.append(" <b>SOURCE:</b> ").append(eqI.getDefaultSourceString()); + b.appendI18nElement("in_itmInfoLabelTextCost",eqI.getCost(pc).toString()); //$NON-NLS-1$ + b.appendI18nElement("in_itmInfoLabelTextSource",eqI.getDefaultSourceString()); //$NON-NLS-1$ bString = eqI.getTempDescription(); if (bString.length() > 0) { - b.append(" <br><b>Desc:</b>").append(bString); + b.appendLineBreak().appendI18nElement("in_itmInfoLabelTextDesc",bString); //$NON-NLS-1$ } - b.append("</html>"); infoLabel.setText(b.toString()); } else if (aSkill != null) { - StringBuffer b = new StringBuffer(300); - b.append("<html><font size=+1><b>").append(aSkill.getDisplayName()) - .append("</b></font>"); - + InfoLabelTextBuilder b = new InfoLabelTextBuilder(aSkill.getDisplayName()); + String bString = aSkill.getDefaultSourceString(); if (bString.length() > 0) { - b.append(" <b>SOURCE:</b>").append(bString); + b.appendI18nElement("in_itmInfoLabelTextSource" , bString); //$NON-NLS-1$ } bString = aSkill.getTempDescription(); if (bString.length() > 0) { - b.append(" <br><b>Desc:</b>").append(bString); + b.appendLineBreak().appendElement("in_itmInfoLabelTextDesc", bString); //$NON-NLS-1$ } - b.append("</html>"); infoLabel.setText(b.toString()); } else if (aSpell != null) { - StringBuffer b = new StringBuffer(300); - b.append("<html><font size=+1><b>").append(aSpell.piSubString()) - .append("</b></font>"); - b.append(" <b>Duration:</b> ").append(aSpell.getDuration()); - b.append(" <b>Range:</b> ").append(aSpell.getRange()); - b.append(" <b>Target:</b> ").append(aSpell.getTarget()); - b.append(" <b>Description:</b> ") - .append(aSpell.piDescSubString(pc)); + InfoLabelTextBuilder b = new InfoLabelTextBuilder(aSpell.piSubString()); + + b.appendElement("in_itmInfoLabelTextDuration", aSpell.getDuration()); //$NON-NLS-1$ + b.appendElement("in_itmInfoLabelTextRange",aSpell.getRange()); //$NON-NLS-1$ + b.appendElement("in_itmInfoLabelTextTarget",aSpell.getTarget()); //$NON-NLS-1$ + b.appendElement("in_itmInfoLabelTextSpellDescription",aSpell.piDescSubString(pc)); //$NON-NLS-1$ String spellSource = aSpell.getDefaultSourceString(); if (spellSource.length() > 0) { - b.append(" <b>SOURCE:</b>").append(spellSource); + b.appendI18nElement("in_itmInfoLabelTextSource" , spellSource); //$NON-NLS-1$ } String bString = aSpell.getTempDescription(); if (bString.length() > 0) { - b.append(" <br><b>Desc:</b>").append(bString); + b.appendLineBreak().appendElement("in_itmInfoLabelTextDesc", bString); //$NON-NLS-1$ } - b.append("</html>"); infoLabel.setText(b.toString()); } else if (aTemp != null) { - StringBuffer b = new StringBuffer(300); - b.append("<html><font size=+1><b>").append(aTemp.getDisplayName()) - .append("</b></font>"); - + InfoLabelTextBuilder b = new InfoLabelTextBuilder(aTemp.getDisplayName()); + String bString = aTemp.getDefaultSourceString(); if (bString.length() > 0) { - b.append(" <b>SOURCE:</b>").append(bString); + b.appendI18nElement("in_itmInfoLabelTextSource" , bString); //$NON-NLS-1$ } bString = aTemp.getTempDescription(); if (bString.length() > 0) { - b.append(" <br><b>Desc:</b>").append(bString); + b.appendLineBreak().appendElement("in_itmInfoLabelTextDesc", bString); //$NON-NLS-1$ } - b.append("</html>"); infoLabel.setText(b.toString()); } } Added: Trunk/pcgen/code/src/java/pcgen/gui/utils/InfoLabelTextBuilder.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/utils/InfoLabelTextBuilder.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/gui/utils/InfoLabelTextBuilder.java 2007-02-04 17:20:39 UTC (rev 2115) @@ -0,0 +1,114 @@ +/* + * InfoLabelTextBuilder.java + * Copyright 2007 (C) Koen Van Daele + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 4-feb-07 + * + * $Id: $ + */ +package pcgen.gui.utils; + +import pcgen.util.PropertyFactory; + +/** + * <code>InfoLabelTextBuilder</code> is a helper class for the various + * setInfoLabelText methods in the gui tabs. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author Koen Van Daele <van...@us...> + * @version $Revision: $ + */ +public class InfoLabelTextBuilder { + + private StringBuilder buffer = new StringBuilder(300); + + public InfoLabelTextBuilder() + { + buffer.append("<html>"); + } + + /** + * @param title Element that will be added as the start of the string and emphasized. + */ + public InfoLabelTextBuilder(String title) + { + buffer.append("<html>"); + appendTitleElement(title); + } + + /** + * Adds a string to the LabelText. + * @param string String to add + * @return InfoLabelTextBuilder + */ + public InfoLabelTextBuilder append(String string) + { + buffer.append(string); + return this; + } + + /** + * Adds a line break to the LabelText. + * @return InfoLabelTextBuilder + */ + public InfoLabelTextBuilder appendLineBreak() + { + buffer.append("<br>"); + return this; + } + + private void appendTitleElement(String title) + { + buffer.append("<b><font size=+1>").append(title).append("</font></b>"); + } + + /** + * Adds an element to the labelText. The key will be put in bold-face. + * @param key The string that will be used as the key in the LabelText, e.g. SOURCE. + * @param value The value that belongs to the key. + * @return InfoLabelTextBuilder + */ + public InfoLabelTextBuilder appendElement(String key, String value) + { + buffer.append(" <b>").append(key).append("</b>: ").append(value); + return this; + } + + /** + * Used for internationalisation. Looks up the property throught the + * <code>ProperyFactory</code> and uses that as the key. + * @param propertyKey The name of a property in the LanguageProperties file. + * @param value The value that belongs to the key. + * @return InfoLabelTextBuilder + */ + public InfoLabelTextBuilder appendI18nElement(String propertyKey, String value) + { + return appendElement(PropertyFactory.getString(propertyKey),value); + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + buffer.append("</html>"); + return buffer.toString(); + } +} Added: Trunk/pcgen/code/src/test/pcgen/gui/utils/InfoLabelTextBuilderTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/gui/utils/InfoLabelTextBuilderTest.java (rev 0) +++ Trunk/pcgen/code/src/test/pcgen/gui/utils/InfoLabelTextBuilderTest.java 2007-02-04 17:20:39 UTC (rev 2115) @@ -0,0 +1,105 @@ +/* + * InfoLabelTextBuilderTest.java + * Copyright 2007 (C) Koen Van Daele + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 4-feb-07 + * + * $Id: $ + */ +package pcgen.gui.utils; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; +import junit.textui.TestRunner; + + +/** + * <code>InfoLabelTextBuilderTest</code> tests the InfoLabelTextBuilder. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author Koen Van Daele <van...@us...> + * @version $Revision: $ + */ +public class InfoLabelTextBuilderTest extends TestCase +{ + public static void main(String args[]) + { + TestRunner.run(InfoLabelTextBuilderTest.class); + } + + /** + * @return Test + */ + public static Test suite() + { + return new TestSuite(InfoLabelTextBuilderTest.class); + } + + /** + * Test adding a string. + */ + public void testAppendString() + { + InfoLabelTextBuilder b = new InfoLabelTextBuilder(); + + b.append("Test"); + + assertEquals("<html>Test</html>" , b.toString()); + } + + /** + * Test adding a simple element with a key and a value. + */ + public void testAppendElement() + { + InfoLabelTextBuilder b = new InfoLabelTextBuilder(); + + b.appendElement("HP" , "25"); + + assertEquals("<html> <b>HP</b>: 25</html>" , b.toString()); + } + + /** + * Test adding an element that gets its key from the language properties. + */ + public void testAppendI18nElement() + { + InfoLabelTextBuilder b = new InfoLabelTextBuilder(); + + b.appendI18nElement("in_player" , "Koen"); + + assertEquals("<html> <b>Player</b>: Koen</html>" , b.toString()); + } + + /** + * Test building a string with some different options. + */ + public void testAppendComplex() + { + InfoLabelTextBuilder b = new InfoLabelTextBuilder("Character"); + + b.appendLineBreak().appendI18nElement("in_player" , "Koen"); + + assertEquals("<html><b><font size=+1>Character</font></b>"+ + "<br> <b>Player</b>: Koen</html>" , b.toString()); + } + + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2007-02-06 12:07:54
|
Revision: 2123 http://svn.sourceforge.net/pcgen/?rev=2123&view=rev Author: jdempsey Date: 2007-02-06 04:07:54 -0800 (Tue, 06 Feb 2007) Log Message: ----------- Debug ADD:ABILITY and add a simple unit test for it. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java Added Paths: ----------- Trunk/pcgen/code/src/test/pcgen/core/levelability/LevelAbilityAbilityTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java 2007-02-06 10:44:49 UTC (rev 2122) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java 2007-02-06 12:07:54 UTC (rev 2123) @@ -199,7 +199,7 @@ */ List<String> getChoicesList(final String choiceString, final PlayerCharacter aPC) { - final List<String> split = Arrays.asList(choiceString.split("(", 2)); + final List<String> split = Arrays.asList(choiceString.split("\\(", 2)); /* Ignore the empty List returned by the Super class we've built the * list in local state variables */ @@ -355,12 +355,24 @@ (choiceString.indexOf("NUMCHOICES=") < 0) && (choiceString.indexOf("COUNT=") < 0)) { + final List tempAvailList = new ArrayList(); + final List tempSelList = new ArrayList(); anAbility.modChoices( - availableList, - selectedList, + tempAvailList, + tempSelList, false, aPC, true); + // Mod choices may have sent us back weaponprofs, abilities or strings, + // so we have to do a conversion here + for (Iterator iter = tempAvailList.iterator(); iter.hasNext();) + { + availableList.add(String.valueOf(iter.next())); + } + for (Iterator iter = tempSelList.iterator(); iter.hasNext();) + { + selectedList.add(String.valueOf(iter.next())); + } } else { @@ -443,9 +455,14 @@ { String theName = anAbility.getKeyName(); AbilityChoice abC = new AbilityChoice(anAbility, choice); + String fullName = theName; + if (choice != null) + { + fullName += "(" + choice + ")"; + } - AbilityChoice abNull = nameMap.put(theName, abC); - catMap.put(anAbility.getCategory() + " " + theName, abC); + AbilityChoice abNull = nameMap.put(fullName, abC); + catMap.put(anAbility.getCategory() + " " + fullName, abC); if (abNull != null) { @@ -476,7 +493,7 @@ return aKey.substring(start + 1, end); } - return null; + return ""; } /** Added: Trunk/pcgen/code/src/test/pcgen/core/levelability/LevelAbilityAbilityTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/levelability/LevelAbilityAbilityTest.java (rev 0) +++ Trunk/pcgen/code/src/test/pcgen/core/levelability/LevelAbilityAbilityTest.java 2007-02-06 12:07:54 UTC (rev 2123) @@ -0,0 +1,126 @@ +/* + * LevelAbilityAbilityTest.java + * Copyright 2007 (C) James Dempsey <jde...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on February 6, 2007 + * + * Current Ver: $Revision: 1777 $ + * Last Editor: $Author: jdempsey $ + * Last Edited: $Date: 2006-12-17 15:36:01 +1100 (Sun, 17 Dec 2006) $ + * + */ +package pcgen.core.levelability; + +import java.awt.HeadlessException; +import java.util.List; +import pcgen.AbstractCharacterTestCase; +import pcgen.core.Ability; +import pcgen.core.AbilityCategory; +import pcgen.core.Globals; +import pcgen.core.PCClass; +import pcgen.core.PlayerCharacter; +import pcgen.core.Race; +import pcgen.core.Skill; +import pcgen.gui.utils.SwingChooser; +import pcgen.util.Logging; +import pcgen.util.TestHelper; +import pcgen.util.chooser.ChooserFactory; +import pcgen.util.chooser.ChooserInterface; + +/** + * <code>LevelAbilityAbilityTest</code> checks the fucntion of the + * LevelAbilityAbility class. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class LevelAbilityAbilityTest extends AbstractCharacterTestCase +{ + + PCClass pcClass; + Race emptyRace = new Race(); + boolean firstTime = true; + + /** + * @see pcgen.AbstractCharacterTestCase#setUp() + */ + @Override + protected void setUp() throws Exception + { + super.setUp(); + + if (firstTime) + { + firstTime = false; + + pcClass = new PCClass(); + + TestHelper.makeAbility("FtrFeat1", AbilityCategory.FEAT.getAbilityCategory(), "FIGHTER"); + TestHelper.makeAbility("NonFtrFeat", AbilityCategory.FEAT.getAbilityCategory(), "GENERAL"); + TestHelper.makeAbility("FtrAbility", "SpecialAbility", "FIGHTER"); + Ability ftrFeat2 = TestHelper.makeAbility("FtrFeat2", AbilityCategory.FEAT.getAbilityCategory(), "FIGHTER"); + ftrFeat2.setMultiples("Y"); + } + + final PlayerCharacter character = getCharacter(); + character.incrementClassLevel(1, pcClass); + } + + /** + * @see pcgen.AbstractCharacterTestCase#tearDown() + */ + @Override + protected void tearDown() throws Exception + { + pcClass = null; + super.tearDown(); + } + + /** + * Test method for 'pcgen.core.levelability.LevelAbilityClassSkills.getChoicesList(String, PlayerCharacter)' + */ + public void testGetChoicesList1() + { + ChooserFactory.setInterfaceClassname(SwingChooser.class.getName()); + + final LevelAbility ability = + LevelAbility.createAbility(pcClass, 1, + "ABILITY(CATEGORY=FEAT,TYPE.Fighter)"); + is(ability.level(), eq(1), "Is level correct"); + is(ability.canProcess(), eq(true), "Can we process this LevelAbility"); + + try + { + //final ChooserInterface c = ChooserFactory.getChooserInstance(); + //is(c.getPool(), eq(1), "Is one choice being offered"); + final String bString = ability.getTagData(); + + final List<String> choicesList = + ability.getChoicesList(bString, getCharacter()); + is(choicesList.size(), eq(1), "Is there one choice available"); + + is(choicesList.get(0), strEq("KEY_FtrFeat1"), "Is First choice correct"); + } + catch (HeadlessException e) + { + Logging.debugPrint("Ignoring Headless excpetion."); + } + } +} Property changes on: Trunk/pcgen/code/src/test/pcgen/core/levelability/LevelAbilityAbilityTest.java ___________________________________________________________________ Name: keywords + Author Revision Date Id Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-02-10 16:55:18
|
Revision: 2135 http://svn.sourceforge.net/pcgen/?rev=2135&view=rev Author: thpr Date: 2007-02-10 08:55:15 -0800 (Sat, 10 Feb 2007) Log Message: ----------- Additional Performance Improvements, and some tag cleanup (enforcing docs) [ 1656814 ] Improve Launch Performance Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/Ability.java Trunk/pcgen/code/src/java/pcgen/core/Equipment.java Trunk/pcgen/code/src/java/pcgen/core/EquipmentList.java Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/Names.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PObjectDataStore.java Trunk/pcgen/code/src/java/pcgen/core/Skill.java Trunk/pcgen/code/src/java/pcgen/core/SystemCollections.java Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java Trunk/pcgen/code/src/java/pcgen/core/chooser/ProficiencyChoiceManager.java Trunk/pcgen/code/src/java/pcgen/core/chooser/WeaponProfChoiceManager.java Trunk/pcgen/code/src/java/pcgen/core/prereq/PreEquippedTester.java Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java Trunk/pcgen/code/src/java/pcgen/core/utils/ListKey.java Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java Trunk/pcgen/code/src/java/pcgen/gui/LstConverter.java Trunk/pcgen/code/src/java/pcgen/gui/MainSource.java Trunk/pcgen/code/src/java/pcgen/gui/PcgFilter.java Trunk/pcgen/code/src/java/pcgen/gui/PcpFilter.java Trunk/pcgen/code/src/java/pcgen/gui/PersistenceObserver.java Trunk/pcgen/code/src/java/pcgen/gui/SplashScreen.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditUtil.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/pcgen/gui/editor/FeatBasePanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/LanguageBasePanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/SkillBasePanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/SpellBasePanel2.java Trunk/pcgen/code/src/java/pcgen/gui/editor/TemplateBasePanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/TypePanel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoGear.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRaces.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSkills.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityInfoPanel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityModel.java Trunk/pcgen/code/src/java/pcgen/gui/utils/JTreeTable.java Trunk/pcgen/code/src/java/pcgen/io/exporttoken/MovementToken.java Trunk/pcgen/code/src/java/pcgen/io/exporttoken/SkillToken.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignSourceEntry.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentModifierLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/KitLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PObjectLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLoader.java Trunk/pcgen/code/src/java/pcgen/util/enumeration/View.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ClassSpellLevelPane.java Trunk/pcgen/code/src/java/plugin/exporttokens/BaseMovementToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SkillSubsetToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpellMemToken.java Trunk/pcgen/code/src/java/plugin/initiative/SaveModel.java Trunk/pcgen/code/src/java/plugin/lsttokens/DescispiLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/NameispiLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/ability/VisibleToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/OptionToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/equipmentmodifier/CostdoubleToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/equipmentmodifier/FormatcatToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/wieldcategory/FinessableToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/kit/ability/FreeToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/alignment/ValidfordeityToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/alignment/ValidforfollowerToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/stat/RolledToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/RegionToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/RemovableToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/SubraceToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/SubregionToken.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreBaseSizeParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreDeityParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreHandsParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreLegsParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreReachParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSizeParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellResistanceParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreStatParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreVariableParser.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreCSkillTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDomainTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSkillMultTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSkillTester.java Trunk/pcgen/code/src/test/pcgen/io/exporttoken/WeaponTokenTest.java Trunk/pcgen/code/src/test/plugin/exporttokens/ACTokenTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/Ability.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -691,9 +691,9 @@ return super.addAddList(aLevel, aString); } - @Override boolean isTypeHidden(final int idx) + @Override boolean isTypeHidden(final String type) { - return Globals.isAbilityTypeHidden(getMyType(idx)); + return Globals.isAbilityTypeHidden(type); } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/Equipment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -559,8 +559,8 @@ return isRanged() && !isThrown(); } - boolean isTypeHidden(final int idx) { - return Globals.isEquipmentTypeHidden(getMyType(idx)); + boolean isTypeHidden(final String type) { + return Globals.isEquipmentTypeHidden(type); } protected List<String> getMyTypeList() { @@ -5211,7 +5211,7 @@ final List<String> calculatedTypeList; if (bPrimary || (getAltTypeCount() == 0)) { - calculatedTypeList = getSafeListFor(ListKey.TYPE); + calculatedTypeList = new ArrayList<String>(getTypeList(false)); } else { if (!isDouble()) { return new ArrayList<String>(); Modified: Trunk/pcgen/code/src/java/pcgen/core/EquipmentList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/EquipmentList.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/EquipmentList.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -47,11 +47,9 @@ */ public class EquipmentList { - private static final int MODIFIERLISTSIZE = 230; - /** this is determined by preferences */ private static boolean autoGeneration = false; - private static List<EquipmentModifier> modifierList = new ArrayList<EquipmentModifier>(MODIFIERLISTSIZE); + private static TreeMap<String, EquipmentModifier> modifierList = new TreeMap<String, EquipmentModifier>(); private static TreeMap<String, Equipment> equipmentNameMap = new TreeMap<String, Equipment>(); private static TreeMap<String, Equipment> equipmentKeyMap = new TreeMap<String, Equipment>(); @@ -74,22 +72,30 @@ * Empty the modifier list. */ protected static void clearModifierList() { - modifierList = new ArrayList<EquipmentModifier>(MODIFIERLISTSIZE); + modifierList.clear(); } private static boolean isAutoGeneration() { return autoGeneration; } + public static void addEquipmentModifier(EquipmentModifier eqm) + { + modifierList.put(eqm.getKeyName(), eqm); + } + public static void removeEquipmentModifier(EquipmentModifier eqm) + { + modifierList.remove(eqm.getKeyName()); + } /** * Return the modifier list. * * @return the list */ - public static List<EquipmentModifier> getModifierList() { - return modifierList; + public static Collection<EquipmentModifier> getModifierCollection() { + return modifierList.values(); } /** @@ -504,7 +510,7 @@ * @return the Equipment object */ public static EquipmentModifier getModifierKeyed(final String aKey) { - return Globals.searchPObjectList(getModifierList(), aKey); + return modifierList.get(aKey); } /** @@ -726,9 +732,8 @@ } static EquipmentModifier getQualifiedModifierNamed(final String aName, final List<String> aType) { - for (Iterator<EquipmentModifier> e = getModifierList().iterator(); e.hasNext();) { - final EquipmentModifier aEqMod = e.next(); - + for (EquipmentModifier aEqMod : getModifierCollection()) + { if (aEqMod.getDisplayName().equals(aName)) { if (aEqMod.isType("All")) { return aEqMod; } @@ -744,7 +749,7 @@ } private static EquipmentModifier getModifierNamed(final String aName) { - for ( EquipmentModifier eqMod : getModifierList() ) + for (EquipmentModifier eqMod : getModifierCollection()) { if (eqMod.getDisplayName().equals(aName)) { return eqMod; } } @@ -753,7 +758,7 @@ } private static EquipmentModifier getQualifiedModifierNamed(final String aName, final Equipment eq) { - for ( EquipmentModifier eqMod : getModifierList() ) + for (EquipmentModifier eqMod : getModifierCollection()) { if (eqMod.getDisplayName().startsWith(aName)) { for (String t : eq.typeList() ) Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -130,7 +130,7 @@ // private static List<CompanionMod> companionModList = new ArrayList<CompanionMod>(); private static List<Deity> deityList = new ArrayList<Deity>(275); private static List<Domain> domainList = new ArrayList<Domain>(100); - private static List<Kit> kitList = new ArrayList<Kit>(); + private static Map<String, Kit> kitMap = new HashMap<String, Kit>(); private static List<Language> languageList = new ArrayList<Language>(200); //any TYPE added to pcClassTypeList is assumed be pre-tokenized @@ -1362,9 +1362,9 @@ * Get kit info * @return kit info */ - public static List<Kit> getKitInfo() + public static Map<String, Kit> getKitInfo() { - return kitList; + return kitMap; } /** @@ -1374,15 +1374,7 @@ */ public static Kit getKitKeyed(final String aKey) { - for ( Kit kit : kitList ) - { - if (kit.getKeyName().equals(aKey)) - { - return kit; - } - } - - return null; + return kitMap.get(aKey); } /** @@ -2336,7 +2328,7 @@ Logging.debugPrint("Feats=" + getUnmodifiableAbilityList("FEAT").size()); Logging.debugPrint("Equipment=" + EquipmentList.size()); Logging.debugPrint("WeaponProfs=" + getWeaponProfSize()); - Logging.debugPrint("Kits=" + kitList.size()); + Logging.debugPrint("Kits=" + kitMap.size()); Logging.debugPrint("Templates=" + templateList.size()); // @@ -2391,7 +2383,7 @@ deityList = new ArrayList<Deity>(); domainList = new ArrayList<Domain>(); EquipmentList.clearEquipmentMap(); - kitList = new ArrayList<Kit>(); + kitMap = new HashMap<String, Kit>(); languageList = new ArrayList<Language>(); EquipmentList.clearModifierList(); pcClassTypeList = new ArrayList<String>(); @@ -2733,7 +2725,6 @@ sortPObjectListByKey(getDomainList()); Collections.sort(getArmorProfList()); sortPObjectListByKey(getTemplateList()); - sortPObjectListByKey(EquipmentList.getModifierList()); sortPObjectListByKey(getLanguageList()); setD_sorted(true); } Modified: Trunk/pcgen/code/src/java/pcgen/core/Names.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Names.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/Names.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -374,7 +374,7 @@ { public boolean accept(final File dir, final String name) { - if (name.toLowerCase().endsWith(".nam")) + if (name.regionMatches(true, name.length() - 4, ".nam", 0, 4)) { return true; } Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -3004,7 +3004,7 @@ return false; } - for (String type : getSafeListFor(ListKey.TYPE)) { + for (String type : getTypeList(false)) { final ClassType aClassType = SettingsHandler.getGame() .getClassTypeByName(type); @@ -3961,7 +3961,7 @@ if (CRFormula != null) { wCRFormula = CRFormula; } else { - for (String type : getSafeListFor(ListKey.TYPE)) { + for (String type : getTypeList(false)) { final ClassType aClassType = SettingsHandler.getGame() .getClassTypeByName(type); @@ -4340,7 +4340,7 @@ public boolean hasXPPenalty() { if (XPPenalty.equals(DefaultTriState.DEFAULT)) { - for (String type : getSafeListFor(ListKey.TYPE)) { + for (String type : getTypeList(false)) { final ClassType aClassType = SettingsHandler.getGame() .getClassTypeByName(type); Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -32,7 +32,9 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -160,6 +162,8 @@ private URI sourceURI = null; + private Set<String> types = new LinkedHashSet<String>(); + /* ************ * Methods * ************/ @@ -1824,7 +1828,10 @@ { if (i < getMyTypeCount()) { - return getElementInList(ListKey.TYPE, i); + //Yes, this in inefficient... it's done rarely enough it's ok for now + //Best performance improvement to offset this would be to make Type + // in campaigns NOT order sensitive... + return new ArrayList<String>(types).get(i); } return null; @@ -1836,7 +1843,7 @@ */ public int getMyTypeCount() { - return getSafeSizeOfListFor(ListKey.TYPE); + return types.size(); } /** @@ -1862,7 +1869,7 @@ */ public String getType() { - return getTypeUsingFlag(false); + return CoreUtility.join(getTypeList(false), '.'); } /** @@ -1872,52 +1879,23 @@ * can have hidden types, which are currently Equipment, Feat and * Skill. * - * @param idx * @return false */ - boolean isTypeHidden(final int idx) + boolean isTypeHidden(final String type) { return false; } - /** - * - * @param bIgnoreHidden Flag to ignore "hidden" types. - * @return type - */ - public String getTypeUsingFlag(final boolean bIgnoreHidden) - { - final int x = getMyTypeCount(); - - if (x == 0) - { - return ""; - } - - final StringBuffer aType = new StringBuffer(x * 5); - - for (int i = 0; i < x; ++i) - { - if (bIgnoreHidden && isTypeHidden(i)) - { - continue; - } - aType.append((i == 0) ? "" : ".").append(getMyType(i)); - } - - return aType.toString(); - } - public List<String> getTypeList(final boolean visibleOnly) { - final List<String> ret = getSafeListFor(ListKey.TYPE); + final List<String> ret = new ArrayList<String>(types); if (visibleOnly ) { - for ( int i = getMyTypeCount(); i >= 0; --i ) + for ( String type : types ) { - if ( isTypeHidden(i) ) + if ( isTypeHidden(type) ) { - ret.remove(i); + ret.remove(type); } } } @@ -1944,7 +1922,7 @@ myType = aType.toUpperCase(); } - return containsInList(ListKey.TYPE, myType); + return types.contains(myType); } /** @@ -1977,7 +1955,7 @@ { clearMyType(); } - else if (!containsInList(ListKey.TYPE, aType)) + else if (!types.contains(aType)) { doGlobalTypeUpdate(aType); addMyType(aType); @@ -3436,7 +3414,7 @@ */ void addMyType(final String myType) { - listChar.addToListFor(ListKey.TYPE, myType); + types.add(myType); } /* @@ -3662,7 +3640,7 @@ protected void clearMyType() { - listChar.removeListFor(ListKey.TYPE); + types.clear(); } /** @@ -3738,7 +3716,7 @@ protected void removeMyType(final String myType) { - listChar.removeFromListFor(ListKey.TYPE, myType); + types.remove(myType); } /** @@ -5012,7 +4990,7 @@ return iBonus * iTimes; } - + // public List<BonusObj> getActiveBonuses(final PlayerCharacter aPC, final String aBonusType, final String aBonusName) // { // if (!PrereqHandler.passesAll(this.getPreReqList(), aPC, this)) Modified: Trunk/pcgen/code/src/java/pcgen/core/PObjectDataStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObjectDataStore.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/PObjectDataStore.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -22,7 +22,6 @@ */ package pcgen.core; -import pcgen.core.utils.ListKey; import pcgen.util.Logging; import java.util.*; @@ -178,7 +177,7 @@ // We used to add all types together here. // Modifying to add each one seperately, so we can // treat correctly the Weapon Proficiency Types - for (Iterator<String> e = obj.getSafeListFor(ListKey.TYPE).iterator(); e.hasNext();) + for (Iterator<String> e = obj.getTypeList(false).iterator(); e.hasNext();) { final String aString = e.next(); Map<String, T> typedByName = byType.get(aString); @@ -284,14 +283,15 @@ public void removeNamed(final String name) { final T object = getNamed(name); - byUpperName.remove(object.getDisplayName().toUpperCase()); + String upperName = object.getDisplayName().toUpperCase(); + byUpperName.remove(upperName); byKey.remove(object.getKeyName().toUpperCase()); final Map<String, T> typedByName = byType.get(object.getType().toUpperCase()); if (typedByName != null) { - typedByName.remove(object.getDisplayName().toUpperCase()); + typedByName.remove(upperName); } clearVariableNameCache(); Modified: Trunk/pcgen/code/src/java/pcgen/core/Skill.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Skill.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/Skill.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -579,7 +579,7 @@ */ public Iterator<String> getSubtypeIterator() { - final Iterator<String> it = getSafeListFor(ListKey.TYPE).iterator(); + final Iterator<String> it = getTypeList(false).iterator(); if (it.hasNext()) { @@ -768,7 +768,7 @@ "[\\(\\)]"); if (choiceParts.length >= 2) { - reqType = choiceParts[1].toUpperCase(); + reqType = choiceParts[1]; } } @@ -1097,9 +1097,8 @@ bonus += aPC.getTotalBonusTo("SKILL", keyName); // loop through all current skill types checking for boni - for (int typesForBonus = 0; typesForBonus < getMyTypeCount(); typesForBonus++) + for (String singleType : getTypeList(false)) { - final String singleType = getMyType(typesForBonus); bonus += aPC.getTotalBonusTo("SKILL", "TYPE." + singleType); } @@ -1115,9 +1114,8 @@ bonus += aPC.getTotalBonusTo("CSKILL", keyName); //loop through all current skill types checking for boni - for (int typesForBonus = 0; typesForBonus < getMyTypeCount(); typesForBonus++) + for (String singleType : getTypeList(false)) { - final String singleType = getMyType(typesForBonus); bonus += aPC.getTotalBonusTo("CSKILL", "TYPE." + singleType); } @@ -1129,9 +1127,8 @@ bonus += aPC.getTotalBonusTo("CCSKILL", keyName); //loop through all current skill types checking for boni - for (int typesForBonus = 0; typesForBonus < getMyTypeCount(); typesForBonus++) + for (String singleType : getTypeList(false)) { - final String singleType = getMyType(typesForBonus); bonus += aPC.getTotalBonusTo("CCSKILL", "TYPE." + singleType); } @@ -1609,9 +1606,8 @@ appendBonusDesc(bonusDetails, bonus, "OTHER"); // loop through all current skill types checking for boni - for (int typesForBonus = 0; typesForBonus < getMyTypeCount(); typesForBonus++) + for (String singleType : getTypeList(false)) { - final String singleType = getMyType(typesForBonus); bonus = aPC.getTotalBonusTo("SKILL", "TYPE." + singleType); appendBonusDesc(bonusDetails, bonus, "TYPE." + singleType); } @@ -1631,9 +1627,8 @@ appendBonusDesc(bonusDetails, bonus, "CSKILL"); //loop through all current skill types checking for boni - for (int typesForBonus = 0; typesForBonus < getMyTypeCount(); typesForBonus++) + for (String singleType : getTypeList(false)) { - final String singleType = getMyType(typesForBonus); bonus = aPC.getTotalBonusTo("CSKILL", "TYPE." + singleType); appendBonusDesc(bonusDetails, bonus, "CSKILL"); } @@ -1648,9 +1643,8 @@ appendBonusDesc(bonusDetails, bonus, "CCSKILL"); //loop through all current skill types checking for boni - for (int typesForBonus = 0; typesForBonus < getMyTypeCount(); typesForBonus++) + for (String singleType : getTypeList(false)) { - final String singleType = getMyType(typesForBonus); bonus = aPC.getTotalBonusTo("CCSKILL", "TYPE." + singleType); appendBonusDesc(bonusDetails, bonus, "CCSKILL"); } @@ -1715,9 +1709,8 @@ public double getSkillRankBonusTo(PlayerCharacter aPC) { double bonus = aPC.getTotalBonusTo("SKILLRANK", getKeyName()); - for (int typesForBonus = 0; typesForBonus < getMyTypeCount(); ++typesForBonus) + for (String singleType : getTypeList(false)) { - final String singleType = getMyType(typesForBonus); bonus += aPC.getTotalBonusTo("SKILLRANK", "TYPE." + singleType); } @@ -1847,11 +1840,8 @@ List<PCStat> aList = new ArrayList<PCStat>(); if (Globals.getGameModeHasPointPool()) { - String aType; - for (int i = getMyTypeCount() - 1; i >= 0; --i) + for (String aType : this.getTypeList(false)) { - aType = getMyType(i); - List<PCStat> statList = SettingsHandler.getGame().getUnmodifiableStatList(); for (int idx = statList.size() - 1; idx >= 0; --idx) { @@ -1914,9 +1904,9 @@ return aList; } - boolean isTypeHidden(final int idx) + boolean isTypeHidden(final String type) { - return Globals.isSkillTypeHidden(getMyType(idx)); + return Globals.isSkillTypeHidden(type); } } Modified: Trunk/pcgen/code/src/java/pcgen/core/SystemCollections.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SystemCollections.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/SystemCollections.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -28,8 +28,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import pcgen.core.character.EquipSlot; import pcgen.core.system.LoadInfo; @@ -76,9 +78,9 @@ private static final Map<String, List<String>> locationMap = new HashMap<String, List<String>>(); private static final Map<String, List<PaperInfo>> paperInfoMap = new HashMap<String, List<PaperInfo>>(); private static final Map<String, List<String>> phobiaMap = new HashMap<String, List<String>>(); - private static final Map<String, List<String>> phraseMap = new HashMap<String, List<String>>(); + private static final Map<String, Set<String>> phraseMap = new HashMap<String, Set<String>>(); private static final Map<String, List<String>> speechMap = new HashMap<String, List<String>>(); - private static final Map<String, List<String>> traitMap = new HashMap<String, List<String>>(); + private static final Map<String, Set<String>> traitMap = new HashMap<String, Set<String>>(); private static final Map<String, List<EquipSlot>> equipSlotMap = new HashMap<String, List<EquipSlot>>(); private static final Map<String, LoadInfo> loadInfoMap = new HashMap<String, LoadInfo>(); private static final Map<String, Map<String, UnitSet>> unitSetMap = new HashMap<String, Map<String, UnitSet>>(); @@ -274,16 +276,16 @@ */ public static List<String> getUnmodifiablePhraseList() { - List<String> phraseList = phraseMap.get(SettingsHandler.getGame().getName()); - if (phraseList == null) + Set<String> phraseSet = phraseMap.get(SettingsHandler.getGame().getName()); + if (phraseSet == null) { - phraseList = phraseMap.get("*"); + phraseSet = phraseMap.get("*"); } - if (phraseList == null) + if (phraseSet == null) { - phraseList = Collections.emptyList(); + return Collections.emptyList(); } - return Collections.unmodifiableList(phraseList); + return new ArrayList<String>(phraseSet); } /** @@ -311,16 +313,16 @@ */ public static List<String> getUnmodifiableTraitList() { - List<String> traitList = traitMap.get(SettingsHandler.getGame().getName()); + Set<String> traitList = traitMap.get(SettingsHandler.getGame().getName()); if (traitList == null) { traitList = traitMap.get("*"); } if (traitList == null) { - traitList = Collections.emptyList(); + return Collections.emptyList(); } - return Collections.unmodifiableList(traitList); + return new ArrayList<String>(traitList); } //BirthplaceList @@ -626,16 +628,13 @@ */ public static void addToPhraseList(final String phrase, final String gameMode) { - List<String> phraseList = phraseMap.get(gameMode); + Set<String> phraseList = phraseMap.get(gameMode); if (phraseList == null) { - phraseList = new ArrayList<String>(); + phraseList = new HashSet<String>(); phraseMap.put(gameMode, phraseList); } - if (!phraseList.contains(phrase)) - { - phraseList.add(phrase); - } + phraseList.add(phrase); } //SPEECHLIST @@ -669,17 +668,13 @@ */ public static void addToTraitList(final String trait, final String gameMode) { - List<String> traitList = traitMap.get(gameMode); + Set<String> traitList = traitMap.get(gameMode); if (traitList == null) { - traitList = new ArrayList<String>(); + traitList = new HashSet<String>(); traitMap.put(gameMode, traitList); } - if (!traitList.contains(trait)) - { - traitList.add(trait); - } - + traitList.add(trait); } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -32,13 +32,9 @@ import pcgen.util.Logging; import java.util.ArrayList; -import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.StringTokenizer; -import java.util.jar.JarFile; -import java.util.jar.JarEntry; -import java.util.zip.ZipException; /** * <code>Bonus</code> @@ -49,7 +45,6 @@ { static final int BONUS_UNDEFINED = -1; - private static boolean objectListInitialized; private static int bonusTagMapNum = 0; private static final HashMap<String, bonusMapEntry> BONUS_TAG_MAP = new HashMap<String, bonusMapEntry>(); @@ -65,8 +60,6 @@ */ public static int getBonusTypeFromName(final String bonusName) { - makeObjectList(); - bonusMapEntry bEntry = BONUS_TAG_MAP.get(bonusName); if (bEntry == null) { @@ -186,21 +179,21 @@ */ public static BonusObj newBonus(final String bonusString) { - makeObjectList(); - final int typeOfBonus; int aLevel = -1; StringTokenizer aTok = new StringTokenizer(bonusString, Constants.PIPE); - if (aTok.countTokens() < 3 && bonusString.indexOf('%') < 0) + if ((bonusString.indexOf(Constants.PIPE) == bonusString + .lastIndexOf(Constants.PIPE)) + && bonusString.indexOf('%') < 0) { Logging.errorPrint("Illegal bonus format: " + bonusString); return null; } - String bonusName = aTok.nextToken().toUpperCase(); + String bonusName = aTok.nextToken(); try { @@ -219,6 +212,10 @@ { bonusName = aTok.nextToken().toUpperCase(); } + else + { + bonusName = bonusName.toUpperCase(); + } int equalOffset = -1; @@ -284,23 +281,21 @@ } else if (aString.startsWith("TYPE=") || aString.startsWith("TYPE.")) { - String bonusType = aString.substring(5).toUpperCase(); - if ( bonusType.indexOf('.') != -1 ) + String bonusType = aString.substring(5); + int dotLoc = bonusType.indexOf('.'); + if ( dotLoc != -1 ) { - final String[] splits = bonusType.split("\\."); - final String stackingFlag = splits[1]; + final String stackingFlag = bonusType.substring(dotLoc + 1); // TODO - Need to reset bonusType to exclude this but // there is too much dependancy on it being there // built into the code. - if ( stackingFlag.equals("REPLACE") ) //$NON-NLS-1$ + if ( stackingFlag.startsWith("REPLACE") ) //$NON-NLS-1$ { aBonus.setStackingFlag( StackType.REPLACE ); -// bonusType = splits[0]; } - else if ( stackingFlag.equals("STACK") ) //$NON-NLS-1$ + else if ( stackingFlag.startsWith("STACK") ) //$NON-NLS-1$ { aBonus.setStackingFlag( StackType.STACK ); -// bonusType = splits[0]; } } final boolean result = aBonus.addType(bonusType); @@ -371,83 +366,6 @@ return null; } - private static void makeObjectList() - { - if (!objectListInitialized) - { - objectListInitialized = true; // for better or worse, we will only do this once - - final String jarNames = getJarName(); - if (jarNames == null) - { - Logging.errorPrint("jar name is null"); - return; - } - - // Karianna - Much better fix suggested by Byngl - final StringTokenizer jarTok = new StringTokenizer(jarNames, System.getProperty("path.separator")); - while(jarTok.hasMoreTokens()) - { - final String jarName = jarTok.nextToken(); - // - // Must be a .jar file or ignore it - // - if (!jarName.toLowerCase().endsWith(".jar")) - { - continue; - } - - boolean bAdded = false; - try - { - final JarFile jarfile = new JarFile(jarName); - for (Enumeration<JarEntry> e = jarfile.entries() ; e.hasMoreElements() ;) - { - String jarEntry = e.nextElement().toString(); - if (jarEntry.startsWith("pcgen/core/bonus/") && jarEntry.endsWith(".class")) - { - jarEntry = jarEntry.substring(17); - jarEntry = jarEntry.substring(0, jarEntry.length() - 6); - - try - { - final Class jarClass = Class.forName( - new StringBuffer().append(Bonus.class - .getPackage().getName()) - .append('.') - .append(jarEntry).toString()); - bAdded = addBonusClass(jarClass, jarEntry); - } - catch (Exception exc) - { - // TODO Handle Exception - } - } - } - } - catch (ZipException ze) - { - Logging.errorPrint("Jar file '" + jarName - + "' could not be loaded because: " + ze.getMessage()); - } - catch (Exception exc) - { - Logging.errorPrint("Failed to load jar file '" + jarName - + "' due to:", exc); - } - - // - // Stop looking after we've found a file with the desired classes - // XXX: do we really want to do this, or would it be better to allow multiple .jar files to define bonus entities? - // - if (bAdded) - { - break; - } - } - } - } - /** * Add a CLASS via a BONUS * @param bonusClass Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/ProficiencyChoiceManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/ProficiencyChoiceManager.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/ProficiencyChoiceManager.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -164,7 +164,7 @@ for ( WeaponProf wp : pcHas ) { // may have martial and exotic, etc. - if (wp.getSafeListFor(ListKey.TYPE).size() != 1) + if (wp.getMyTypeCount() != 1) { availableList.add(wp); } Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/WeaponProfChoiceManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/WeaponProfChoiceManager.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/WeaponProfChoiceManager.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -81,9 +81,7 @@ while (choicesIt.hasNext()) { final String aString = choicesIt.next(); - final String ucString = aString.toUpperCase(); - - if ("LIST".equals(ucString)) + if ("LIST".equalsIgnoreCase(aString)) { for ( WeaponProf wp : aPc.getWeaponProfs() ) { @@ -98,7 +96,7 @@ } } } - else if (ucString.equals("DEITYWEAPON")) + else if ("DEITYWEAPON".equalsIgnoreCase(aString)) { if (aPc.getDeity() != null) { @@ -123,7 +121,7 @@ } } - else if (ucString.startsWith("SIZE.")) + else if ("SIZE.".regionMatches(true, 0, aString, 0, 5)) { final String profKey = aString.substring(7); if ((aPc.sizeInt() >= Globals.sizeInt(aString.substring(5, 6))) @@ -136,7 +134,7 @@ } } } - else if (ucString.startsWith("WSIZE.")) + else if ("WSIZE.".regionMatches(true, 0, aString, 0, 6)) { final StringTokenizer bTok = new StringTokenizer(aString, "."); bTok.nextToken(); // should be WSize @@ -270,7 +268,7 @@ } } } - else if (ucString.startsWith("SPELLCASTER.")) + else if ("SPELLCASTER.".regionMatches(true, 0, aString, 0, 12)) { // TODO this should not be hardcoded. String profKey = aString.substring(12); @@ -284,7 +282,8 @@ availableList.add(wp); } } - else if (ucString.startsWith("TYPE.") || ucString.startsWith("TYPE=")) + else if ("TYPE.".regionMatches(true, 0, aString, 0, 5) || + "TYPE=".regionMatches(true, 0, aString, 0, 5)) { String sString = aString.substring(5); boolean adding = true; @@ -356,7 +355,7 @@ else { String profKey = aString; - if (ucString.startsWith("ADD.")) + if ("ADD.".regionMatches(true, 0, aString, 0, 4)) { profKey = aString.substring(4); } Modified: Trunk/pcgen/code/src/java/pcgen/core/prereq/PreEquippedTester.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/prereq/PreEquippedTester.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/prereq/PreEquippedTester.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -76,7 +76,7 @@ } else if (aString.startsWith("TYPE=") || aString.startsWith("TYPE.")) //$NON-NLS-1$ //$NON-NLS-2$ { - StringTokenizer tok = new StringTokenizer(aString.substring(5).toUpperCase(), "."); + StringTokenizer tok = new StringTokenizer(aString.substring(5), "."); boolean match = false; if (tok.hasMoreTokens()) { @@ -102,14 +102,13 @@ } else //not a TYPE string { - final String eqName = eq.getName().toUpperCase(); + final String eqName = eq.getName(); if (aString.indexOf('%') >= 0) { //handle wildcards (always assume they // end the line) final int percentPos = aString.indexOf('%'); - final String substring = aString.substring(0, percentPos).toUpperCase(); - if ((eqName.startsWith(substring))) + if (eqName.regionMatches(true, 0, aString, 0, percentPos)) { isEquipped = true; break; Modified: Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -46,7 +46,6 @@ import pcgen.core.prereq.PrereqHandler; import pcgen.core.prereq.Prerequisite; import pcgen.core.utils.CoreUtility; -import pcgen.core.utils.ListKey; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; import pcgen.util.Logging; @@ -425,7 +424,7 @@ if (spellType.equals("ALL")) { - for (String aType : getSafeListFor(ListKey.TYPE)) + for (String aType : getTypeList(false)) { dc += (int) aPC.getTotalBonusTo("DC", "TYPE." + aType); } Modified: Trunk/pcgen/code/src/java/pcgen/core/utils/ListKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/utils/ListKey.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/core/utils/ListKey.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -130,8 +130,6 @@ public static final ListKey<String> TEMPLATES_ADDED = new ListKey<String>(); /** TEMP_BONUS - a ListKey */ public static final ListKey<BonusObj> TEMP_BONUS = new ListKey<BonusObj>(); - /** TYPE - a ListKey */ - public static final ListKey<String> TYPE = new ListKey<String>(); /** UDAM - a ListKey */ public static final ListKey<String> UDAM = new ListKey<String>(); /** UMULT - a ListKey */ Modified: Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -244,7 +244,7 @@ // if ((aEq.getEqModifierList(true).size() == 0) && (aEq.getEqModifierList(false).size() == 0)) { - for (EquipmentModifier eqMod : EquipmentList.getModifierList()) + for (EquipmentModifier eqMod : EquipmentList.getModifierCollection()) { if (!eqMod.getDisplayName().startsWith("EXCLUDEEQ")) { @@ -2206,7 +2206,7 @@ fireTableRowsDeleted(0, currentRowCount - 1); } - for (EquipmentModifier aEqMod : EquipmentList.getModifierList()) + for (EquipmentModifier aEqMod : EquipmentList.getModifierCollection()) { if (anEq.isVisible(aEqMod)) { Modified: Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -47,6 +47,7 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -186,7 +187,7 @@ } } - private void addSelections(JList lst, List<Kit> kits, List<Kit> excluded, PlayerCharacter aPlayerCharacter) + private void addSelections(JList lst, Collection<Kit> kits, List<Kit> excluded, PlayerCharacter aPlayerCharacter) { if ((kits == null) || (kits.size() == 0)) { @@ -253,7 +254,7 @@ scpSelected.setViewportView(lstSelected); final List<Kit> pcKitInfo = aPC.getKitInfo(); - addSelections(lstAvailable, Globals.getKitInfo(), pcKitInfo, aPC); + addSelections(lstAvailable, Globals.getKitInfo().values(), pcKitInfo, aPC); addSelections(lstSelected, pcKitInfo, null, aPC); if (lstAvailable.isSelectionEmpty() == false) Modified: Trunk/pcgen/code/src/java/pcgen/gui/LstConverter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/LstConverter.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/LstConverter.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -25,6 +25,7 @@ */ package pcgen.gui; +import pcgen.core.PObject; import pcgen.core.SettingsHandler; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; @@ -290,10 +291,11 @@ continue; } + List<PObject> checkList = SettingsHandler.getGame().getUnmodifiableCheckList(); if (bString.startsWith("PREFORT:")) { conversionWriter.write("PRECHECK:1," - + SettingsHandler.getGame().getUnmodifiableCheckList().get(0).toString().toUpperCase() + "=" + + checkList.get(0).toString().toUpperCase() + "=" + bString.substring(8)); continue; @@ -301,7 +303,7 @@ else if (bString.startsWith("PREREFLEX:")) { conversionWriter.write("PRECHECK:1," - + SettingsHandler.getGame().getUnmodifiableCheckList().get(1).toString().toUpperCase() + "=" + + checkList.get(1).toString().toUpperCase() + "=" + bString.substring(10)); continue; @@ -309,7 +311,7 @@ else if (bString.startsWith("PREWILL:")) { conversionWriter.write("PRECHECK:1," - + SettingsHandler.getGame().getUnmodifiableCheckList().get(2).toString().toUpperCase() + "=" + + checkList.get(2).toString().toUpperCase() + "=" + bString.substring(8)); continue; @@ -317,7 +319,7 @@ else if (bString.startsWith("PREFORTBASE:")) { conversionWriter.write("PRECHECKBASE:1," - + SettingsHandler.getGame().getUnmodifiableCheckList().get(0).toString().toUpperCase() + "=" + + checkList.get(0).toString().toUpperCase() + "=" + bString.substring(12)); continue; @@ -325,7 +327,7 @@ else if (bString.startsWith("PREREFLEXBASE:")) { conversionWriter.write("PRECHECKBASE:1," - + SettingsHandler.getGame().getUnmodifiableCheckList().get(1).toString().toUpperCase() + "=" + + checkList.get(1).toString().toUpperCase() + "=" + bString.substring(14)); continue; @@ -333,7 +335,7 @@ else if (bString.startsWith("PREWILLBASE:")) { conversionWriter.write("PRECHECKBASE:1," - + SettingsHandler.getGame().getUnmodifiableCheckList().get(2).toString().toUpperCase() + "=" + + checkList.get(2).toString().toUpperCase() + "=" + bString.substring(12)); continue; @@ -506,7 +508,7 @@ bString = getFormulaFor(1, bString); bString = "BONUS:CHECKS|BASE." - + SettingsHandler.getGame().getUnmodifiableCheckList().get(0).toString().toUpperCase() + + checkList.get(0).toString().toUpperCase() + "|" + bString; } else if ((field == 10) || (!hasTagless && bString.startsWith("REFLEXCHECK:")) @@ -525,7 +527,7 @@ bString = getFormulaFor(1, bString); bString = "BONUS:CHECKS|BASE." - + SettingsHandler.getGame().getUnmodifiableCheckList().get(1).toString().toUpperCase() + + checkList.get(1).toString().toUpperCase() + "|" + bString; } else if ((field == 11) || (!hasTagless && bString.startsWith("WILLPOWERCHECK:")) @@ -544,7 +546,7 @@ bString = getFormulaFor(1, bString); bString = "BONUS:CHECKS|BASE." - + SettingsHandler.getGame().getUnmodifiableCheckList().get(2).toString().toUpperCase() + + checkList.get(2).toString().toUpperCase() + "|" + bString; } Modified: Trunk/pcgen/code/src/java/pcgen/gui/MainSource.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/MainSource.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/MainSource.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -45,6 +45,8 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.TreeSet; import javax.swing.BorderFactory; import javax.swing.DefaultListSelectionModel; @@ -1142,7 +1144,7 @@ typePubSetRoot = new PObjectNode(); typePubFmtSetRoot = new PObjectNode(); - List<String> aList = new ArrayList<String>(); //TYPE list + Set<String> aList = new TreeSet<String>(); //TYPE list for (Campaign aCamp : Globals.getCampaignList()) { @@ -1150,51 +1152,51 @@ { if (aCamp.getMyTypeCount() > 0) { - if (!aList.contains(aCamp.getMyType(0))) - { - aList.add(aCamp.getMyType(0)); //TYPE[0] = Publisher - } + aList.add(aCamp.getMyType(0)); //TYPE[0] = Publisher } } } - Collections.sort(aList); - // All non-typed/screwed-up items will end up in an "Other" node - if (!aList.contains("Other")) - { - aList.add("Other"); - } + aList.add("Other"); - PObjectNode[] p1 = new PObjectNode[aList.size()]; - PObjectNode[] p2 = new PObjectNode[aList.size()]; - PObjectNode[] p3 = new PObjectNode[aList.size()]; + int size = aList.size(); + PObjectNode[] p1 = new PObjectNode[size]; + PObjectNode[] p2 = new PObjectNode[size]; + PObjectNode[] p3 = new PObjectNode[size]; - for (int i = 0; i < aList.size(); ++i) + int arrayIdx = 0; + for (String s : aList) { - p1[i] = new PObjectNode(); - p1[i].setItem(aList.get(i)); - p1[i].setParent(typePubRoot); - p2[i] = new PObjectNode(); - p2[i].setItem(aList.get(i)); - p2[i].setParent(typePubSetRoot); - p3[i] = new PObjectNode(); - p3[i].setItem(aList.get(i)); - p3[i].setParent(typePubFmtSetRoot); + PObjectNode pon = new PObjectNode(); + pon.setItem(s); + pon.setParent(typePubRoot); + p1[arrayIdx] = pon; + + pon = new PObjectNode(); + pon.setItem(s); + pon.setParent(typePubSetRoot); + p2[arrayIdx] = pon; + + pon = new PObjectNode(); + pon.setItem(s); + pon.setParent(typePubFmtSetRoot); + p3[arrayIdx] = pon; + + arrayIdx++; } typePubRoot.setChildren(p1); typePubSetRoot.setChildren(p2); typePubFmtSetRoot.setChildren(p3); - for (int i = 0; i < p2.length; ++i) + for (PObjectNode pon : p2) { aList.clear(); - for (int j = 0; j < Globals.getCampaignList().size(); ++j) + for (Campaign bCamp : Globals.getCampaignList()) { - final Campaign bCamp = Globals.getCampaignList().get(j); - final String topType = p2[i].toString(); + final String topType = pon.toString(); if (!bCamp.isType(topType)) { @@ -1205,33 +1207,27 @@ { if (bCamp.isGameMode(allowedModes)) { - if (!aList.contains(bCamp.getMyType(2))) - { - aList.add(bCamp.getMyType(2)); //TYPE[2] = Setting - } + aList.add(bCamp.getMyType(2)); //TYPE[2] = Setting } } } - Collections.sort(aList); - for (String aString : aList) { PObjectNode d = new PObjectNode(); - d.setParent(p2[i]); - p2[i].addChild(d); + d.setParent(pon); + pon.addChild(d); d.setItem(aString); } } - for (int i = 0; i < p3.length; ++i) + for (PObjectNode pon : p3) { aList.clear(); - for (int j = 0; j < Globals.getCampaignList().size(); ++j) + for (Campaign bCamp : Globals.getCampaignList()) { - final Campaign bCamp = Globals.getCampaignList().get(j); - final String topType = p3[i].toString(); + final String topType = pon.toString(); if (!bCamp.isType(topType)) { @@ -1242,32 +1238,26 @@ { if (bCamp.isGameMode(allowedModes)) { - if (!aList.contains(bCamp.getMyType(1))) - { - aList.add(bCamp.getMyType(1)); //TYPE[1] = Format - } + aList.add(bCamp.getMyType(1)); //TYPE[1] = Format } } } - Collections.sort(aList); - for (String aString : aList) { PObjectNode d = new PObjectNode(aString); - p3[i].addChild(d); + pon.addChild(d); } - List<PObjectNode> p4 = p3[i].getChildren(); + List<PObjectNode> p4 = pon.getChildren(); for (int k = 0; (p4 != null) && (k < p4.size()); ++k) { final PObjectNode p4node = p4.get(k); aList.clear(); - for (int m = 0; m < Globals.getCampaignList().size(); ++m) + for (Campaign cCamp : Globals.getCampaignList()) { - final Campaign cCamp = Globals.getCampaignList().get(m); final String pubType = p4node.getParent().toString(); final String formatType = p4node.toString(); @@ -1280,16 +1270,11 @@ { if (cCamp.isGameMode(allowedModes)) { - if (!aList.contains(cCamp.getMyType(2))) - { - aList.add(cCamp.getMyType(2)); //TYPE[2] = Setting - } + aList.add(cCamp.getMyType(2)); //TYPE[2] = Setting } } } - Collections.sort(aList); - for (String aString : aList) { PObjectNode d = new PObjectNode(aString); Modified: Trunk/pcgen/code/src/java/pcgen/gui/PcgFilter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/PcgFilter.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/PcgFilter.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -56,13 +56,7 @@ return true; } - String fileName = f.getName().toUpperCase(); - - if (fileName != null) - { - return fileName.endsWith("PCG"); - } - - return false; + String fileName = f.getName(); + return fileName.regionMatches(true, fileName.length() - 3, "pcg", 0, 3); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/PcpFilter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/PcpFilter.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/PcpFilter.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -56,13 +56,7 @@ return true; } - String fileName = f.getName().toUpperCase(); - - if (fileName != null) - { - return fileName.endsWith("PCP"); - } - - return false; + String fileName = f.getName(); + return fileName.regionMatches(true, fileName.length() - 3, "pcp", 0, 3); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/PersistenceObserver.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/PersistenceObserver.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/PersistenceObserver.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -29,7 +29,8 @@ import pcgen.core.PObject; import javax.swing.SwingUtilities; -import java.net.URL; + +import java.net.URI; import java.util.Observable; import java.util.Observer; @@ -51,15 +52,15 @@ */ public void update(Observable o, Object arg) { - if (arg instanceof URL) + if (arg instanceof URI) { setCurrentFileCount(getCurrentFileCount()+1); - final URL url = (URL) arg; + final URI uri = (URI) arg; Runnable doWork = new Runnable() { public void run() { - dialog.setCurrentFile(url.toString()); + dialog.setCurrentFile(uri.toString()); } }; SwingUtilities.invokeLater(doWork); Modified: Trunk/pcgen/code/src/java/pcgen/gui/SplashScreen.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/SplashScreen.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/SplashScreen.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -21,7 +21,6 @@ package pcgen.gui; import pcgen.gui.utils.IconUtilitities; -import pcgen.gui.utils.Utility; import javax.swing.ImageIcon; import javax.swing.JLabel; @@ -33,7 +32,6 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; -import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.net.URL; Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -153,29 +153,25 @@ { final PCClass obj = (PCClass) e.next(); - for (int i = obj.getMyTypeCount(); i > 0;) + for (String type : obj.getTypeList(false)) { - aString = obj.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - if (!availableList.contains(aString)) + if (!availableList.contains(type)) { - availableList.add(aString); + availableList.add(type); } } } } // remove this class's type from the available list and place into selected list - for (int i = thisPObject.getMyTypeCount(); i > 0;) + for (String type : thisPObject.getTypeList(false)) { - aString = thisPObject.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - selectedList.add(aString); - availableList.remove(aString); + selectedList.add(type); + availableList.remove(type); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditUtil.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditUtil.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditUtil.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -78,15 +78,13 @@ { String aString; - for (int i = pobj.getMyTypeCount(); i > 0;) + for (String type : pobj.getTypeList(false)) { - aString = pobj.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - if (!l.contains(aString)) + if (!l.contains(type)) { - l.add(aString); + l.add(type); } } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -2115,7 +2115,7 @@ addVariables(availableVariableList, Globals.getUnmodifiableAbilityList("FEAT")); //TODO this list is a list of Ability objects, unfortunately in a List<? extends Categorisable>. Don't know how to typesafe this. JK070101 addVariables(availableVariableList, Globals.getAllRaces()); addVariables(availableVariableList, Globals.getSkillList()); - addVariables(availableVariableList, EquipmentList.getModifierList()); + addVariables(availableVariableList, EquipmentList.getModifierCollection()); addVariables(availableVariableList, Globals.getTemplateList()); addVariables(availableVariableList, Globals.getAllCompanionMods()); Collections.sort(availableVariableList); @@ -2240,9 +2240,9 @@ availableClassCrossClassList.add(aString); } - for (int i = 0, x = aSkill.getMyTypeCount(); i < x; ++i) + for (String type : aSkill.getTypeList(false)) { - aString = "TYPE." + aSkill.getMyType(i); + aString = "TYPE." + type; if (!availableClassCrossClassList.contains(aString)) { Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/FeatBasePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/FeatBasePanel.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/FeatBasePanel.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -296,29 +296,25 @@ { final Ability anAbility = (Ability) e.next(); - for (int i = anAbility.getMyTypeCount(); i > 0;) + for (String type : anAbility.getTypeList(false)) { - aString = anAbility.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - if (!availableList.contains(aString)) + if (!availableList.contains(type)) { - availableList.add(aString); + availableList.add(type); } } } } // remove this feat's type from the available list and place into selected list - for (int i = thisFeat.getMyTypeCount(); i > 0;) + for (String type : thisFeat.getTypeList(false)) { - aString = thisFeat.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - selectedList.add(aString); - availableList.remove(aString); + selectedList.add(type); + availableList.remove(type); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/LanguageBasePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/LanguageBasePanel.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/LanguageBasePanel.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -104,15 +104,13 @@ { final Language aLanguage = (Language) e.next(); - for (int i = aLanguage.getMyTypeCount(); i > 0;) + for (String type : aLanguage.getTypeList(false)) { - aString = aLanguage.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - if (!availableList.contains(aString)) + if (!availableList.contains(type)) { - availableList.add(aString); + availableList.add(type); } } } @@ -121,14 +119,12 @@ // // remove this language's type from the available list and place into selected list // - for (int i = thisLanguage.getMyTypeCount(); i > 0;) + for (String type : thisLanguage.getTypeList(false)) { - aString = thisLanguage.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - selectedList.add(aString); - availableList.remove(aString); + selectedList.add(type); + availableList.remove(type); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java 2007-02-10 15:58:05 UTC (rev 2134) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java 2007-02-10 16:55:15 UTC (rev 2135) @@ -463,29 +463,25 @@ for ( final Race race : Globals.getAllRaces() ) { - for (int i = race.getMyTypeCount(); i > 0;) + for (String type : race.getTypeList(false)) { - aString = race.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - if (!availableList.contains(aString)) + if (!availableList.contains(type)) { - availableList.add(aString); + availableList.add(type); } } } } // remove this race's type from the available list and place into selected list - for (int i = thisRace.getMyTypeCount(); i > 0;) + for (String type : thisRace.getTypeList(false)) { - aString = thisRace.getMyType(--i); - - if (!aString.equals(Constants.s_CUSTOM)) + if (!type.equals(Constants.s_CUSTOM)) { - selectedList.add(aString); - availableList.remove(... [truncated message content] |