From: <arv...@us...> - 2006-09-16 15:35:06
|
Revision: 1390 http://svn.sourceforge.net/pcgen/?rev=1390&view=rev Author: arvoreen Date: 2006-09-16 08:34:38 -0700 (Sat, 16 Sep 2006) Log Message: ----------- [ pcgen-Bugs-1377052 ] REACH for weapons not defined and not working correctly Add new REACHMULT token for equipment. Formula to calculate reach is now REACH:(RACEREACH+(max(0,EQUIPREACH-5)))*REACHMULT Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/Equipment.java Trunk/pcgen/code/src/java/pcgen/core/WeaponEquipment.java Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/lsttokens/equipment/ReachMultToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/Equipment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2006-09-16 07:19:40 UTC (rev 1389) +++ Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2006-09-16 15:34:38 UTC (rev 1390) @@ -2151,6 +2151,34 @@ } /** + * Sets the reach multiplier attribute of the Equipment object + * @param i the new reach multiplier + */ + public void setReachMult(int i) + { + if ( theWeaponStats == null ) + { + theWeaponStats = new WeaponEquipment(this); + } + theWeaponStats.setReachMult(i); + } + + /** + * Gets the reach multiplier attribute of the Equipment Object + * + * @return the reach multiplier value + */ + public int getReachMult() + { + if ( theWeaponStats != null ) + { + return theWeaponStats.getReachMult(); + } + return 0; + } + + + /** * Set the remaining charges * @param remainingCharges */ Modified: Trunk/pcgen/code/src/java/pcgen/core/WeaponEquipment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/WeaponEquipment.java 2006-09-16 07:19:40 UTC (rev 1389) +++ Trunk/pcgen/code/src/java/pcgen/core/WeaponEquipment.java 2006-09-16 15:34:38 UTC (rev 1390) @@ -1,11 +1,16 @@ package pcgen.core; +import java.util.ArrayList; +import java.util.List; + import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; import pcgen.util.Delta; -import java.util.List; -import java.util.ArrayList; +/** + * WeaponEquipment class handles all weapon related equipment details + * + */ public class WeaponEquipment implements Cloneable { private Equipment theEquipment; @@ -18,6 +23,8 @@ private String theWieldString = ""; private boolean hasWield = false; private int theReach = 0; + private int theReachMult = 1; + /** if is true a BAB of 13 yields 13/8/3, if false, merely 13. */ private boolean doAttacksProgress = true; @@ -25,11 +32,20 @@ private String theAltCritRange = ""; private int theAltCritMult = 0; + /** + * Create a new WeaponEqupiment instance owned by a given Equipment object + * @param anOwner the new Equipment owner + */ public WeaponEquipment(final Equipment anOwner) { - theEquipment = anOwner; + super(); + setOwner(anOwner); } - + + /** + * Set a new Equipment as owner of this WeaponEquipment object + * @param anOwner the current + */ public void setOwner( final Equipment anOwner ) { theEquipment = anOwner; @@ -126,11 +142,23 @@ return getDamage(aPC, true); } + /** + * Returns the damage attribute of the equipment when wielded in + * an alternate hand + * + * @param aPC + * @return the damage value + */ public String getAltDamage(final PlayerCharacter aPC) { return getDamage(aPC, false); } + /** + * Set the alternate damage for a weapon + * + * @param anAltDamage the new altDamage value + */ public void setAltDamage(final String anAltDamage) { theAltDamage = anAltDamage; @@ -261,13 +289,17 @@ /** * Sets the critRange attribute of the Equipment object * - * @param aString The new critRange value + * @param aCritRange The new critRange value */ public void setCritRange(final String aCritRange) { theCritRange = aCritRange; } + /** + * Set the altCritRange of the Equipment object + * @param aCritRange the new altCritRange value + */ public void setAltCritRange(final String aCritRange) { theAltCritRange = aCritRange; @@ -325,13 +357,18 @@ /** * Set damage (this is used to overide default equipment) * - * @param aString The new damage value + * @param aDamageMod The new damage value **/ public void setDamageMod(final String aDamageMod) { theDamageMod = aDamageMod; } + /** + * Returns the range of the weapon + * + * @return the weapon range + */ public Integer getRange() { return theRange; @@ -746,5 +783,24 @@ return doAttacksProgress; } + /** + * Sets the reach multiplier for the equipment + * + * @param i the new reach multiplier value + */ + public void setReachMult(int i) + { + theReachMult = i; + } + /** + * Returns the reach multiplier for the equipment + * @return the reach multiplier value + */ + public int getReachMult() + { + return theReachMult; + } + + } Modified: Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java 2006-09-16 07:19:40 UTC (rev 1389) +++ Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java 2006-09-16 15:34:38 UTC (rev 1390) @@ -1030,13 +1030,15 @@ /** * Get reach token - * @param pc - * @param eq + * Formula is as follows: + * REACH:(RACEREACH+(max(0,EQUIPREACH-5)))*EQUIPREACHMULT + * @param pc the player + * @param eq the equipment * @return reach token */ public static int getReachToken(PlayerCharacter pc, Equipment eq) { - return ReachToken.getReachToken(pc) + eq.getReach(); + return (ReachToken.getReachToken(pc) + Math.max(eq.getReach()-5,0)) * eq.getReachMult(); } /** Added: Trunk/pcgen/code/src/java/plugin/lsttokens/equipment/ReachMultToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/equipment/ReachMultToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/equipment/ReachMultToken.java 2006-09-16 15:34:38 UTC (rev 1390) @@ -0,0 +1,24 @@ +package plugin.lsttokens.equipment; + +import pcgen.core.Equipment; +import pcgen.persistence.lst.EquipmentLstToken; + +/** + * Deals with REACHMULT token + */ +public class ReachMultToken implements EquipmentLstToken { + + public String getTokenName() { + return "REACHMULT"; + } + + public boolean parse(Equipment eq, String value) { + try { + eq.setReachMult(Integer.parseInt(value)); + return true; + } + catch (NumberFormatException nfe) { + return false; + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2006-09-19 09:03:46
|
Revision: 1405 http://svn.sourceforge.net/pcgen/?rev=1405&view=rev Author: jdempsey Date: 2006-09-19 02:03:35 -0700 (Tue, 19 Sep 2006) Log Message: ----------- Correct compile error in change 1404 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/plugin/exporttokens/BonusListToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-09-19 04:20:38 UTC (rev 1404) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-09-19 09:03:35 UTC (rev 1405) @@ -43,7 +43,6 @@ import pcgen.core.bonus.Bonus; import pcgen.core.bonus.BonusObj; import pcgen.core.bonus.BonusUtilities; -import pcgen.core.bonus.TypedBonus; import pcgen.core.chooser.ChooserUtilities; import pcgen.core.levelability.LevelAbility; import pcgen.core.pclevelinfo.PCLevelInfo; Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/BonusListToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/BonusListToken.java 2006-09-19 04:20:38 UTC (rev 1404) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/BonusListToken.java 2006-09-19 09:03:35 UTC (rev 1405) @@ -26,7 +26,7 @@ package plugin.exporttokens; import pcgen.core.PlayerCharacter; -import pcgen.core.bonus.TypedBonus; +//import pcgen.core.bonus.TypedBonus; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <boo...@us...> - 2006-09-21 02:19:48
|
Revision: 1408 http://svn.sourceforge.net/pcgen/?rev=1408&view=rev Author: boomer70 Date: 2006-09-20 19:19:42 -0700 (Wed, 20 Sep 2006) Log Message: ----------- Fix for [ 1481697 ] Ampersand in Description Fields Causes Export Failure. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/NoteItem.java Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/NoteItem.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/NoteItem.java 2006-09-21 01:27:22 UTC (rev 1407) +++ Trunk/pcgen/code/src/java/pcgen/core/NoteItem.java 2006-09-21 02:19:42 UTC (rev 1408) @@ -22,7 +22,9 @@ */ package pcgen.core; +import pcgen.io.FileAccess; + /** * <code>NoteItem</code>. * @@ -59,7 +61,7 @@ */ public String getExportString(final String beforeName, final String afterName, final String beforeValue, final String afterValue) { - return beforeName + name + afterName + beforeValue + value + afterValue; + return beforeName + FileAccess.filterString(name) + afterName + beforeValue + FileAccess.filterString(value) + afterValue; } public int getId() Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java 2006-09-21 01:27:22 UTC (rev 1407) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java 2006-09-21 02:19:42 UTC (rev 1408) @@ -28,6 +28,7 @@ import pcgen.core.NoteItem; import pcgen.core.PlayerCharacter; import pcgen.io.ExportHandler; +import pcgen.io.FileAccess; import pcgen.io.exporttoken.Token; import java.util.ArrayList; @@ -120,11 +121,12 @@ { if ("ALL".equals(token)) { + // TODO - Why doesn't this handle value the same as the VALUE token sb.append(ni.getExportString(beforeHeader, afterHeader, beforeValue, afterValue)); } else if ("NAME".equals(token)) { - sb.append(ni.getName()); + sb.append(FileAccess.filterString(ni.getName())); } else if ("VALUE".equals(token)) { @@ -133,7 +135,7 @@ while (cTok.hasMoreTokens()) { sb.append(beforeValue); - sb.append(cTok.nextToken()); + sb.append(FileAccess.filterString(cTok.nextToken())); sb.append(afterValue); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-10-23 22:26:23
|
Revision: 1520 http://svn.sourceforge.net/pcgen/?rev=1520&view=rev Author: thpr Date: 2006-10-23 15:23:55 -0700 (Mon, 23 Oct 2006) Log Message: ----------- Stamp out warnings from Eclipse and FindBugs in plugin.* Does not include any attempt to provide or remove @Override Includes the following actions: Remove .toString() calls on items that are already Strings Add Generics to (most) Lists, Maps, etc. Often use Java 1.5 for loop to resolve Generics String += assignment in loops converted to use StringBuffer Remove useless == or != null checks Use Map.Entry in loops rather than key and Map.get(key) Prohibit (most) reassignment of parameters Number (Integer, Float) conversion to String via '+ ""' changed to .toString() methods Use List rather than Vector where possible Make Inner Classes static where possible Avoid useless object construction and dead local stores Make public static constants also final Remove useless '== true' checks in conditionals (If statements) Use Character.valueOf() not new Character() Eliminate useless imports Also, some code refactoring/reuse, through the creation of: CollectionUtilities.joinStringRepresentations (acts much the same as perl's join method) Potential 'significant' changes: Inlines to the previous assignment an otherwise useless .trim() call in WeaponSpecialPane.java Change File == null check to a .exists() check in EncounterPlugin.java and EnvironmentModel.java Changed a String != check to !string.equals(string2) check in Initiative.java Delete LanguagesToken.getLanguagesToken() as the intent reproduces List.subList() Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java Trunk/pcgen/code/src/java/pcgen/gui/utils/NonGuiChooserRadio.java Trunk/pcgen/code/src/java/pcgen/util/chooser/ChooserRadio.java Trunk/pcgen/code/src/java/plugin/bonustokens/AbilityPool.java Trunk/pcgen/code/src/java/plugin/bonustokens/Checks.java Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetModel.java Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetUtils.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/CharacterInfoTabPanel.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/charactersheet/gui/DetailsPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/DualListPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/EquipmentPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/MusicPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/NotesPanel.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PerDayPane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PreferencesDisplayPanel.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/RagePane.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SelectPanel.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/charactersheet/gui/WeaponSpecialPane.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/gui/NameGenPanel.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/List.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/Rule.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/RuleSet.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/VariableHashMap.java Trunk/pcgen/code/src/java/plugin/encounter/EncounterModel.java Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java Trunk/pcgen/code/src/java/plugin/encounter/EnvironmentModel.java Trunk/pcgen/code/src/java/plugin/encounter/RaceModel.java Trunk/pcgen/code/src/java/plugin/experience/ExperienceAdjusterPlugin.java Trunk/pcgen/code/src/java/plugin/experience/gui/AddDefeatedCombatant.java Trunk/pcgen/code/src/java/plugin/exporttokens/ACToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/AgeToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/AltHPToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/BonusListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/CasterLevelToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/ClassListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/DefenseToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/DeityToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/DescToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/EclToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/EqContainerToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/EqContainersToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/EqContainerwToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/EqSetToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/ExpToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FeatAllListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FeatAutoListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FeatPointsToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FollowerListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FollowerOfToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FollowerToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/FollowerTypeToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/GoldToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/HPRollToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/InitiativeModToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/LanguagesToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/LevelToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/MaxCCSkillLevelToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/MaxSkillLevelToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/MiscToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/MoveToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/PaperInfoToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/PoolToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/RaceSubTypeToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/RaceToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SizeModToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SkillListModsToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpecialAbilityToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpecialListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpellBookNameToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpellListBookToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/SpellMemToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/TempBonusToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/TemplateListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/TemplateToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/TotalLevelsToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/UnitSetToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/VFeatListToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/VisionToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/WeaponProfsToken.java Trunk/pcgen/code/src/java/plugin/initiative/AttackModel.java Trunk/pcgen/code/src/java/plugin/initiative/InitOutputter.java Trunk/pcgen/code/src/java/plugin/initiative/OpposedSkillModel.java Trunk/pcgen/code/src/java/plugin/initiative/XMLCombatant.java Trunk/pcgen/code/src/java/plugin/initiative/gui/AttackDialog.java Trunk/pcgen/code/src/java/plugin/initiative/gui/AutoSizingColumnModel.java Trunk/pcgen/code/src/java/plugin/initiative/gui/DamageDialog.java Trunk/pcgen/code/src/java/plugin/initiative/gui/DiceRollDialog.java Trunk/pcgen/code/src/java/plugin/initiative/gui/Initiative.java Trunk/pcgen/code/src/java/plugin/initiative/gui/OpposedCheckDialog.java Trunk/pcgen/code/src/java/plugin/initiative/gui/PreferencesDamagePanel.java Trunk/pcgen/code/src/java/plugin/initiative/gui/PreferencesMassiveDamagePanel.java Trunk/pcgen/code/src/java/plugin/initiative/gui/SavingThrowDialog.java Trunk/pcgen/code/src/java/plugin/initiative/gui/TableColumnInformation.java Trunk/pcgen/code/src/java/plugin/initiative/gui/Utils.java Trunk/pcgen/code/src/java/plugin/lsttokens/DrLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/SaLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/HidetypeToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/kit/GenderToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/kit/NameToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/method/BonusToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/check/ChecknameToken.java Trunk/pcgen/code/src/java/plugin/network/NetworkModel.java Trunk/pcgen/code/src/java/plugin/network/NetworkServer.java Trunk/pcgen/code/src/java/plugin/network/gui/PreferencesNetworkingPanel.java Trunk/pcgen/code/src/java/plugin/notes/gui/JIcon.java Trunk/pcgen/code/src/java/plugin/notes/gui/NotesTreeNode.java Trunk/pcgen/code/src/java/plugin/notes/gui/NotesView.java Trunk/pcgen/code/src/java/plugin/overland/gui/OverPanel.java Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerModel.java Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerPlugin.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreClassLevelMaxParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreFeatParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreLanguageParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreRaceParser.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreWeaponProfParser.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreApplyTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreArmorProfTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreArmorTypeTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDamageReductionTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreEquipTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreFeatTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreItemTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRaceTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRuleTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreShieldProfTester.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/java/plugin/pretokens/test/PreSpecialAbilityTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellBookTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellCastMemorizeTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellCastTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellDescriptorTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellSchoolSubTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellSchoolTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSubClassTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreTemplateTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreTypeTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreUnarmedAttackTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreVariableTester.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreApplyWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreHDWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PrePointBuyMethodWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSpellDescriptorWriter.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 Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/util/CollectionUtilities.java Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -855,7 +855,7 @@ aList = c.getSelectedList(); - if (c.getSelectedList().size() > 0) + if (aList.size() > 0) { final Object loc = aList.get(0); @@ -865,6 +865,10 @@ } else { + /* + * CONSIDER The generic type of aList above, this code is + * unreachable. - thpr 10/21/06 + */ eTargetSet = ((EqSetWrapper) loc).getEqSet(); eqTarget = eTargetSet.getItem(); rootSet = pc.getEquipSetByIdPath(eTargetSet.getIdPath()); @@ -1796,7 +1800,7 @@ c.setVisible(true); aList = c.getSelectedList(); - if (c.getSelectedList().size() > 0) + if (aList.size() > 0) { Object loc = aList.get(0); @@ -1807,6 +1811,10 @@ } else { + /* + * CONSIDER Considering the Generic type of aList, this + * else statement is unreachable - thpr 10/21/06 + */ eSet = ((EqSetWrapper) loc).getEqSet(); eqTarget = eSet.getItem(); Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -447,9 +447,10 @@ c.setMessageText(titleString); c.setVisible(true); - if (c.getSelectedList().size() > 0) + ArrayList<String> selectedList = c.getSelectedList(); + if (selectedList.size() > 0) { - String aI = (String) c.getSelectedList().get(0); + String aI = selectedList.get(0); repeatValue = aI; // need to parse the bonus.getValue() Modified: Trunk/pcgen/code/src/java/pcgen/gui/utils/NonGuiChooserRadio.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/utils/NonGuiChooserRadio.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/pcgen/gui/utils/NonGuiChooserRadio.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -77,7 +77,7 @@ /** * @see pcgen.util.chooser.ChooserRadio#getSelectedList() */ - public ArrayList getSelectedList() + public ArrayList<String> getSelectedList() { return null; } Added: Trunk/pcgen/code/src/java/pcgen/util/CollectionUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/CollectionUtilities.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/CollectionUtilities.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -0,0 +1,46 @@ +/* + * 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/pcgen/util/chooser/ChooserRadio.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/chooser/ChooserRadio.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/pcgen/util/chooser/ChooserRadio.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -59,7 +59,7 @@ * Get selected list * @return selected list */ - ArrayList getSelectedList(); + ArrayList<String> getSelectedList(); /** * Set the title Modified: Trunk/pcgen/code/src/java/plugin/bonustokens/AbilityPool.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/bonustokens/AbilityPool.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/bonustokens/AbilityPool.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -23,8 +23,6 @@ */ package plugin.bonustokens; -import java.util.Collection; - import pcgen.core.AbilityCategory; import pcgen.core.SettingsHandler; import pcgen.core.bonus.BonusObj; Modified: Trunk/pcgen/code/src/java/plugin/bonustokens/Checks.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/bonustokens/Checks.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/bonustokens/Checks.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -29,8 +29,6 @@ import pcgen.core.SettingsHandler; import pcgen.core.bonus.BonusObj; -import java.util.Iterator; - /** * <code>Checks</code> * @@ -69,10 +67,9 @@ else if ("ALL".equals(token)) { // Special case of: BONUS:CHECKS|ALL|x - for (Iterator ac = SettingsHandler.getGame().getUnmodifiableCheckList().iterator(); ac.hasNext();) + for (PObject check : SettingsHandler.getGame().getUnmodifiableCheckList()) { - aCheck = (PObject) ac.next(); - addBonusInfo(new CheckInfo(aCheck, isBase)); + addBonusInfo(new CheckInfo(check, isBase)); } return true; @@ -96,7 +93,7 @@ /** * Deals with the CheckInfo */ - public class CheckInfo + public static class CheckInfo { /** The PObject */ public final PObject pobj; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetModel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetModel.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetModel.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -22,8 +22,8 @@ */ public class CharacterSheetModel { private JTabbedPane masterPane = new JTabbedPane(); - private ArrayList characters = new ArrayList(); - private ArrayList infoPanes = new ArrayList(); + private ArrayList<PlayerCharacter> characters = new ArrayList<PlayerCharacter>(); + private ArrayList<CharacterPanel> infoPanes = new ArrayList<CharacterPanel>(); private CharacterInfoTabPanel infoPanel; /** Creates a new instance of CharacterSheetModel */ @@ -81,7 +81,7 @@ /** * @return Returns the infoPanes. */ - public ArrayList getInfoPanes() { + public ArrayList<CharacterPanel> getInfoPanes() { return infoPanes; } @@ -203,8 +203,7 @@ } } for(int i = 0; i < infoPanes.size(); i++) { - CharacterPanel cp = (CharacterPanel)infoPanes.get(i); - cp.setColor(); + infoPanes.get(i).setColor(); } } @@ -221,8 +220,7 @@ } } for(int i = 0; i < infoPanes.size(); i++) { - CharacterPanel cp = (CharacterPanel)infoPanes.get(i); - cp.setSystemRefresh(refresh); + infoPanes.get(i).setSystemRefresh(refresh); } } } Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetUtils.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetUtils.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/CharacterSheetUtils.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -51,7 +51,7 @@ * @param color * @param componentList */ - public static void addGbCell(Container cont, String text, int gridX, int gridY, int gridHeight, int gridWidth, int fill, int anchor, int layout, Color color, List componentList) { + public static void addGbCell(Container cont, String text, int gridX, int gridY, int gridHeight, int gridWidth, int fill, int anchor, int layout, Color color, List<Component> componentList) { java.awt.GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); JPanel cell = new JPanel(); JLabel cellText = new JLabel(); @@ -60,7 +60,6 @@ cellText.setFont(new java.awt.Font("Dialog", 0, 10)); cellText.setText(text); cell.add(cellText); - gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = gridX; gridBagConstraints.gridy = gridY; gridBagConstraints.gridwidth = gridHeight; @@ -102,9 +101,8 @@ * @param anchor * @param componentList */ - public static void addGbComponentCell(Container cont, Component comp, int gridX, int gridY, int gridHeight, int gridWidth, Insets insets, int fill, int anchor, List componentList) { + public static void addGbComponentCell(Container cont, Component comp, int gridX, int gridY, int gridHeight, int gridWidth, Insets insets, int fill, int anchor, List<Component> componentList) { java.awt.GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = gridX; gridBagConstraints.gridy = gridY; gridBagConstraints.gridheight = gridHeight; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ArmorPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ArmorPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ArmorPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -14,9 +14,9 @@ import javax.swing.JPanel; import javax.swing.JTextArea; import java.awt.Color; +import java.awt.Component; import java.awt.Font; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; /** @@ -25,7 +25,7 @@ */ public class ArmorPane extends javax.swing.JPanel { private PlayerCharacter pc; - private ArrayList fields = new ArrayList(); + private ArrayList<Component> fields = new ArrayList<Component>(); private JLabel typeName; private JPanel typeNamePanel; @@ -170,11 +170,11 @@ final String armorType = typeName.getText(); for(int i = 0; i < fields.size(); i++) { - remove((java.awt.Component)fields.get(i)); + remove(fields.get(i)); } fields.clear(); - List armorList = getArmorList(armorType); + List<Equipment> armorList = getArmorList(armorType); if(armorList.size() == 0) { setVisible(false); @@ -215,8 +215,8 @@ repaint(); } - private List getArmorList(String armorType) { - List armorList = new ArrayList(); + private List<Equipment> getArmorList(String armorType) { + List<Equipment> armorList = new ArrayList<Equipment>(); if(armorType.equals(ARMOR)) { armorList = pc.getEquipmentOfTypeInOutputOrder(ARMOR, 3); @@ -225,9 +225,8 @@ armorList = pc.getEquipmentOfTypeInOutputOrder(SHIELD, 3); } else if(armorType.equals(ITEM)) { - for (Iterator e = pc.getEquipmentListInOutputOrder().iterator(); e.hasNext();) { - Equipment eq = (Equipment) e.next(); - + for (Equipment eq : pc.getEquipmentListInOutputOrder()) + { if (eq.getBonusListString(AC) && (!eq.isArmor() && !eq.isShield())) { armorList.add(eq); } @@ -243,10 +242,11 @@ field.setBackground(color); field.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 1, 0)); data.setFont(FONT_TEN); + String dataText = text; if(text.equals(BLANK)) { - text = SPACE; + dataText = SPACE; } - data.setText(text); + data.setText(dataText); field.add(data); java.awt.GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/AttributePane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/AttributePane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/AttributePane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -24,7 +24,7 @@ */ public class AttributePane extends JPanel { private PlayerCharacter pc; - private ArrayList attrList = new ArrayList(); + private ArrayList<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); @@ -106,9 +106,9 @@ */ public void setColor() { setLocalColor(); - for(int i = 0; i < attrList.size(); i++) { - Attribute attr = (Attribute)attrList.get(i); - attr.setColor(); + for (Attribute att : attrList) + { + att.setColor(); } } @@ -128,12 +128,8 @@ setVisible(true); StatList sl = pc.getStatList(); - for(int i = 0; i < attrList.size(); i++) { - Attribute attr = (Attribute)attrList.get(i); - attr.destruct(); - } - attrList.clear(); - + destruct(); + for (int i = 0; i < sl.size(); i++) { Attribute attr = new Attribute(i); attrList.add(attr); @@ -145,9 +141,9 @@ */ public void refresh() { Globals.setCurrentPC(pc); - for(int i = 0; i < attrList.size(); i++) { - Attribute attr = (Attribute)attrList.get(i); - attr.refresh(); + for (Attribute att : attrList) + { + att.refresh(); } } @@ -155,9 +151,9 @@ * Destroy this pane */ public void destruct() { - for(int i = 0; i < attrList.size(); i++) { - Attribute attr = (Attribute)attrList.get(i); - attr.destruct(); + for (Attribute att : attrList) + { + att.destruct(); } attrList.clear(); } Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterInfoTabPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterInfoTabPanel.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterInfoTabPanel.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -87,9 +87,9 @@ * Retrieve the list of tasks to be done on the tab. * @return List of task descriptions as Strings. */ - public List getToDos() + public List<String> getToDos() { - return new ArrayList(); + return new ArrayList<String>(); } public void refresh() { Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterPanel.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterPanel.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -26,6 +26,7 @@ import pcgen.core.Globals; import pcgen.core.NoteItem; import pcgen.core.PCClass; +import pcgen.core.PObject; import pcgen.core.PlayerCharacter; import pcgen.core.SettingsHandler; import pcgen.gui.panes.FlippingSplitPane; @@ -41,7 +42,7 @@ private Page2Panel page2; private ScrollablePanel page1layout; private ScrollablePanel page2layout; - private List spellPaneList; + private List<SpellPage> spellPaneList; private NotesPanel notesPanel; private SelectPanel selectPanel; private FlippingSplitPane rightSidePane; @@ -192,14 +193,14 @@ selectPanel = new SelectPanel(this); } if(spellPaneList != null) { - for(int i = 0; i < spellPaneList.size(); i++) { - SpellPage spellPage = (SpellPage)spellPaneList.get(i); - spellPage.destruct(); + for (SpellPage spellPane : spellPaneList) + { + spellPane.destruct(); } spellPaneList.clear(); } else { - spellPaneList = new ArrayList(); + spellPaneList = new ArrayList<SpellPage>(); } pcProperties = new Properties(); @@ -237,7 +238,7 @@ page2layout.add(page2); mainTabs.add("Page 2", new JScrollPane(page2layout)); } - List spellClassList = pc.getSpellClassList(); + List<? extends PObject> spellClassList = pc.getSpellClassList(); for(int i = 0; i < spellClassList.size(); i++) { Object object = spellClassList.get(i); if (object instanceof PCClass) { @@ -314,9 +315,7 @@ } private void populatePcProperties() { - List notesList = pc.getNotesList(); - for(int i = 0; i < notesList.size(); i++) { - NoteItem note = (NoteItem)notesList.get(i); + for (NoteItem note : pc.getNotesList()) { if(note.getName().equals("Hidden")) { try { pcProperties.load(new ByteArrayInputStream(note.getValue().getBytes())); @@ -338,9 +337,8 @@ if(page1 != null) { page1.updateProperties(); page2.updateProperties(); - for(int i = 0; i < spellPaneList.size(); i++) { - SpellPage spellPage = (SpellPage)spellPaneList.get(i); - spellPage.updateProperties(); + for (SpellPage spellPane : spellPaneList) { + spellPane.updateProperties(); } notesPanel.updateProperties(); } @@ -356,9 +354,7 @@ pcProperties.store(os, "Character Sheet Plugin Properties"); NoteItem hiddenNote = null; int newNodeId = 0; - List notesList = pc.getNotesList(); - for(int i = 0; i < notesList.size(); i++) { - NoteItem testNote = (NoteItem)notesList.get(i); + for (NoteItem testNote : pc.getNotesList()) { if (testNote.getId() > newNodeId) { newNodeId = testNote.getId(); } @@ -391,9 +387,8 @@ if(page1 != null) { page1.setColor(); page2.setColor(); - for(int i = 0; i < spellPaneList.size(); i++) { - SpellPage spellPage = (SpellPage)spellPaneList.get(i); - spellPage.setColor(); + for (SpellPage spellPane : spellPaneList) { + spellPane.setColor(); } } } Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ClassSpellLevelPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ClassSpellLevelPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/ClassSpellLevelPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -15,7 +15,6 @@ import java.awt.Component; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; /** @@ -27,9 +26,9 @@ private PCClass pcclass; private int level; private boolean racial = false; - private List removeList = new ArrayList(); - private List lightList = new ArrayList(); - private List darkList = new ArrayList(); + private List<Component> removeList = new ArrayList<Component>(); + private List<Component> lightList = new ArrayList<Component>(); + private List<Component> darkList = new ArrayList<Component>(); private int serial = 0; //Seperated out for performance reasons @@ -323,13 +322,10 @@ jPanel12.setBackground(CharacterPanel.header); jPanel13.setBackground(CharacterPanel.header); jPanel14.setBackground(CharacterPanel.header); - for(int i = 0; i < lightList.size(); i++) { - Component c = (Component)lightList.get(i); + for (Component c : lightList) { c.setBackground(CharacterPanel.bodyLight); } - - for(int i = 0; i < darkList.size(); i++) { - Component c = (Component)darkList.get(i); + for (Component c : darkList) { c.setBackground(CharacterPanel.bodyMedLight); } } @@ -370,7 +366,7 @@ */ public void refresh() { if(serial < pc.getSerial()) { - Collection spellList; + Collection<CharacterSpell> spellList; String spellBook; if(!racial) { int knownVal = pcclass.getKnownForLevel(pcclass.getLevel(), level, pc); @@ -392,17 +388,17 @@ spellBook = Globals.INNATE_SPELL_BOOK_NAME; } - for(int i = 0; i < removeList.size(); i++) { - remove((java.awt.Component)removeList.get(i)); + for (Component c : removeList) { + remove(c); } removeList.clear(); int gridY = 1; boolean light = true; - for (Iterator it = spellList.iterator(); it.hasNext();) + for (CharacterSpell cs : spellList) { Color color; - List colorList; + List<Component> colorList; if(light) { color = CharacterPanel.bodyLight; colorList = lightList; @@ -413,14 +409,13 @@ colorList = darkList; light = true; } - CharacterSpell cs = (CharacterSpell) it.next(); gridY = addLine(cs, spellBook, color, gridY, colorList); } serial = pc.getSerial(); } } - private int addLine(CharacterSpell cs, String spellBook, Color color, int gridY, List colorList) { + private int addLine(CharacterSpell cs, String spellBook, Color color, int gridY, List<Component> colorList) { Spell spell = cs.getSpell(); SpellInfo si = cs.getSpellInfoFor(spellBook, level, -1); Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/DetailsPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/DetailsPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/DetailsPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -825,10 +825,8 @@ private String getClasses(PlayerCharacter aPC) { StringBuffer sb = new StringBuffer(); - ArrayList classList = aPC.getClassList(); - - for (int i = 0; i < classList.size(); i++) { - PCClass mClass = (PCClass) classList.get(i); + ArrayList<PCClass> classList = aPC.getClassList(); + for (PCClass mClass : classList) { sb.append(mClass.getAbbrev()).append(mClass.getLevel()).append(' '); } Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/DualListPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/DualListPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/DualListPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -8,16 +8,14 @@ import java.awt.Color; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; -import java.util.Set; /** * * @author ddjone3 */ public class DualListPane extends javax.swing.JPanel { - private Map map = new HashMap(); + private Map<String, String> map = new HashMap<String, String>(); /** Creates new form featPane */ public DualListPane() { @@ -82,7 +80,7 @@ * @param title * @param map */ - public void setMap(String title, Map map) { + public void setMap(String title, Map<String, String> map) { this.map = map; this.title.setText(title); setVisible(false); @@ -97,10 +95,8 @@ setVisible(true); listPane.removeAll(); - Set keySet = map.keySet(); int i = 0; - for(Iterator it = keySet.iterator(); it.hasNext();) { - String key = (String)it.next(); + for (Map.Entry<String, String> entry : map.entrySet()) { Color color; if(i % 2 == 0) { color = CharacterPanel.bodyLight; @@ -108,7 +104,7 @@ else { color = CharacterPanel.bodyMedLight; } - addLine(key, (String)map.get(key), color); + addLine(entry.getKey(), entry.getValue(), color); i++; } } Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/EquipmentPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/EquipmentPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/EquipmentPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -17,6 +17,7 @@ import javax.swing.JTextArea; import javax.swing.border.LineBorder; import java.awt.Color; +import java.awt.Component; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -27,7 +28,7 @@ */ public class EquipmentPane extends JPanel { private PlayerCharacter pc; - private List removeList = new ArrayList(); + private List<Component> removeList = new ArrayList<Component>(); private JPanel costHeaderPanel; private JPanel equipmentHeaderPanel; @@ -186,14 +187,14 @@ * Refresh */ public void refresh() { - List eqList = getEqList(pc); + List<Equipment> eqList = getEqList(pc); if(eqList.size() == 0) { setVisible(false); } else { setVisible(true); - for(int i = 0; i < removeList.size(); i++) { - remove((java.awt.Component)removeList.get(i)); + for (Component c : removeList) { + remove(c); } removeList.clear(); @@ -484,9 +485,9 @@ removeList.add(totalGpPanel); } - private List getEqList(PlayerCharacter aPC) { + private List<Equipment> getEqList(PlayerCharacter aPC) { int merge = Constants.MERGE_LOCATION; - List eqList = aPC.getEquipmentListInOutputOrder(merge); + List<Equipment> eqList = aPC.getEquipmentListInOutputOrder(merge); eqList = EquipmentUtilities.removeEqType(eqList, COIN); eqList = EquipmentUtilities.removeEqType(eqList, GEM); return eqList; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/MusicPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/MusicPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/MusicPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -19,7 +19,7 @@ public class MusicPane extends javax.swing.JPanel { private PlayerCharacter pc; - private ArrayList checkList = new ArrayList(); + private ArrayList<JCheckBox> checkList = new ArrayList<JCheckBox>(); private Properties pcProperties; @@ -183,8 +183,8 @@ public void updateProperties() { if (updateProperties) { int counter = 0; - for (int i = 0; i < checkList.size(); i++) { - JCheckBox checkBox = (JCheckBox) checkList.get(i); + for (JCheckBox checkBox : checkList) + { if (checkBox.isSelected()) { counter++; } @@ -200,8 +200,8 @@ try { int counter = Integer.parseInt((String) pcProperties .get("cs.MusicPane")); - for (int i = 0; i < checkList.size(); i++) { - JCheckBox checkBox = (JCheckBox) checkList.get(i); + for (JCheckBox checkBox : checkList) + { if (counter > 0) { checkBox.setSelected(true); counter--; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/NotesPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/NotesPanel.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/NotesPanel.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -311,11 +311,10 @@ } private void populateNotes() { - List notesList = pc.getNotesList(); + List<NoteItem> notesList = pc.getNotesList(); NoteItem csNotes = null; int newNodeId = 0; - for(int i = 0; i < notesList.size(); i++) { - NoteItem note = (NoteItem)notesList.get(i); + for (NoteItem note : notesList) { if (note.getId() > newNodeId) { newNodeId = note.getId(); } @@ -356,15 +355,14 @@ * The tree is built off the root node rootTreeNode */ private void establishTreeNodes() { - List nodesToBeAddedList = new ArrayList(); + List<NoteItem> nodesToBeAddedList = new ArrayList<NoteItem>(); int order = 0; rootTreeNode = new NoteTreeNode(null, pc); notesModel = new DefaultTreeModel(rootTreeNode); notesTree.setModel(notesModel); - List testList = pc.getNotesList(); - for(int i = 0; i < testList.size(); i++) { - NoteItem testnote = (NoteItem)testList.get(i); + List<NoteItem> testList = pc.getNotesList(); + for (NoteItem testnote : testList) { //Don't fuck with this - I plan on uncommenting this later when I don't need to test the hidden node anymore -DJ //if(!testnote.getName().equals("Hidden")) { nodesToBeAddedList.add(testnote); @@ -388,20 +386,19 @@ addNodes(rootTreeNode, nodesToBeAddedList); } - private void addNodes(NoteTreeNode node, List nodesToBeAddedList) { + private void addNodes(NoteTreeNode node, List<NoteItem> nodesToBeAddedList) { int index = -1; if(node.getItem() != null) { index = node.getItem().getId(); } - for (int i = 0; i < nodesToBeAddedList.size(); i++) { - NoteItem ni = (NoteItem) nodesToBeAddedList.get(i); + for (Iterator<NoteItem> it = nodesToBeAddedList.iterator(); it.hasNext();) { + NoteItem ni = it.next(); if (ni.getParentId() == index) { NoteTreeNode childNode = new NoteTreeNode(ni, pc); node.add(childNode); - nodesToBeAddedList.remove(i); - i--; + it.remove(); } } @@ -567,11 +564,7 @@ parentId = getItem().getId(); - Iterator allNotes = pc.getNotesList().iterator(); - - while (allNotes.hasNext()) { - final NoteItem currItem = (NoteItem) allNotes.next(); - + for (NoteItem currItem : pc.getNotesList()) { if (currItem.getId() > newNodeId) { newNodeId = currItem.getId(); } Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PerDayPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PerDayPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PerDayPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -21,7 +21,7 @@ private PlayerCharacter pc; private String var = ""; private String var2 = ""; - private ArrayList checkList = new ArrayList(); + private ArrayList<JCheckBox> checkList = new ArrayList<JCheckBox>(); private Properties pcProperties; private boolean updateProperties = false; @@ -189,8 +189,7 @@ public void updateProperties() { if(updateProperties) { int counter = 0; - for(int i = 0; i < checkList.size(); i++) { - JCheckBox checkBox = (JCheckBox)checkList.get(i); + for (JCheckBox checkBox : checkList) { if(checkBox.isSelected()) { counter++; } @@ -202,8 +201,7 @@ public void updatePane() { try { int counter = Integer.parseInt((String)pcProperties.get("cs.PerDayPane." + getPropTitle())); - for(int i = 0; i < checkList.size(); i++) { - JCheckBox checkBox = (JCheckBox)checkList.get(i); + for (JCheckBox checkBox : checkList) { if(counter > 0) { checkBox.setSelected(true); counter--; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PreferencesDisplayPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PreferencesDisplayPanel.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/PreferencesDisplayPanel.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -108,7 +108,7 @@ private void initCb() { cbColor.setRenderer(new ColorRenderer()); - Vector data = new Vector(); + Vector<Object> data = new Vector<Object>(); data.add(new ColorContainer(CharacterPanel.BLUE)); data.add(new ColorContainer(CharacterPanel.LIGHTBLUE)); data.add(new ColorContainer(CharacterPanel.GREEN)); Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/RagePane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/RagePane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/RagePane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -20,7 +20,7 @@ */ public class RagePane extends javax.swing.JPanel { private PlayerCharacter pc; - private ArrayList checkList = new ArrayList(); + private ArrayList<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 = "The Barbarian temporarily gains +6 to Strength, +6 to Constitution, and a +3 morale bonus on Will saves, but suffers a -2 penalty to AC."; private static final String rageText3 = "The Barbarian temporarily gains +8 to Strength, +8 to Constitution, and a +4 morale bonus on Will saves, but suffers a -2 penalty to AC."; @@ -182,8 +182,8 @@ public void updateProperties() { if(updateProperties) { int counter = 0; - for(int i = 0; i < checkList.size(); i++) { - JCheckBox checkBox = (JCheckBox)checkList.get(i); + for (JCheckBox checkBox : checkList) + { if(checkBox.isSelected()) { counter++; } @@ -195,8 +195,8 @@ public void updatePane() { try { int counter = Integer.parseInt((String)pcProperties.get(PROPERTY_RAGEPANE)); - for(int i = 0; i < checkList.size(); i++) { - JCheckBox checkBox = (JCheckBox)checkList.get(i); + for (JCheckBox checkBox : checkList) + { if(counter > 0) { checkBox.setSelected(true); counter--; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SelectPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SelectPanel.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SelectPanel.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -13,7 +13,6 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -91,8 +90,8 @@ // End of variables declaration//GEN-END:variables private PlayerCharacter pc; private int serial = 0; - private Map tempBonusWidgets = new HashMap(); - private Map eqSetWidgets = new HashMap(); + private Map<String, Component> tempBonusWidgets = new HashMap<String, Component>(); + private Map<String, JRadioButton> eqSetWidgets = new HashMap<String, JRadioButton>(); private CharacterPanel parent; @@ -155,9 +154,9 @@ tempBonusWidgets.clear(); modifiersPanel.removeAll(); eqSetPanel.removeAll(); - for (Iterator i = eqSetWidgets.values().iterator(); i.hasNext();) + for (JRadioButton button : eqSetWidgets.values()) { - eqSets.remove((JRadioButton) i.next()); + eqSets.remove(button); } eqSetWidgets.clear(); } @@ -169,12 +168,12 @@ * @param tempBonuses a <code>List</code> of temporary bonuses * @return a <code>Set</code> of bonus names(<code>String</code>'s) */ - private Set tempBonus2Set(List tempBonuses) + private Set<String> tempBonus2Set(List<BonusObj> tempBonuses) { - final Set ret = new TreeSet(); - for (Iterator i = tempBonuses.iterator(); i.hasNext();) - { - ret.add(((BonusObj) i.next()).getName()); + final Set<String> ret = new TreeSet<String>(); + for (BonusObj bonus : tempBonuses) + { + ret.add(bonus.getName()); } return ret; } @@ -186,12 +185,11 @@ * @param eqSetList a <code>List</code> of Equipment set items * @return a <code>Set</code> of equipment set names */ - private Set equipSet2Set(List eqSetList) + private Set<String> equipSet2Set(List<EquipSet> eqSetList) { - final Set ret = new TreeSet(); - for (Iterator i = eqSetList.iterator(); i.hasNext();) - { - EquipSet e = (EquipSet) i.next(); + final Set<String> ret = new TreeSet<String>(); + for (EquipSet e : eqSetList) + { if (e.getRootIdPath().equals(e.getIdPath())) { ret.add(e.getIdPath()); @@ -207,8 +205,8 @@ /* First, find which temporary bonuses have been removed, and which have been added */ - Set newValues = tempBonus2Set(pc.getTempBonusList()); - Set oldValues = new TreeSet(tempBonusWidgets.keySet()); + Set<String> newValues = tempBonus2Set(pc.getTempBonusList()); + Set<String> oldValues = new TreeSet<String>(tempBonusWidgets.keySet()); oldValues.removeAll(newValues); newValues.removeAll(tempBonusWidgets.keySet()); @@ -240,25 +238,23 @@ } } - private void addEquipSets(Set eqSetIds) + private void addEquipSets(Set<String> eqSetIds) { /* just a temporary map to be able to lookup the name of an equipment set, given its ID */ - final Map setId2Name = new HashMap(); + final Map<String, String> setId2Name = new HashMap<String, String>(); - for (Iterator i = pc.getEquipSet().iterator(); i.hasNext();) + for (EquipSet eset : pc.getEquipSet()) { - EquipSet eset = (EquipSet) i.next(); setId2Name.put(eset.getIdPath(), eset.getName()); } /* Create the buttons for the equipment sets. Note that we keep an internal reference to the buttons in a map, so that we can later remove them given an equipment set ID */ - for (Iterator i = eqSetIds.iterator(); i.hasNext();) + for (String eqid : eqSetIds) { - String eqid = (String) i.next(); - String setName = (String) setId2Name.get(eqid); + String setName = setId2Name.get(eqid); JRadioButton button = new JRadioButton(setName); button.setActionCommand(eqid); button.addActionListener(this); @@ -268,18 +264,18 @@ } } - private void removeEquipSets(Set eqSetIds) + private void removeEquipSets(Set<String> eqSetIds) { - for (Iterator i = eqSetIds.iterator(); i.hasNext();) - { - JRadioButton w = (JRadioButton) eqSetWidgets.remove(i.next()); + for (String key : eqSetIds) + { + JRadioButton w = eqSetWidgets.remove(key); eqSets.remove(w); eqSetPanel.remove(w); } } - private class CheckBoxUpdater implements ItemListener + private static class CheckBoxUpdater implements ItemListener { private String bonus; private PlayerCharacter playerCharacter; @@ -314,11 +310,10 @@ } } - private void addTempBonus(final Set names) + private void addTempBonus(final Set<String> names) { - for (Iterator i = names.iterator(); i.hasNext();) - { - String name = (String) i.next(); + for (String name : names) + { JCheckBox aBox = new JCheckBox(name, !pc.getTempBonusFilters().contains(name)); aBox.addItemListener(new CheckBoxUpdater(name, pc, parent)); @@ -327,12 +322,11 @@ } } - private void removeTempBonus(final Set names) + private void removeTempBonus(final Set<String> names) { - for (Iterator i = names.iterator(); i.hasNext();) - { - String name = (String) i.next(); - Component w = (Component) tempBonusWidgets.get(name); + for (String name : names) + { + Component w = tempBonusWidgets.get(name); if (w != null) { modifiersPanel.remove(w); Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SkillsPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SkillsPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/SkillsPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -6,6 +6,7 @@ package plugin.charactersheet.gui; +import java.awt.Component; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridBagConstraints; @@ -26,7 +27,7 @@ */ public class SkillsPane extends javax.swing.JPanel { private PlayerCharacter pc; - private ArrayList componentList = new ArrayList(); + private ArrayList<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-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/TurnPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -27,7 +27,7 @@ public class TurnPane extends javax.swing.JPanel { private PlayerCharacter pc; private String turnType; - private ArrayList checkList = new ArrayList(); + private ArrayList<JCheckBox> checkList = new ArrayList<JCheckBox>(); private Properties pcProperties; private boolean updateProperties = false; @@ -658,13 +658,13 @@ public void updateProperties() { if(updateProperties) { int counter = 0; - for(int i = 0; i < checkList.size(); i++) { - JCheckBox checkBox = (JCheckBox)checkList.get(i); + for (JCheckBox checkBox : checkList) + { if(checkBox.isSelected()) { counter++; } } - pcProperties.put("cs.TurnPane." + turnType, counter + ""); + pcProperties.put("cs.TurnPane." + turnType, Integer.toString(counter)); } } @@ -674,8 +674,8 @@ public void updatePane() { try { int counter = Integer.parseInt((String)pcProperties.get("cs.TurnPane." + turnType)); - for(int i = 0; i < checkList.size(); i++) { - JCheckBox checkBox = (JCheckBox)checkList.get(i); + for (JCheckBox checkBox : checkList) + { if(counter > 0) { checkBox.setSelected(true); counter--; Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/WeaponListPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/WeaponListPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/WeaponListPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -22,7 +22,7 @@ */ public class WeaponListPane extends javax.swing.JPanel { private PlayerCharacter pc; - private ArrayList weaponList = new ArrayList(); + private ArrayList<WeaponPane> weaponList = new ArrayList<WeaponPane>(); private int serial = 0; /** @@ -44,8 +44,7 @@ */ public void setColor() { setLocalColor(); - for(int i = 0; i < weaponList.size(); i++) { - WeaponPane weapPane = (WeaponPane)weaponList.get(i); + for (WeaponPane weapPane : weaponList) { weapPane.setColor(); } } @@ -80,7 +79,7 @@ // Get the EquipSet used for output and calculations // possibly include equipment from temporary bonuses pc.setCalcEquipmentList(pc.getUseTempMods()); - List weaps = pc.getExpandedWeapons(Constants.MERGE_ALL); + List<Equipment> weaps = pc.getExpandedWeapons(Constants.MERGE_ALL); // broken, if you remove a weapon and add another one the weapontotal is the same so no refresh is performed // fix for bug [ 1153155 ] Preview pane not updated when changing equiped weapon or ski // if(weaps.size() != weaponTotal || firstTime) { @@ -107,7 +106,7 @@ public void clear() { removeAll(); for(int i = weaponList.size()-1; i >= 0 ; i--) { - WeaponPane pane = (WeaponPane)weaponList.get(i); + WeaponPane pane = weaponList.get(i); pane.clear(); weaponList.remove(pane); pane = null; @@ -115,14 +114,14 @@ weaponList.clear(); } - private void addEqPanes(List weapons) { + private void addEqPanes(List<Equipment> weapons) { clear(); int gridBag = 1; - for(int i = 0; i < weapons.size(); i++) { + for (Equipment weapon : weapons) { WeaponPane weaponPane = new WeaponPane(); - weaponPane.setWeapon(pc, (Equipment)weapons.get(i)); + weaponPane.setWeapon(pc, weapon); weaponList.add(weaponPane); weaponPane.refresh(); add(weaponPane); Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/WeaponSpecialPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/WeaponSpecialPane.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/WeaponSpecialPane.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -98,8 +98,7 @@ * Refresh the weapon special properties */ public void refresh() { - String sprop = WeaponToken.getSpropToken(pc, eq); - sprop.trim(); + String sprop = WeaponToken.getSpropToken(pc, eq).trim(); if(!sprop.equals(BLANK)) { this.setVisible(true); specialProperties.setText(sprop); Modified: Trunk/pcgen/code/src/java/plugin/doomsdaybook/gui/NameGenPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/doomsdaybook/gui/NameGenPanel.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/doomsdaybook/gui/NameGenPanel.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -274,10 +274,8 @@ { clearButtons(); - for (int i = 0; i < rule.size(); i++) + for (String key : rule) { - String key = (String) rule.get(i); - try { DataElement ele = allVars.getDataElement(key); @@ -688,6 +686,7 @@ java.util.List rulesets = generator.getChildren("RULESET"); java.util.List lists = generator.getChildren("LIST"); ListIterator listIterator = lists.listIterator(); + //TODO This is a "dead local store" - is this intended to do something? thpr 10/21/06 RuleSet rs = new RuleSet(allVars); while (listIterator.hasNext()) @@ -823,12 +822,9 @@ else { Vector struct = new Vector(); - RuleSet rs = (RuleSet) cbCatalog.getSelectedItem(); - - for (int i = 0; i < rs.size(); i++) + + for (String key : ((RuleSet) cbCatalog.getSelectedItem())) { - String key = (String) rs.get(i); - try { struct.add(allVars.getDataElement(key)); Modified: Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -8,13 +8,10 @@ /** * DataElementComperator */ -public class DataElementComperator implements Comparator +public class DataElementComperator implements Comparator<DataElement> { - public int compare(Object o1, Object o2) + public int compare(DataElement o1, DataElement o2) { - DataElement i1 = (DataElement) o1; - DataElement i2 = (DataElement) o2; - - return i1.getTitle().compareTo(i2.getTitle()); + return o1.getTitle().compareTo(o2.getTitle()); } } Modified: Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/List.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/List.java 2006-10-23 21:59:50 UTC (rev 1519) +++ Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/List.java 2006-10-23 22:23:55 UTC (rev 1520) @@ -13,9 +13,9 @@ * * @author devon */ -public class List extends ArrayList implements DataElement +public class List extends ArrayList<WeightedDataValue> implements DataElement { - ArrayList retList = new ArrayList(); + ArrayList<DataValue> retList = new ArrayList<DataValue>(); String id; String title; VariableHashMap allVars; @@ -55,7 +55,7 @@ this.weight = weight; } - public ArrayList getData() +... [truncated message content] |
From: <th...@us...> - 2006-10-25 03:56:31
|
Revision: 1526 http://svn.sourceforge.net/pcgen/?rev=1526&view=rev Author: thpr Date: 2006-10-24 20:56:08 -0700 (Tue, 24 Oct 2006) Log Message: ----------- Extract LevelProperty into its own class Make LevelProperty Generic (in the Java 1.5 sense) Have templates list in PCClass use LevelProperty rather than storing Level PIPE String Fix 1489300 - Vision tag should now work in Class Levels Deprecate CASTAS Token Modified Paths: -------------- 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/gui/editor/ClassLevelPanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/TemplateToken.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/core/LevelProperty.java Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/CastasToken.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastasToken.java Added: Trunk/pcgen/code/src/java/pcgen/core/LevelProperty.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/LevelProperty.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/core/LevelProperty.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -0,0 +1,50 @@ +/* + * LevelProperty.java + * Copyright 2001 (C) Bryan McRoberts <mer...@ya...> + * + * 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 + * + * PCClass Created on April 21, 2001, 2:15 PM + * extracted from PCClass 10/24/06 th...@so... + * + * $Id: PCClass.java 1522 2006-10-24 22:40:09Z thpr $ + */ +package pcgen.core; + +public class LevelProperty<T> { + /* + * CONSIDER Someday, should T extend PObject? + */ + private int propLevel = 0; + + private T object; + + public LevelProperty(final int argLevel, final T argObject) { + propLevel = argLevel; + object = argObject; + } + + public final int getLevel() { + return propLevel; + } + + public final T getObject() { + return object; + } + + public static <C> LevelProperty<C> getLevelProperty(int level, C property) { + return new LevelProperty<C>(level, property); + } +} \ No newline at end of file Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-25 03:50:06 UTC (rev 1525) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -112,7 +112,7 @@ * the code seems to want to allow a Domain on a Class Level line. (Not sure * if this functions correctly, though) */ - private ArrayList<LevelProperty> domainList = null; + private ArrayList<LevelProperty<Domain>> domainList = null; /* * ALLCLASSLEVELS The automatic Feats appropriate to any given level (they @@ -162,8 +162,7 @@ /* * STRINGREFACTOR This is currently taking in a delimited String and should - * be taking in a List or somesuch. (Actually building a LevelProperty<Template> - * or something like that) + * be taking in a List or somesuch. */ /* * TYPESAFETY This is throwing around template names as Strings. :( @@ -172,13 +171,13 @@ * ALLCLASSLEVELS The templates [based on their LevelProperty] (not the raw * Strings) need to be stored in EACH individual PCClassLevel. */ - private ArrayList<String> templates = null; + private ArrayList<LevelProperty<String>> templates = null; /* * ALLCLASSLEVELS The SR List is level dependent - heck, it's in a * LevelProperty, so that should be pretty obvious :) */ - private ArrayList<LevelProperty> SR = null; + private ArrayList<LevelProperty<String>> SR = null; /* * ALLCLASSLEVELS Since this seems to allow for class dependent additions of @@ -190,7 +189,7 @@ * ALLCLASSLEVELS This is pretty obvious, as these are already in a * LevelProperty... these go into the PCClassLevel */ - private ArrayList<LevelProperty> naturalWeapons = null; + private ArrayList<LevelProperty<Equipment>> naturalWeapons = null; /* * PCCLASSONLY This is really an item that the PCClass knows, and then the @@ -211,13 +210,6 @@ // objects /* - * DELETEVARIABLE This appears to be an unused cache, and will not be very - * useful once the Templates are level dependent and in different - * PCClassLevels - */ - private ArrayList<String> templatesAdded = 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. */ @@ -262,6 +254,14 @@ * necessarily a number; however, the complex processing that takes place on * it is NOT a Formula, per se. Therefore, the processing can be done either * at import of the Tag, or at least before a PCClassLevel is created. + * + * This is, unfortunately, a bit more difficult than it looks, since it is + * processing based on currently known data (the hit die size). This makes + * it a bit more complicated to get the formula processing correct. + * + * Note hat .MOD processing needs to be considered here - what happens when + * a later .MOD copies a class and changes the HITDIE? This can't be + * completely pre-processed or it won't work */ /* * REFACTOR This name??? Lock what? It is really a modification of the HITDIE @@ -319,7 +319,7 @@ * ALLCLASSLEVELS The Vision List is level dependent - heck, it's in a * LevelProperty, so that should be pretty obvious :) */ - private List<LevelProperty> visionList = null; + private List<LevelProperty<String>> visionList = null; /* * STRINGREFACTOR Need to rebuild this String into a List<Integer> @@ -1523,11 +1523,11 @@ return ret; } List<Domain> returnList = new ArrayList<Domain>(); - for (LevelProperty prop : domainList) + for (LevelProperty<Domain> prop : domainList) { if (prop.getLevel() <= domainLevel) { - returnList.add((Domain) prop.getObject()); + returnList.add(prop.getObject()); } } return returnList; @@ -3078,16 +3078,20 @@ } /* - * CONSIDER Should this be overriding getTemplateList from PObject?? (it - * isn't) + * Note: Since this is local access, it does not need to override + * getTemplateList from PObject (although it is probably confusing that it + * doesn't). The key point is ensuring that getTemplates(final boolean flag, + * final PlayerCharacter aPC) is still properly overriding the PObject + * method so that the proper templates for this PCClass are applied to the + * PlayerCharacter. */ /* - * 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 List<String> getTemplates() { + public List<LevelProperty<String>> getTemplates() { if (templates == null) { - final List<String> ret = Collections.emptyList(); + final List<LevelProperty<String>> ret = Collections.emptyList(); return Collections.unmodifiableList(ret); } return Collections.unmodifiableList(templates); @@ -3327,11 +3331,10 @@ .indexOf(Constants.PIPE) + 1); if (visionList == null) { - visionList = new ArrayList<LevelProperty>(); + visionList = new ArrayList<LevelProperty<String>>(); } - final LevelProperty lp = new LevelProperty(lvl, newString); - visionList.add(lp); + visionList.add(LevelProperty.getLevelProperty(lvl, newString)); } /* @@ -3603,34 +3606,6 @@ } /** - * Class section of Natural Attacks Is just a wrapper to remove the level - * dependent stuff - * - * @param obj - * @param aString - */ - /* - * DELETEMETHOD This should be refactored out and this work (prior to the - * proposed call to addNaturalWeapon) should be done in the Tag - */ - public void setNaturalAttacks(final PObject obj, final String aString) { - final StringTokenizer attackTok = new StringTokenizer(aString, - Constants.PIPE, false); - final int lvl = Integer.parseInt(attackTok.nextToken()); - final String sNat = attackTok.nextToken(); - /* - * REFACTOR This should be using addNaturalWeapon(eq, lvl); - */ - final LevelProperty lp = new LevelProperty(lvl, sNat); - - if (naturalWeapons == null) { - naturalWeapons = new ArrayList<LevelProperty>(); - } - - naturalWeapons.add(lp); - } - - /** * get the Natural Attacks for this level * * @return natural weapons list @@ -3646,9 +3621,9 @@ return tempArray; } - for (LevelProperty lp : naturalWeapons) { + for (LevelProperty<Equipment> lp : naturalWeapons) { if (lp.getLevel() <= level) { - final Equipment weapon = (Equipment) lp.getObject(); + final Equipment weapon = lp.getObject(); tempArray.add(weapon); // addWeaponProfAutos(weapon.getName()); } @@ -3746,11 +3721,10 @@ SR = null; } else { if (SR == null) { - SR = new ArrayList<LevelProperty>(); + SR = new ArrayList<LevelProperty<String>>(); } - final LevelProperty lp = new LevelProperty(lvl, tokenSrString); - SR.add(lp); + SR.add(LevelProperty.getLevelProperty(lvl, tokenSrString)); } } @@ -3767,7 +3741,7 @@ * PCClass for PCClassLevel creation (in the factory) */ public String getSRFormula() { - LevelProperty lp = null; + LevelProperty<String> lp = null; if (SR != null) { final int lvl = level; @@ -3782,7 +3756,7 @@ } if (lp != null) { - return lp.getProperty(); + return lp.getObject(); } return null; @@ -3803,9 +3777,9 @@ */ public String getSRListString(final int index, final String delimiter) { if ((SR != null) && (SR.size() > index)) { - final LevelProperty lp = SR.get(index); + final LevelProperty<String> lp = SR.get(index); - return lp.getLevel() + delimiter + lp.getProperty(); + return lp.getLevel() + delimiter + lp.getObject(); } return null; @@ -4015,9 +3989,9 @@ } if (SR != null) { - for (LevelProperty lp : SR) { + for (LevelProperty<String> lp : SR) { pccTxt.append(lineSep).append(lp.getLevel()).append("\tSR:") - .append(lp.getProperty()); + .append(lp.getObject()); } } @@ -4035,10 +4009,11 @@ } - for (final String template : getTemplates()) { - final int y = template.indexOf('|'); - pccTxt.append(lineSep).append(template.substring(0, y)); - pccTxt.append("\tTEMPLATE:").append(template.substring(y + 1)); + if (templates != null) { + for (final LevelProperty<String> lp : templates) { + pccTxt.append(lineSep).append(lp.getLevel()); + pccTxt.append("\tTEMPLATE:").append(lp.getObject()); + } } for (int x = 0; x < getBonusList().size(); ++x) { @@ -4092,7 +4067,7 @@ if (domainList != null) { - for (LevelProperty domainProp : domainList) + for (LevelProperty<Domain> domainProp : domainList) { pccTxt.append(lineSep).append(domainProp.getLevel()); pccTxt.append("\tDOMAIN:").append( @@ -4178,6 +4153,8 @@ * Here is where we do the real work of setting the vision information on * the PObject * + * Must Override to fix 1489300 + * * @param aPC * @return Map */ @@ -4186,16 +4163,17 @@ * PCClass for PCClassLevel creation (in the factory) [with level dependent * differences, of course] */ + @Override public Map<String, String> getVision(final PlayerCharacter aPC) { if (visionList != null) { - for (LevelProperty vision : visionList) { - if (vision.getLevel() <= level) { - super.setVision(vision.getProperty(), aPC); + for (LevelProperty<String> vis : visionList) { + if (vis.getLevel() <= level) { + super.setVision(vis.getObject(), aPC); } } } - return super.getVision(); + return super.getVision(aPC); } public void setXPPenalty(final DefaultTriState argXPPenalty) { @@ -4265,9 +4243,9 @@ */ public void addDomain(final Domain domain, int domainLevel) { if (domainList == null) { - domainList = new ArrayList<LevelProperty>(); + domainList = new ArrayList<LevelProperty<Domain>>(); } - domainList.add(new LevelProperty(domainLevel, domain)); + domainList.add(LevelProperty.getLevelProperty(domainLevel, domain)); } /* @@ -4425,11 +4403,11 @@ * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public void addTemplate(final String template) { + public void addTemplate(int lvl, final String template) { if (templates == null) { - templates = new ArrayList<String>(); + templates = new ArrayList<LevelProperty<String>>(); } - templates.add(template); + templates.add(LevelProperty.getLevelProperty(lvl, template)); } /* @@ -4806,7 +4784,7 @@ // aClass.ageSet = ageSet; if (domainList != null) { //This is ok as a shallow copy - contract on readers of domainList - aClass.domainList = new ArrayList<LevelProperty>(domainList); + aClass.domainList = new ArrayList<LevelProperty<Domain>>(domainList); } if (addDomains != null) { aClass.addDomains = new ArrayList<String>(addDomains); @@ -4820,7 +4798,7 @@ aClass.hasSpellFormulas = hasSpellFormulas; if (naturalWeapons != null) { - aClass.naturalWeapons = new ArrayList<LevelProperty>( + aClass.naturalWeapons = new ArrayList<LevelProperty<Equipment>>( naturalWeapons); } } catch (CloneNotSupportedException exc) { @@ -6533,8 +6511,7 @@ * </p> * <p> * Passing <code>false</code> to this function results in nothing - * happening, although the function still parses all of the template lines, - * it doesn't add anything to the class. + * happening, it doesn't add anything to the class. * </p> * * @param flag @@ -6550,34 +6527,28 @@ public List<String> getTemplates(final boolean flag, final PlayerCharacter aPC) { final ArrayList<String> newTemplates = new ArrayList<String>(); - templatesAdded = new ArrayList<String>(); - for (final String template : getTemplates()) { - final StringTokenizer aTok = new StringTokenizer(template, "|", - false); - - if (level < Integer.parseInt(aTok.nextToken())) { + if (!flag) { + return newTemplates; + } + + for (final LevelProperty<String> template : getTemplates()) { + if (level < template.getLevel()) { continue; } - // The next token will either be a CHOOSE: tag or a template; - // we handle CHOOSE: tags by retrieving the rest of the string - final String tString = aTok.nextToken(); + /* + * The template string will either be a CHOOSE: tag or a bar + * separated list of templates + */ + final String tString = template.getObject(); - if (tString.startsWith("CHOOSE:") && !flag) { - newTemplates - .add(PCTemplate.chooseTemplate(this, template - .substring(template.indexOf("CHOOSE:") + 7), - true, aPC)); - templatesAdded.add(newTemplates.get(newTemplates.size() - 1)); - } else if (!flag) { - newTemplates.add(tString); - templatesAdded.add(newTemplates.get(newTemplates.size() - 1)); - - while (aTok.hasMoreTokens()) { - newTemplates.add(aTok.nextToken()); - templatesAdded.add(newTemplates - .get(newTemplates.size() - 1)); + if (tString.startsWith("CHOOSE:")) { + newTemplates.add(PCTemplate.chooseTemplate(this, tString + .substring(7), true, aPC)); + } else { + for (String templ : tString.split("|")) { + newTemplates.add(templ); } } } @@ -7301,7 +7272,7 @@ } if (otherClass.SR != null) { - SR = (ArrayList<LevelProperty>) otherClass.SR.clone(); + SR = (ArrayList<LevelProperty<String>>) otherClass.SR.clone(); } if (otherClass.vision != null) { @@ -7313,7 +7284,7 @@ } if (otherClass.naturalWeapons != null) { - naturalWeapons = (ArrayList<LevelProperty>) otherClass.naturalWeapons + naturalWeapons = (ArrayList<LevelProperty<Equipment>>) otherClass.naturalWeapons .clone(); } } @@ -7447,40 +7418,6 @@ } /* - * REFACTOR This can be done in a Generic typesafe way (e.g. LevelProperty<T>) - * to avoid some casting - */ - private static class LevelProperty { - private String property = ""; - - private int propLevel = 0; - - private PObject object; - - LevelProperty(final int argLevel, final String argProperty) { - propLevel = argLevel; - property = argProperty; - } - - LevelProperty(final int argLevel, final PObject argObject) { - propLevel = argLevel; - object = argObject; - } - - public final int getLevel() { - return propLevel; - } - - public final String getProperty() { - return property; - } - - public final PObject getObject() { - return object; - } - } - - /* * (non-Javadoc) * * @see pcgen.core.PObject#addNaturalWeapon(pcgen.core.Equipment, int) @@ -7493,8 +7430,7 @@ /* * CONSIDER Should this be checking for a null list?? */ - final LevelProperty lp = new LevelProperty(aLevel, weapon); - naturalWeapons.add(lp); + naturalWeapons.add(LevelProperty.getLevelProperty(aLevel, weapon)); } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-10-25 03:50:06 UTC (rev 1525) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -28,7 +28,6 @@ import java.io.Serializable; import java.io.StringWriter; import java.text.ParseException; -import java.util.AbstractCollection; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -1293,9 +1292,13 @@ /** * 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. */ - public Map<String, String> getVision() + public Map<String, String> getVision(final PlayerCharacter aPC) { return vision; } Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-25 03:50:06 UTC (rev 1525) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -6858,7 +6858,7 @@ { if (pObj != null) { - visMap = addStringToVisionMap(visMap, pObj.getVision()); + visMap = addStringToVisionMap(visMap, pObj.getVision(this)); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-10-25 03:50:06 UTC (rev 1525) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -383,10 +383,9 @@ levelTagList.add(lt); } - for ( final String c : obj.getTemplates() ) + for ( final LevelProperty<String> c : obj.getTemplates() ) { - int y = c.indexOf('|'); - LevelTag lt = new LevelTag(c.substring(0, y), LevelTag.TAG_TEMPLATE, c.substring(y + 1)); + LevelTag lt = new LevelTag(c.getLevel(), LevelTag.TAG_TEMPLATE, c.getObject()); levelTagList.add(lt); } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2006-10-25 03:50:06 UTC (rev 1525) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -1531,7 +1531,7 @@ // // Populate the vision panel // - vision = thisPObject.getVision(); + vision = thisPObject.getVision(null); visionValues = new ArrayList(); Copied: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/CastasToken.java (from rev 1520, Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastasToken.java) =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/CastasToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/CastasToken.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -0,0 +1,33 @@ +package plugin.lsttokens.deprecated; + +import pcgen.core.PCClass; +import pcgen.core.PObject; +import pcgen.persistence.lst.DeprecatedToken; +import pcgen.persistence.lst.PCClassLstToken; +import pcgen.util.PropertyFactory; + +/** + * Class deals with CASTAS Token + * + * Deprecated prior to 5.11.1 Alpha (to be removed after 5.12 release) + */ +public class CastasToken implements PCClassLstToken, DeprecatedToken { + + public String getTokenName() { + return "CASTAS"; + } + + public boolean parse(PCClass pcclass, String value, int level) { + pcclass.setCastAs(value); + return true; + } + + /** + * @see pcgen.persistence.lst.DeprecatedToken#getMessage(pcgen.core.PObject, java.lang.String) + */ + public String getMessage(@SuppressWarnings("unused")PObject anObj, + @SuppressWarnings("unused")String anValue) + { + return PropertyFactory.getString("Use SPELLLIST instead of CASTAS"); //$NON-NLS-1$ + } +} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastasToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastasToken.java 2006-10-25 03:50:06 UTC (rev 1525) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/CastasToken.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -1,19 +0,0 @@ -package plugin.lsttokens.pcclass; - -import pcgen.core.PCClass; -import pcgen.persistence.lst.PCClassLstToken; - -/** - * Class deals with CASTAS Token - */ -public class CastasToken implements PCClassLstToken { - - public String getTokenName() { - return "CASTAS"; - } - - public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setCastAs(value); - return true; - } -} Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/TemplateToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/TemplateToken.java 2006-10-25 03:50:06 UTC (rev 1525) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/TemplateToken.java 2006-10-25 03:56:08 UTC (rev 1526) @@ -1,7 +1,6 @@ package plugin.lsttokens.pcclass; import pcgen.core.PCClass; -import pcgen.persistence.lst.PCClassLoader; import pcgen.persistence.lst.PCClassLstToken; /** @@ -14,7 +13,7 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.addTemplate(PCClassLoader.fixParameter(level, value)); + pcclass.addTemplate(level, value); return true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-10-29 23:36:34
|
Revision: 1558 http://svn.sourceforge.net/pcgen/?rev=1558&view=rev Author: thpr Date: 2006-10-29 15:34:39 -0800 (Sun, 29 Oct 2006) Log Message: ----------- A bit more warning stomping and some performance improvements in plugin.* Avoid String + String when a Buffered OutputWriter or StringBuffer is being used Some more Java 1.5 for loops Rewrite PreVisionTester for performance (Avoid List -> String -> Tokenizer -> List conversion) Also requires change in pcgen.* to make VisionType factory case insensitive Pair.java is now generic - makes TravelMethods.java and RBCosts.java redundant classes (deleted) Change bitwise | OR in IF statement to logical OR || Add brackets to some unbracketed IFs Make local variables inside loops be defined inside loops (for clarity - this is not a performance/memory allocation issue in java as it is in other languages) [and technically, it's faster with local assignment if you actually read the bytecode] Eliminate useless imports Eliminate useless null checks Use Boolean.TRUE and Boolean.FALSE, not Boolean.valueOf(true) or (false) Eliminate unnecessary assignments in loops Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/util/enumeration/VisionType.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterInfoTabPanel.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/EquipmentPane.java Trunk/pcgen/code/src/java/plugin/dicebag/gui/DiceBagView.java Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java Trunk/pcgen/code/src/java/plugin/experience/gui/PreferencesExperiencePanel.java Trunk/pcgen/code/src/java/plugin/exporttokens/FollowerToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/TextToken.java Trunk/pcgen/code/src/java/plugin/initiative/gui/AttackDialog.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/race/CrToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/race/FaceToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/race/HitdiceadvancementToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/spell/DescriptorToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/spell/SchoolToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/spell/SubschoolToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/FaceToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/RegionToken.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/network/NetworkModel.java Trunk/pcgen/code/src/java/plugin/network/NetworkServer.java Trunk/pcgen/code/src/java/plugin/notes/gui/NotesTreeNode.java Trunk/pcgen/code/src/java/plugin/notes/gui/NotesView.java Trunk/pcgen/code/src/java/plugin/overland/gui/OverPanel.java Trunk/pcgen/code/src/java/plugin/overland/util/Pair.java Trunk/pcgen/code/src/java/plugin/overland/util/PairList.java Trunk/pcgen/code/src/java/plugin/overland/util/RBCost.java Trunk/pcgen/code/src/java/plugin/overland/util/TravelMethod.java Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerModel.java Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerPlugin.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRuleTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreVisionTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreWeaponProfTester.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCSkillWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreClassWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreFeatWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreMoveWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillMultWriter.java Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillWriter.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/overland/util/RBCosts.java Trunk/pcgen/code/src/java/plugin/overland/util/TravelMethods.java Added: Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -0,0 +1,82 @@ +/* + * 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 October 16, 2006 + * + * Current Ver: $Revision: 1.1 $ + * Last Editor: $Author: thpr $ + * Last Edited: $Date: 2005/06/19 19:07:49 $ + */ +package pcgen.util; + +/** + * @author Tom Parker <th...@so...> + * + * CaseInsensitiveString is designed to be a String-like Object which is fast in + * dealing with case sensitive comparisons in "consistent with equals" + * situations. + * + * Two CaseInsensitiveString objects are equal if the underlying String + * (provided at object construction) would return true to the + * .equalsIgnoreCase(String s) method of java.lang.String. This class therefore + * also overrides the .hashCode() method of Object in order to maintain the + * "consistent with equals" behavior that is appropriate (and expected by + * certain classes, such as java.util.HashMap) + */ +public class CaseInsensitiveString { + + /** + * The String that underlies this CaseInsensitiveString + */ + private final String string; + + /** + * The hashCode for this CaseInsensitiveString. Cached in order to provide + * fast response time to the use of .hashCode() [this is faster than storing + * a second copy of the String that is forced to one case] + */ + private int hashCode = 0; + + /** + * Create a new CaseInsensitiveString with the given String used for the + * basis of [case insensitive] equality of thsi object. + * + * @param s + * The underlying String of this CaseInsensitiveString + */ + public CaseInsensitiveString(String s) { + string = s; + } + + @Override + public boolean equals(Object s) { + return string.equalsIgnoreCase(((CaseInsensitiveString) s).toString()); + } + + @Override + public int hashCode() { + if (hashCode == 0) { + hashCode = string.toUpperCase().hashCode(); + } + return hashCode; + } + + @Override + public String toString() { + return string; + } +} Modified: Trunk/pcgen/code/src/java/pcgen/util/enumeration/VisionType.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/enumeration/VisionType.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/pcgen/util/enumeration/VisionType.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -6,30 +6,32 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.Set; +import pcgen.util.CaseInsensitiveString; + public final class VisionType extends AbstractConstant { - private static Map<String, VisionType> typeMap; + private static Map<CaseInsensitiveString, VisionType> typeMap; public static VisionType getVisionType(String s) { if (typeMap == null) { buildMap(); } + CaseInsensitiveString caseInsensitiveS = new CaseInsensitiveString(s); /* - * CONSIDER Right now this is CASE SENSITIVE. Should this really be the - * case? - thpr 10/25/06 + * CONSIDER Now this is CASE INSENSITIVE. Should this really be the + * case? - thpr 10/28/06 */ - VisionType o = typeMap.get(s); + VisionType o = typeMap.get(caseInsensitiveS); if (o == null) { o = new VisionType(); - typeMap.put(s, o); + typeMap.put(caseInsensitiveS, o); } return o; } private static void buildMap() { - typeMap = new HashMap<String, VisionType>(); + typeMap = new HashMap<CaseInsensitiveString, VisionType>(); Field[] fields = VisionType.class.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { int mod = fields[i].getModifiers(); @@ -39,7 +41,8 @@ try { Object o = fields[i].get(null); if (o instanceof VisionType) { - typeMap.put(fields[i].getName(), (VisionType) o); + typeMap.put(new CaseInsensitiveString(fields[i] + .getName()), (VisionType) o); } } catch (IllegalArgumentException e) { throw new InternalError(); @@ -54,9 +57,9 @@ /* * CLEANUP Oh my, this should NOT be this way */ - for (Map.Entry<String, VisionType> me : typeMap.entrySet()) { + for (Map.Entry<CaseInsensitiveString, VisionType> me : typeMap.entrySet()) { if (me.getValue().equals(this)) { - return me.getKey(); + return me.getKey().toString(); } } // Error Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterInfoTabPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterInfoTabPanel.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/CharacterInfoTabPanel.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -64,6 +64,7 @@ } public PlayerCharacter getPc() { + //TODO Should this be cp.getPC()?? - thpr 10/27/06 return pc; } Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/EquipmentPane.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/EquipmentPane.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/EquipmentPane.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -207,7 +207,7 @@ else { color = CharacterPanel.bodyMedLight; } - Equipment eq = (Equipment)eqList.get(i); + Equipment eq = eqList.get(i); gridY = addLine(eq, color, gridY); } addEnd(gridY, TotalToken.getWeightToken(pc), TotalToken.getValueToken(pc)); Modified: Trunk/pcgen/code/src/java/plugin/dicebag/gui/DiceBagView.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/dicebag/gui/DiceBagView.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/dicebag/gui/DiceBagView.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -549,7 +549,7 @@ /* (non-Javadoc) * @see javax.swing.table.TableModel#getColumnClass(int) */ - public Class getColumnClass(int columnIndex) + public Class<?> getColumnClass(int columnIndex) { return String.class; } Modified: Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -3,12 +3,13 @@ */ package plugin.doomsdaybook.util; +import java.io.Serializable; import java.util.Comparator; /** * DataElementComperator */ -public class DataElementComperator implements Comparator<DataElement> +public class DataElementComperator implements Comparator<DataElement>, Serializable { public int compare(DataElement o1, DataElement o2) { Modified: Trunk/pcgen/code/src/java/plugin/experience/gui/PreferencesExperiencePanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/experience/gui/PreferencesExperiencePanel.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/experience/gui/PreferencesExperiencePanel.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -39,8 +39,8 @@ */ public class PreferencesExperiencePanel extends gmgen.gui.PreferencesPanel { - public static int EXPERIENCE_3 = 1; - public static int EXPERIENCE_35 = 2; + public static final int EXPERIENCE_3 = 1; + public static final int EXPERIENCE_35 = 2; private JPanel mainPanel; private JPanel expPanel; Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/FollowerToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/FollowerToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/FollowerToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -115,20 +115,16 @@ { StringWriter writer = new StringWriter(); BufferedWriter bw = new BufferedWriter(writer); - PlayerCharacter newPC; + + String token = "".equals(followerToken) ? "NAME" : followerToken; + for (PlayerCharacter eachPC : Globals.getPCList()) { if (follower.getFileName().equals(eachPC.getFileName())) { - newPC = eachPC; - - if (followerToken.equals("")) - { - followerToken = "NAME"; - } - + PlayerCharacter newPC = eachPC; Globals.setCurrentPC(newPC); - eh.replaceToken(followerToken, bw, newPC); + eh.replaceToken(token, bw, newPC); Globals.setCurrentPC(pc); } } Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/TextToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/TextToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/TextToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -68,23 +68,23 @@ aTok.nextToken(); //this should be VAR String action = ""; - String varName = ""; + StringBuffer varName = new StringBuffer(); if (aTok.hasMoreElements()) { action = aTok.nextToken(); } if (aTok.hasMoreElements()) { - varName = aTok.nextToken(); + varName.append(aTok.nextToken()); } while (aTok.hasMoreElements()) { - varName += "." + aTok.nextToken(); + varName.append(".").append(aTok.nextToken()); } StringWriter writer = new StringWriter(); BufferedWriter bw = new BufferedWriter(writer); - eh.replaceToken(varName, bw, pc); + eh.replaceToken(varName.toString(), bw, pc); try { bw.flush(); Modified: Trunk/pcgen/code/src/java/plugin/initiative/gui/AttackDialog.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/initiative/gui/AttackDialog.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/initiative/gui/AttackDialog.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -493,25 +493,30 @@ * This array is used to initialize the names of the columns and for returning values from * <code>getColumClass</code> and <code>isCellEditable</code>. */ + /* + * CONSIDER Could this be a List<Blah> where Blah is a type-safe immutable object? + * Seems that might be a way to clean this up to be more understandable - would also + * prevent some object use (Boolean) - thpr 10/27/06 + */ private Object[][] columns = { - { "Bonus", Integer.class, null, Boolean.valueOf(false), COLUMN_KEY_BONUS }, - { "Fudge", Integer.class, Integer.valueOf(0), Boolean.valueOf(true), COLUMN_KEY_FUDGE }, + { "Bonus", Integer.class, null, Boolean.FALSE, COLUMN_KEY_BONUS }, + { "Fudge", Integer.class, Integer.valueOf(0), Boolean.TRUE, COLUMN_KEY_FUDGE }, { - "Increment", Integer.class, Integer.valueOf(m_attack.getRangeAsInt()), Boolean.valueOf(false), + "Increment", Integer.class, Integer.valueOf(m_attack.getRangeAsInt()), Boolean.FALSE, COLUMN_KEY_INCREMENT }, - { "Range", Integer.class, null, Boolean.valueOf(true), COLUMN_KEY_RANGE }, - { "Roll", Integer.class, null, Boolean.valueOf(false), COLUMN_KEY_ROLL }, - { "Total", Integer.class, null, Boolean.valueOf(false), COLUMN_KEY_TOTAL }, - { "Target", PcgCombatant.class, null, Boolean.valueOf(true), COLUMN_KEY_TARGET }, - { "AC", Integer.class, null, Boolean.valueOf(true), COLUMN_KEY_AC }, - { "Crit Roll", Integer.class, null, Boolean.valueOf(false), COLUMN_KEY_CRITROLL }, - { "Crit Total", Integer.class, null, Boolean.valueOf(false), COLUMN_KEY_CRITTOTAL }, - { "Hit", Boolean.class, Boolean.valueOf(false), Boolean.valueOf(true), COLUMN_KEY_HIT }, - { "Crit", Boolean.class, Boolean.valueOf(false), Boolean.valueOf(true), COLUMN_KEY_CRIT }, - { "Dmg", String.class, null, Boolean.valueOf(true), COLUMN_KEY_DMG }, - { "Dmg Tot", Integer.class, null, Boolean.valueOf(true), COLUMN_KEY_DMGTOT } + { "Range", Integer.class, null, Boolean.TRUE, COLUMN_KEY_RANGE }, + { "Roll", Integer.class, null, Boolean.FALSE, COLUMN_KEY_ROLL }, + { "Total", Integer.class, null, Boolean.FALSE, COLUMN_KEY_TOTAL }, + { "Target", PcgCombatant.class, null, Boolean.TRUE, COLUMN_KEY_TARGET }, + { "AC", Integer.class, null, Boolean.TRUE, COLUMN_KEY_AC }, + { "Crit Roll", Integer.class, null, Boolean.FALSE, COLUMN_KEY_CRITROLL }, + { "Crit Total", Integer.class, null, Boolean.FALSE, COLUMN_KEY_CRITTOTAL }, + { "Hit", Boolean.class, Boolean.FALSE, Boolean.TRUE, COLUMN_KEY_HIT }, + { "Crit", Boolean.class, Boolean.FALSE, Boolean.TRUE, COLUMN_KEY_CRIT }, + { "Dmg", String.class, null, Boolean.TRUE, COLUMN_KEY_DMG }, + { "Dmg Tot", Integer.class, null, Boolean.TRUE, COLUMN_KEY_DMGTOT } }; /** @@ -719,11 +724,11 @@ if ((attTotal >= getIntAt(row, columnFromKey(COLUMN_KEY_AC))) || (getIntAt(row, columnFromKey(COLUMN_KEY_ROLL)) >= 20)) { - setValueAt(Boolean.valueOf(true), row, columnFromKey(COLUMN_KEY_HIT)); + setValueAt(Boolean.TRUE, row, columnFromKey(COLUMN_KEY_HIT)); } else { - setValueAt(Boolean.valueOf(false), row, columnFromKey(COLUMN_KEY_HIT)); + setValueAt(Boolean.FALSE, row, columnFromKey(COLUMN_KEY_HIT)); } } @@ -753,11 +758,11 @@ if ((critTotal > getIntAt(row, columnFromKey(COLUMN_KEY_AC))) || (getIntAt(row, columnFromKey(COLUMN_KEY_CRITROLL)) >= 20)) { - setValueAt(Boolean.valueOf(true), row, columnFromKey(COLUMN_KEY_CRIT)); + setValueAt(Boolean.TRUE, row, columnFromKey(COLUMN_KEY_CRIT)); } else { - setValueAt(Boolean.valueOf(false), row, columnFromKey(COLUMN_KEY_CRIT)); + setValueAt(Boolean.FALSE, row, columnFromKey(COLUMN_KEY_CRIT)); } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -1,6 +1,5 @@ package plugin.lsttokens.pcclass; -import java.util.ArrayList; import java.util.StringTokenizer; import pcgen.core.PCClass; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/race/CrToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/race/CrToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/race/CrToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -14,10 +14,11 @@ public boolean parse(Race race, String value) { try { - if (value.startsWith("1/")) { - value = "-" + value.substring(2); + String intValue = value; + if (intValue.startsWith("1/")) { + intValue = "-" + intValue.substring(2); } - race.setCR(Integer.parseInt(value)); + race.setCR(Integer.parseInt(intValue)); return true; } catch(NumberFormatException nfe) { Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/race/FaceToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/race/FaceToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/race/FaceToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -13,18 +13,19 @@ } public boolean parse(Race race, String value) { - if(value.indexOf(",") > -1) { + int commaLoc = value.indexOf(","); + if(commaLoc > -1) { double width; double height; try { - width = Double.parseDouble(value.substring(0, value.indexOf(",") - 1).trim()); + width = Double.parseDouble(value.substring(0, commaLoc - 1).trim()); } catch (NumberFormatException nfe) { width = 5; } try { - height = Double.parseDouble(value.substring(value.indexOf(",") + 1).trim()); + height = Double.parseDouble(value.substring(commaLoc + 1).trim()); } catch (NumberFormatException ne) { height = 5; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/race/HitdiceadvancementToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/race/HitdiceadvancementToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/race/HitdiceadvancementToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -17,12 +17,11 @@ public boolean parse(Race race, String value) { try { final StringTokenizer advancement = new StringTokenizer(value, ","); - String temp; final int[] hitDiceAdvancement = new int[advancement.countTokens()]; for (int x = 0; x < hitDiceAdvancement.length; ++x) { - temp = advancement.nextToken(); + String temp = advancement.nextToken(); if ((temp.length() > 0) && (temp.charAt(0) == '*')) { race.setAdvancementUnlimited(true); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/spell/DescriptorToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/spell/DescriptorToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/spell/DescriptorToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -17,10 +17,9 @@ public boolean parse(Spell spell, String value) { final StringTokenizer tok = new StringTokenizer(value, "|", false); - String token; while (tok.hasMoreTokens()) { - token = tok.nextToken(); + String token = tok.nextToken(); spell.addDescriptor(token); Globals.addSpellDescriptorSet(token); } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/spell/SchoolToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/spell/SchoolToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/spell/SchoolToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -17,10 +17,9 @@ public boolean parse(Spell spell, String value) { final StringTokenizer aTok = new StringTokenizer(value, "|", false); - String token; while (aTok.hasMoreTokens()) { - token = aTok.nextToken(); + String token = aTok.nextToken(); spell.addSchool(token); SettingsHandler.getGame().addToSchoolList(token); } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/spell/SubschoolToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/spell/SubschoolToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/spell/SubschoolToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -16,10 +16,9 @@ public boolean parse(Spell spell, String value) { final StringTokenizer aTok = new StringTokenizer(value, "|", false); - String token; while (aTok.hasMoreTokens()) { - token = aTok.nextToken(); + String token = aTok.nextToken(); spell.addSubschool(token); } return true; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/template/FaceToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/template/FaceToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/template/FaceToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -13,18 +13,19 @@ } public boolean parse(PCTemplate template, String value) { - if(value.indexOf(",") > -1) { + int commaLoc = value.indexOf(","); + if(commaLoc > -1) { double width; double height; try { - width = Double.parseDouble(value.substring(0, value.indexOf(",") - 1).trim()); + width = Double.parseDouble(value.substring(0, commaLoc - 1).trim()); } catch (NumberFormatException nfe) { width = 5; } try { - height = Double.parseDouble(value.substring(value.indexOf(",") + 1).trim()); + height = Double.parseDouble(value.substring(commaLoc + 1).trim()); } catch (NumberFormatException ne) { height = 5; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/template/RegionToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/template/RegionToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/template/RegionToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -14,11 +14,13 @@ } public boolean parse(PCTemplate template, String value) { + String region = value; + //CONSIDER This prohibits any Region that starts with Y ... too general? - thpr 10/27/06 if (value.toUpperCase().startsWith("Y")) { - value = template.getDisplayName(); + region = template.getDisplayName(); } - template.setRegion(value); + template.setRegion(region); return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/template/SubraceToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/template/SubraceToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/template/SubraceToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -14,11 +14,13 @@ } public boolean parse(PCTemplate template, String value) { + String subrace = value; + //CONSIDER This prohibits any SubRace that starts with Y ... too general? - thpr 10/27/06 if (value.toUpperCase().startsWith("Y")) { - value = template.getDisplayName(); + subrace = template.getDisplayName(); } - template.setSubRace(value); + template.setSubRace(subrace); return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/template/SubregionToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/template/SubregionToken.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/template/SubregionToken.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -14,11 +14,13 @@ } public boolean parse(PCTemplate template, String value) { + String subregion = value; + //CONSIDER This prohibits any Sub-Region that starts with Y ... too general? - thpr 10/27/06 if (value.toUpperCase().startsWith("Y")) { - value = template.getDisplayName(); + subregion = template.getDisplayName(); } - template.setSubRegion(value); + template.setSubRegion(subregion); return true; } } Modified: Trunk/pcgen/code/src/java/plugin/network/NetworkModel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/network/NetworkModel.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/network/NetworkModel.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -164,8 +164,7 @@ ThreadGroup tg = server.getThreadGroup(); Thread[] tl = new Thread[tg.activeCount()]; tg.enumerate(tl); - for(int i = 0; i < tl.length; i++) { - Thread t = tl[i]; + for (Thread t : tl) { if(t instanceof NetworkServer) { serverThread = (NetworkServer)t; } @@ -173,7 +172,9 @@ ((NetworkServer.Handler)t).setRun(false); } } - serverThread.setRun(false); + if (serverThread != null) { + serverThread.setRun(false); + } } server = null; log("Local", "Local", "Server Shut Down"); Modified: Trunk/pcgen/code/src/java/plugin/network/NetworkServer.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/network/NetworkServer.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/network/NetworkServer.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -78,8 +78,7 @@ ThreadGroup tg = getThreadGroup(); Thread[] tl = new Thread[tg.activeCount()]; tg.enumerate(tl); - for(int i = 0; i < tl.length; i++) { - Thread t = tl[i]; + for(Thread t : tl) { if(t instanceof NetworkServer.Handler) { ((NetworkServer.Handler)t).sendRemoveUser(user); } @@ -90,12 +89,11 @@ ThreadGroup tg = getThreadGroup(); Thread[] tl = new Thread[tg.activeCount()]; tg.enumerate(tl); - for(int i = 0; i < tl.length; i++) { - Thread t = tl[i]; + for(Thread t : tl) { if(t instanceof NetworkServer.Handler) { ((NetworkServer.Handler)t).sendAddUser("GM"); - for(int j = 0; j < clients.size(); j++) { - ((NetworkServer.Handler)t).sendAddUser(clients.get(j)); + for (String client : clients) { + ((NetworkServer.Handler)t).sendAddUser(client); } } } @@ -105,8 +103,7 @@ ThreadGroup tg = getThreadGroup(); Thread[] tl = new Thread[tg.activeCount()]; tg.enumerate(tl); - for(int i = 0; i < tl.length; i++) { - Thread t = tl[i]; + for(Thread t : tl) { if(t instanceof NetworkServer.Handler) { if(target.equals("Broadcast")) { ((NetworkServer.Handler)t).sendBroadcast(source, text); @@ -122,8 +119,7 @@ ThreadGroup tg = getThreadGroup(); Thread[] tl = new Thread[tg.activeCount()]; tg.enumerate(tl); - for(int i = 0; i < tl.length; i++) { - Thread t = tl[i]; + for(Thread t : tl) { if(t instanceof NetworkServer.Handler) { ((NetworkServer.Handler)t).sendBroadcast(user, text); } @@ -147,8 +143,8 @@ private void handleExitMessage(String user) throws Exception { model.log(user, "Network", "Disconnected"); - for(int i = 0; i < clients.size(); i++) { - String test = clients.get(i); + for ( String test : clients ) + { if(test.equals(user)) { clients.remove(test); break; @@ -314,8 +310,8 @@ view.setConnectionText("Server Status", user + disconnection + clients.size() + " clients connected"); } catch (Exception e) { - for(int i = 0; i < clients.size(); i++) { - String test = clients.get(i); + for ( String test : clients ) + { if(test.equals(user)) { clients.remove(test); break; Modified: Trunk/pcgen/code/src/java/plugin/notes/gui/NotesTreeNode.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/notes/gui/NotesTreeNode.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/notes/gui/NotesTreeNode.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -221,12 +221,11 @@ */ public List<File> getFiles() { ArrayList<File> list = new ArrayList<File>(); - File[] aChildren = dir.listFiles(); - - for (int i = 0; i < aChildren.length; i++) { - if (!aChildren[i].isDirectory()) { - if (!aChildren[i].getName().equals("data.html")) { - list.add(aChildren[i]); + for (File child : dir.listFiles()) + { + if (!child.isDirectory()) { + if (!child.getName().equals("data.html")) { + list.add(child); } } } @@ -678,8 +677,6 @@ * deleted, let the use know. */ public void delete() { - File[] aChildren = dir.listFiles(); - if (!isEmpty()) { int choice = JOptionPane.showConfirmDialog(GMGenSystem.inst, "Node " + dir.getName() + " Contains Content. Delete?", "Node Populated", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); @@ -688,11 +685,12 @@ } try { - for (int i = 0; i < aChildren.length; i++) { - boolean test = aChildren[i].delete(); + for (File child : dir.listFiles()) + { + boolean test = child.delete(); if (!test) { - JOptionPane.showMessageDialog(null, "Cannot delete file " + aChildren[i].getName()); + JOptionPane.showMessageDialog(null, "Cannot delete file " + child.getName()); break; } @@ -818,9 +816,8 @@ } } - for (int i = 0; i < childDirs.size(); i++) { - File childDir = childDirs.get(i); - + for (File childDir : childDirs) + { if (!removeDirs.contains(childDir)) { if (childDir.isDirectory() && !childDir.getName().equals("CVS")) { add(new NotesTreeNode(childDir.getName(), childDir, tree)); @@ -1029,11 +1026,10 @@ private void populate() { hasBeenPopulated = true; - File[] aChildren = dir.listFiles(); - - for (int i = 0; i < aChildren.length; i++) { - if (aChildren[i].isDirectory() && !aChildren[i].getName().equals("CVS")) { - add(new NotesTreeNode(aChildren[i].getName(), aChildren[i], tree)); + for (File child : dir.listFiles()) + { + if (child.isDirectory() && !child.getName().equals("CVS")) { + add(new NotesTreeNode(child.getName(), child, tree)); } } } Modified: Trunk/pcgen/code/src/java/plugin/notes/gui/NotesView.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/notes/gui/NotesView.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/notes/gui/NotesView.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -176,12 +176,8 @@ public Action getActionByName(JTextComponent textComponent, String name) { // TODO: This should be static in a GUIUtilities file - Action[] actionsArray = textComponent.getActions(); - - for (int i = 0; i < actionsArray.length; i++) + for (Action a : textComponent.getActions()) { - Action a = actionsArray[i]; - if (a.getValue(Action.NAME).equals(name)) { return a; @@ -202,11 +198,10 @@ JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(defaultFile); - FileFilter[] ff = plugin.getFileTypes(); - for(int i = 0; i < ff.length; i++) + for (FileFilter filter : plugin.getFileTypes()) { - chooser.addChoosableFileFilter(ff[i]); - chooser.setFileFilter(ff[i]); + chooser.addChoosableFileFilter(filter); + chooser.setFileFilter(filter); } chooser.setMultiSelectionEnabled(true); @@ -215,15 +210,13 @@ if (option == JFileChooser.APPROVE_OPTION) { - File[] noteFiles = chooser.getSelectedFiles(); - - for (int i = 0; i < noteFiles.length; i++) + for (File noteFile : chooser.getSelectedFiles()) { - SettingsHandler.setGMGenOption(NotesPlugin.LOG_NAME + ".LastFile", noteFiles[i].toString()); + SettingsHandler.setGMGenOption(NotesPlugin.LOG_NAME + ".LastFile", noteFile.toString()); - if (noteFiles[i].toString().endsWith(".gmn")) + if (noteFile.toString().endsWith(".gmn")) { - openGMN(noteFiles[i]); + openGMN(noteFile); } } } @@ -418,12 +411,8 @@ { // TODO: Shouldn't this really be a static method in MiscUtils? int num = 0; - File[] entries = count.listFiles(); - - for (int i = 0; i < entries.length; i++) + for (File f : count.listFiles()) { - File f = entries[i]; - if (f.isDirectory()) { num = num + fileCount(f); @@ -594,21 +583,17 @@ protected int writeNotesDir(ZipOutputStream out, File parentDir, File currentDir, ProgressMonitor pm, int progress) throws IOException { - File[] entries = currentDir.listFiles(); - byte[] buffer = new byte[4096]; int bytes_read; int returnValue = progress; - for (int i = 0; i < entries.length; i++) + for (File f : currentDir.listFiles()) { if (pm.isCanceled()) { return 0; } - File f = entries[i]; - if (f.isDirectory()) { returnValue = writeNotesDir(out, parentDir, f, pm, returnValue); @@ -984,7 +969,7 @@ { if (ExtendedHTMLEditorKit.checkParentsTag(htmlDoc.getParagraphElement(editor.getCaretPosition()), HTML.Tag.UL) - | ExtendedHTMLEditorKit.checkParentsTag(htmlDoc.getParagraphElement(editor.getCaretPosition()), + || ExtendedHTMLEditorKit.checkParentsTag(htmlDoc.getParagraphElement(editor.getCaretPosition()), HTML.Tag.OL)) { elem = ExtendedHTMLEditorKit.getListItemParent(htmlDoc.getCharacterElement(editor.getCaretPosition())); @@ -2004,9 +1989,9 @@ */ public void handleImageDropInsertion(File image) { - for (int i = 0; i < extsIMG.length; i++) + for (String s : extsIMG) { - if (image.getName().endsWith(extsIMG[i])) + if (image.getName().endsWith(s)) { try { Modified: Trunk/pcgen/code/src/java/plugin/overland/gui/OverPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/overland/gui/OverPanel.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/overland/gui/OverPanel.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -10,10 +10,9 @@ import org.jdom.Element; import org.jdom.input.SAXBuilder; import pcgen.util.Logging; +import plugin.overland.util.PairList; import plugin.overland.util.RBCost; -import plugin.overland.util.RBCosts; import plugin.overland.util.TravelMethod; -import plugin.overland.util.TravelMethods; import javax.swing.JOptionPane; import javax.swing.SwingConstants; @@ -88,9 +87,9 @@ private javax.swing.JTextField txtWeekTotal; private NumberFormat gp = NumberFormat.getNumberInstance(); private NumberFormat nf = NumberFormat.getNumberInstance(); - private RBCosts animals; //holds animal costs - private RBCosts foods; //holds inn costs - private RBCosts inns; //holds inn costs + private PairList<RBCost> animals; //holds animal costs + private PairList<RBCost> foods; //holds inn costs + private PairList<RBCost> inns; //holds inn costs // End of variables declaration//GEN-END:variables @@ -98,7 +97,7 @@ private HashMap categories = new HashMap(); private VariableHashMap allVars = new VariableHashMap(); */ - private TravelMethods tms; //holds the travel methods list + private PairList<TravelMethod> tms; //holds the travel methods list private boolean StupidKludge = true; /* This is a stupid kludge! * the room & board combo boxes fire events when changed, * and these events trigger updateTopUI @@ -128,7 +127,7 @@ try { float time = nf.parse(txtTime.getText()).floatValue(); - int speed = tms.getMethodAtI(i).getSpeed(); + int speed = tms.get(i).getSpeed(); float result = 0; result = time * speed; txtDist.setText(nf.format(result)); @@ -199,7 +198,7 @@ try { float dist = nf.parse(txtDist.getText()).floatValue(); - int speed = tms.getMethodAtI(i).getSpeed(); + int speed = tms.get(i).getSpeed(); float result = 0; result = dist / speed; txtTime.setText(nf.format(result)); @@ -222,7 +221,7 @@ int speed; int i; i = cmbMethod.getSelectedIndex(); - speed = tms.getMethodAtI(i).getSpeed(); + speed = tms.get(i).getSpeed(); lblSpeed.setText(Integer.toString(speed)); } //GEN-LAST:event_cmbMethodActionPerformed @@ -903,7 +902,7 @@ for (int i = 0; i < tms.getCount(); i++) { - cmbMethod.addItem(tms.getMethodAtI(i).getName()); + cmbMethod.addItem(tms.get(i).getName()); } //End travel methods setup @@ -911,17 +910,17 @@ //the data is loaded into the data structures, now just load the combo boxes for (int i = 0; i < inns.getCount(); i++) { - cmbInn.addItem(inns.getRBCostAtI(i).getName()); + cmbInn.addItem(inns.get(i).getName()); } for (int i = 0; i < foods.getCount(); i++) { - cmbFood.addItem(foods.getRBCostAtI(i).getName()); + cmbFood.addItem(foods.get(i).getName()); } for (int i = 0; i < animals.getCount(); i++) { - cmbAnimal.addItem(animals.getRBCostAtI(i).getName()); + cmbAnimal.addItem(animals.get(i).getName()); } //End costs setup @@ -941,9 +940,9 @@ private void loadRB(String DataPath) { //Create a new list for the room and board - inns = new RBCosts(); - foods = new RBCosts(); - animals = new RBCosts(); + inns = new PairList<RBCost>(); + foods = new PairList<RBCost>(); + animals = new PairList<RBCost>(); File path = new File(DataPath); @@ -1020,15 +1019,15 @@ */ if (type.equals("Inn")) { - inns.addRBCost(new RBCost(name, priceF)); + inns.add(new RBCost(name, priceF)); } else if (type.equals("Food")) { - foods.addRBCost(new RBCost(name, priceF)); + foods.add(new RBCost(name, priceF)); } else if (type.equals("Animal")) { - animals.addRBCost(new RBCost(name, priceF)); + animals.add(new RBCost(name, priceF)); } } } @@ -1037,7 +1036,7 @@ private void loadTM(String DataPath) { //Create a new list for the travel methods - tms = new TravelMethods(); + tms = new PairList<TravelMethod>(); File path = new File(DataPath); @@ -1105,7 +1104,7 @@ JOptionPane.showMessageDialog(null, "Invalid number formatin XML File"); } - tms.addTravelMethod(new TravelMethod(name, speedI)); + tms.add(new TravelMethod(name, speedI)); } } } @@ -1207,15 +1206,15 @@ int i3; i1 = cmbFood.getSelectedIndex(); - float food = foods.getRBCostAtI(i1).getCost(); + float food = foods.get(i1).getCost(); i2 = cmbInn.getSelectedIndex(); - float inn = inns.getRBCostAtI(i2).getCost(); + float inn = inns.get(i2).getCost(); i3 = cmbAnimal.getSelectedIndex(); - float animal = animals.getRBCostAtI(i3).getCost(); + float animal = animals.get(i3).getCost(); try { Modified: Trunk/pcgen/code/src/java/plugin/overland/util/Pair.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/overland/util/Pair.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/overland/util/Pair.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -11,16 +11,16 @@ * IT OPERATES ON ORIGINAL INSTANCES! BE CAREFUL! * @author Juliean Galak */ -public abstract class Pair +public abstract class Pair<K, V> { - private Object left; //store one item here - private Object right; //store other item here + private K left; //store one item here + private V right; //store other item here /** Creates a new instance of TravelMethod * @param left - left Object to add * @param right - right Object to add */ - public Pair(Object left, Object right) + public Pair(K left, V right) { this.left = left; this.right = right; @@ -31,22 +31,22 @@ this(null, null); } - protected void setLeft(Object left) + protected void setLeft(K left) { this.left = left; } - protected Object getLeft() + protected K getLeft() { return left; } - protected void setRight(Object right) + protected void setRight(V right) { this.right = right; } - protected Object getRight() + protected V getRight() { return right; } Modified: Trunk/pcgen/code/src/java/plugin/overland/util/PairList.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/overland/util/PairList.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/overland/util/PairList.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -5,19 +5,20 @@ */ package plugin.overland.util; -import java.util.Vector; +import java.util.ArrayList; +import java.util.List; /** Class that holds a set of travel methods and speeds * * @author Juliean Galak */ -public abstract class PairList +public class PairList<T extends Pair<?,?>> { - private Vector<Pair> vPairs; + private List<T> vPairs; public PairList() { - vPairs = new Vector<Pair>(); + vPairs = new ArrayList<T>(); } public int getCount() @@ -25,12 +26,12 @@ return vPairs.size(); } - protected Pair getElementAtI(int i) + public T get(int i) { return vPairs.get(i); } - protected void addPair(Pair p) + public void add(T p) { vPairs.add(p); } Modified: Trunk/pcgen/code/src/java/plugin/overland/util/RBCost.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/overland/util/RBCost.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/overland/util/RBCost.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -10,7 +10,7 @@ * * @author Juliean Galak */ -public class RBCost extends Pair +public class RBCost extends Pair<String, Float> { /** Creates a new instance of TravelMethod * @param name - String containing name @@ -34,7 +34,7 @@ public float getCost() { - return (((Float) super.getRight()).floatValue()); + return super.getRight().floatValue(); } public void setName(String name) @@ -44,6 +44,6 @@ public String getName() { - return (String) super.getLeft(); + return super.getLeft(); } } Deleted: Trunk/pcgen/code/src/java/plugin/overland/util/RBCosts.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/overland/util/RBCosts.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/overland/util/RBCosts.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -1,29 +0,0 @@ -/* - * TravelMethods.java - * - * Created on July 22, 2003, 10:17 PM - */ -package plugin.overland.util; - - -/** Class that holds a set of travel methods and speeds - * - * @author Juliean Galak - */ -public class RBCosts extends PairList -{ - public RBCosts() - { - super(); - } - - public RBCost getRBCostAtI(int i) - { - return (RBCost) super.getElementAtI(i); - } - - public void addRBCost(RBCost rbc) - { - super.addPair(rbc); - } -} Modified: Trunk/pcgen/code/src/java/plugin/overland/util/TravelMethod.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/overland/util/TravelMethod.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/overland/util/TravelMethod.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -10,7 +10,7 @@ * * @author Juliean Galak */ -public class TravelMethod extends Pair +public class TravelMethod extends Pair<String, Integer> { /** Creates a new instance of TravelMethod * @param name - String containing name @@ -45,7 +45,7 @@ */ public String getName() { - return (String) super.getLeft(); + return super.getLeft(); } /** @@ -63,6 +63,6 @@ */ public int getSpeed() { - return (((Integer) super.getRight()).intValue()); + return super.getRight().intValue(); } } Deleted: Trunk/pcgen/code/src/java/plugin/overland/util/TravelMethods.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/overland/util/TravelMethods.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/overland/util/TravelMethods.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -1,41 +0,0 @@ -/* - * TravelMethods.java - * - * Created on July 22, 2003, 10:17 PM - */ -package plugin.overland.util; - - -/** Class that holds a set of travel methods and speeds - * - * @author Juliean Galak - */ -public class TravelMethods extends PairList -{ - /** - * Constructor - */ - public TravelMethods() - { - super(); - } - - /** - * Get the travel method - * @param i - * @return the travel method - */ - public TravelMethod getMethodAtI(int i) - { - return (TravelMethod) super.getElementAtI(i); - } - - /** - * Add a travel method - * @param tm - */ - public void addTravelMethod(TravelMethod tm) - { - super.addPair(tm); - } -} Modified: Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerModel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerModel.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerModel.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -84,10 +84,10 @@ outbuf.append(" "); } - outbuf.append(pcOut.getName() + " ("); - outbuf.append(pcOut.getRaceName() + " "); - outbuf.append(pcOut.getClasses() + " "); - outbuf.append(pcOut.getGender() + ")"); + outbuf.append(pcOut.getName()).append(" ("); + outbuf.append(pcOut.getRaceName()).append(" "); + outbuf.append(pcOut.getClasses()).append(" "); + outbuf.append(pcOut.getGender()).append(")"); return outbuf.toString(); } Modified: Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerPlugin.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerPlugin.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pcgtracker/PCGTrackerPlugin.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -123,22 +123,18 @@ if (e.getSource() == theView.getSaveButton()) { - Object[] list = theView.getLoadedList().getSelectedValues(); - - for (int i = 0; i < list.length; i++) + for (Object obj : theView.getLoadedList().getSelectedValues()) { - PlayerCharacter pc = model.get(list[i]); + PlayerCharacter pc = model.get(obj); savePC(pc, false); } } if (e.getSource() == theView.getSaveAsButton()) { - Object[] list = theView.getLoadedList().getSelectedValues(); - - for (int i = 0; i < list.length; i++) + for (Object obj : theView.getLoadedList().getSelectedValues()) { - PlayerCharacter pc = model.get(list[i]); + PlayerCharacter pc = model.get(obj); savePC(pc, true); } } @@ -153,6 +149,12 @@ public void handleClose() { + /* + * TODO This method seems like a "dead" chain of events - the PCs are + * fetched, but nothing happens. As best I can tell, none of these + * methods have side effects (that is good), but that means this method + * does nothing. - thpr 10/26/06 + */ if (model.size() > 0) { GMGenSystemView.getTabPane().setSelectedComponent(theView); @@ -208,15 +210,12 @@ else if (message instanceof PCClosedMessage) { PCClosedMessage cmessage = (PCClosedMessage) message; - Object[] list = theView.getLoadedList().getSelectedValues(); - - for (int i = 0; i < list.length; i++) + for (Object obj : theView.getLoadedList().getSelectedValues()) { - PlayerCharacter pc = model.get(list[i]); - + PlayerCharacter pc = model.get(obj); if (pc == cmessage.getPC()) { - model.removeElement(list[i]); + model.removeElement(obj); } } } @@ -249,15 +248,13 @@ if (option == JFileChooser.APPROVE_OPTION) { - File[] pcFiles = chooser.getSelectedFiles(); - - for (int i = 0; i < pcFiles.length; i++) + for (File selectedFile : chooser.getSelectedFiles()) { - SettingsHandler.setPcgPath(pcFiles[i].getParentFile()); + SettingsHandler.setPcgPath(selectedFile.getParentFile()); - if (PCGFile.isPCGenCharacterOrPartyFile(pcFiles[i])) + if (PCGFile.isPCGenCharacterOrPartyFile(selectedFile)) { - GMBus.send(new OpenPCGRequestMessage(this, pcFiles[i], false)); + GMBus.send(new OpenPCGRequestMessage(this, selectedFile, false)); } } } @@ -282,12 +279,10 @@ public void removeSelected() { - Object[] list = theView.getLoadedList().getSelectedValues(); - - for (int i = 0; i < list.length; i++) + for (Object obj : theView.getLoadedList().getSelectedValues()) { - PlayerCharacter pc = model.get(list[i]); - model.removeElement(list[i]); + PlayerCharacter pc = model.get(obj); + model.removeElement(obj); GMBus.send(new PCClosedMessage(this, pc)); } } @@ -401,7 +396,7 @@ public void toolMenuItem(ActionEvent evt) { JTabbedPane tp = GMGenSystemView.getTabPane(); - + for (int i = 0; i < tp.getTabCount(); i++) { if (tp.getComponentAt(i) instanceof PCGTrackerView) Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRuleTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRuleTester.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRuleTester.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -113,9 +113,9 @@ runningTotal = 1; } + final PrerequisiteTestFactory factory = PrerequisiteTestFactory.getInstance(); for (Prerequisite element : prereq.getPrerequisites()) { - final PrerequisiteTestFactory factory = PrerequisiteTestFactory.getInstance(); final PrerequisiteTest test = factory.getTest(element.getKind()); if (test != null) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreVisionTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreVisionTester.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreVisionTester.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -27,10 +27,11 @@ package plugin.pretokens.test; import pcgen.core.PlayerCharacter; +import pcgen.core.Vision; import pcgen.core.prereq.AbstractPrerequisiteTest; import pcgen.core.prereq.Prerequisite; import pcgen.core.prereq.PrerequisiteTest; -import pcgen.core.utils.CoreUtility; +import pcgen.util.enumeration.VisionType; /** @@ -44,43 +45,22 @@ * @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter) */ public int passes(final Prerequisite prereq, final PlayerCharacter character) { - final String requiredVision = prereq.getKey().toUpperCase(); - final int requiredRange = Integer.parseInt( prereq.getOperand() ); - int charVisionRange = 0; - boolean foundVision = false; + final int requiredRange = Integer.parseInt(prereq.getOperand()); + int runningTotal = 0; + VisionType requiredVisionType = VisionType.getVisionType(prereq.getKey()); - final String[] charVisions = character.getVision().split(","); //$NON-NLS-1$ - for (int i = 0; i < charVisions.length && !foundVision ; i++) { - String charVision = charVisions[i]; - charVision = CoreUtility.replaceAll(charVision, " ", ""); //$NON-NLS-1$ //$NON-NLS-2$ - charVision = CoreUtility.replaceAll(charVision, "'", ""); //$NON-NLS-1$ //$NON-NLS-2$ - - if (charVision.toUpperCase().startsWith( requiredVision )) { - // Extract the range integer from the character - // vision string - foundVision = true; - if (charVision.indexOf("(") > 0) //$NON-NLS-1$ - { - String wString = charVision.substring(charVision.indexOf("(") + 1); //$NON-NLS-1$ - wString = wString.substring(0, wString.length() - 1); - try - { - charVisionRange = Integer.parseInt(wString); - } - catch (NumberFormatException e) - { - charVisionRange = 0; - } - } + for (Vision charVision : character.getVisionList()) + { + if (charVision.getType().equals(requiredVisionType)) + { + int visionRange = Integer.parseInt(charVision.getDistance()); + runningTotal += prereq.getOperator().compare(visionRange, requiredRange); + break; } } - - final int runningTotal = prereq.getOperator().compare(charVisionRange, requiredRange); return countedTotal(prereq, runningTotal); } - - /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#kindsHandled() */ Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreWeaponProfTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreWeaponProfTester.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreWeaponProfTester.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -34,9 +34,6 @@ import pcgen.core.utils.CoreUtility; import pcgen.util.PropertyFactory; -import java.util.Iterator; - - /** * @author wardc * @@ -83,11 +80,12 @@ final String aString = prereq.getKey(); if ("DEITYWEAPON".equals(aString) && character.getDeity() != null) //$NON-NLS-1$ { - for (Iterator<String> weapIter = CoreUtility.split(character.getDeity().getFavoredWeapon(), '|').iterator(); weapIter.hasNext();) + for (String weaponKey : CoreUtility.split(character.getDeity().getFavoredWeapon(), '|')) { - final String weaponKey = weapIter.next(); if (character.hasWeaponProfKeyed(weaponKey)) + { runningTotal++; + } } } else if (aString.startsWith("TYPE.") || aString.startsWith("TYPE=")) //$NON-NLS-1$ //$NON-NLS-2$ @@ -115,7 +113,9 @@ else { if (character.hasWeaponProfKeyed(aString)) + { runningTotal++; + } } runningTotal = prereq.getOperator().compare(runningTotal, number); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCSkillWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCSkillWriter.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreCSkillWriter.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -78,7 +78,9 @@ writer.write(prereq.getKey() ); if (prereq.getSubKey() != null) { - writer.write( " (" + prereq.getSubKey() + ")"); + writer.write(" ("); + writer.write(prereq.getSubKey()); + writer.write(")"); } } 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-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreClassWriter.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -74,7 +74,9 @@ } writer.write("PRECLASS:1,"); - writer.write(prereq.getKey() + "=" + prereq.getOperand() ); + writer.write(prereq.getKey()); + writer.write('='); + writer.write(prereq.getOperand()); } 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-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreFeatWriter.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -82,7 +82,9 @@ writer.write(prereq.getKey() ); if (prereq.getSubKey() != null) { - writer.write( " (" + prereq.getSubKey() + ")"); + writer.write(" ("); + writer.write(prereq.getSubKey()); + writer.write(")"); } } 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-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreMoveWriter.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -75,7 +75,9 @@ } writer.write("PREMOVE:1,"); - writer.write(prereq.getKey() + "=" + prereq.getOperand() ); + writer.write(prereq.getKey()); + writer.write('='); + writer.write(prereq.getOperand()); } catch (IOException e) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillMultWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillMultWriter.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillMultWriter.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -82,7 +82,9 @@ { writer.write("PRESKILL:1,"); } - writer.write(prereq.getKey() + "=" + prereq.getOperand() ); + writer.write(prereq.getKey()); + writer.write('='); + writer.write(prereq.getOperand()); } catch (IOException e) { Modified: Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillWriter.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillWriter.java 2006-10-29 21:50:16 UTC (rev 1557) +++ Trunk/pcgen/code/src/java/plugin/pretokens/writer/PreSkillWriter.java 2006-10-29 23:34:39 UTC (rev 1558) @@ -82,12 +82,15 @@ { writer.write("PRESKILL:1,"); } - String toWrite = prereq.getKey(); + writer.write(prereq.getKey()); if (prereq.getSubKey() != null) { - toWrite += " (" + prereq.... [truncated message content] |
From: <th...@us...> - 2006-10-31 04:16:17
|
Revision: 1565 http://svn.sourceforge.net/pcgen/?rev=1565&view=rev Author: thpr Date: 2006-10-30 20:15:53 -0800 (Mon, 30 Oct 2006) Log Message: ----------- PCClass Changes, part of 1460794 (Remove token parsing from core): CLASSSKILL now parsed in the Tag, creates a ChoiceList in PCClass CLASSSPELL now parsed in the Tag, creates a ChoiceList in PCClass FEATAUTOS now parsed in the Tag, creates an ArrayList<LevelProperty<String>> in PCClass PROHIBITED now parsed in the Tag, creates a List<String> in PCClass None of the above tags yet implement better type safety (which could be done) Bug Fix to ProhibitedSpellType for PROHIBITSPELL:SCHOOL.xxx Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.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/editor/EditorMainForm.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/FeatautoToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitedToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SkilllistToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpelllistToken.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/core/utils/ChoiceList.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -40,12 +40,14 @@ import pcgen.core.prereq.PrereqHandler; import pcgen.core.prereq.Prerequisite; import pcgen.core.spell.Spell; +import pcgen.core.utils.ChoiceList; import pcgen.core.utils.CoreUtility; import pcgen.core.utils.ListKey; import pcgen.core.utils.MessageType; 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; @@ -120,7 +122,7 @@ * should be stored in a series of LevelProperty objects) need to be placed * into each individual PCClassLevel when it is constructed. */ - private ArrayList<String> featAutos = null; + private ArrayList<LevelProperty<String>> featAutos = null; /* * TYPESAFETY The Feats should be type safe, not Strings... @@ -379,28 +381,16 @@ private String castAs = Constants.EMPTY_STRING; /* - * REFACTOR This is actually a challenge in refactoring PCClassLevel out of - * PCClass. This actually does a deferral to another class' Skill List. - * - * This is possible to do in a reasonable way, given that there is a Global - * Class list. - * - * However, this gets a LOT more complicated when you consider that this MAY - * have to enforce the same skikll list across multiple instantiations of - * this PCClass (meaning multiple PCClassLevels). This is because it could - * be CLASSSKILL:2,Druid|Ranger|Sorcerer ... the user only gets to select - * two... the question being, does it always have to be the same two?? If - * SO, can that trigger a multi-class situation, and still use the same - * class, or is the user stuck with the original choice? - */ - /* * ALLCLASSLEVELS The selected delegate skill lists (not the raw - * classSkellString) need to be stored in EACH individual PCClassLevel. This - * is the case because each individual PCClassLevel will be capable of + * classSkillChoices) need to be stored in EACH individual PCClassLevel. + * This is the case because each individual PCClassLevel will be capable of * granting skills, and this is the delegate to determine what is * appropriate (skill-wise) for any given PCClassLevel. */ - private String classSkillString = null; + /* + * TYPESAFETY This should be better than a String... + */ + private ChoiceList<String> classSkillChoices = null; /* * REFACTOR This is actually a moderate challenge in refactoring @@ -422,7 +412,7 @@ * holding individual spells known and spells cast (per day) and this is the * delegate to determine what is appropriate for any given PCClassLevel. */ - private String classSpellString = null; + private ChoiceList<String> classSpellChoices = null; /* * TYPESAFETY The Deity List should be something other than Strings @@ -514,7 +504,11 @@ * Known and Cast are granted by each PCClassLevel, this must be passed into * each and every PCClassLevel (though it can be given in its pure form). */ - private String prohibitedString = Constants.s_NONE; + /* + * TYPESAFETY Since this is storing Spell Schools/SubSchools, this should + * be type safe + */ + private List<String> prohibitedSchools = null; /* * DELETEVARIABLE This variable is never used (get method is never called) @@ -1349,38 +1343,15 @@ return total; } - /** - * Set the Class Skill string - * - * @param aString - */ /* - * STRINGREFACTOR This is currently passing in a 1,A|B String that needs to - * be parsed back in the SKILLLIST tag - */ - /* * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass since it is * a Tag */ - public final void setClassSkillString(final String aString) { - classSkillString = aString; + public void setClassSkillChoices(int choiceCount, List<String> choices) { + classSkillChoices = ChoiceList.getChoiceList(choiceCount, choices); } - /** - * Return the value set by the SKILLLIST token - * - * @return The pipe-delimited list of class skills - */ /* - /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in - * PCClass for PCClassLevel creation (in the factory) - */ - public final String getClassSkillString() { - return classSkillString; - } - - /* * REFACTOR this to get it out into the exporttoken class (is that possible?) */ public List<String> getClassSpecialAbilityList(final PlayerCharacter aPC) { @@ -1558,15 +1529,31 @@ } /* + * PCCLASSONLY This is only for PCClass - used to edit the class + */ + public final Collection<LevelProperty<String>> getAllFeatAutos() { + if (featAutos == null) { + List<LevelProperty<String>> empty = Collections.emptyList(); + return Collections.unmodifiableCollection(empty); + } else { + return Collections.unmodifiableCollection(featAutos); + } + } + + /* * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final Collection<String> getFeatAutos() { - if (featAutos == null) { - final List<String> ret = Collections.emptyList(); - return Collections.unmodifiableList(ret); + List<String> returnList = new ArrayList<String>(); + if (featAutos != null) { + for (LevelProperty<String> autoFeat : featAutos) { + if (autoFeat.getLevel() <= level) { + returnList.add(autoFeat.getObject()); + } + } } - return Collections.unmodifiableList(featAutos); + return returnList; } // public Collection<String> getAutoAbilityList(final AbilityCategory aCategory) @@ -1592,6 +1579,28 @@ /** * Removes an AUTO feat from the list of feats this class grants. * + * @param aFeat + * The feat string to remove. + */ + /* + * PCCLASSONLY This is for GUI construction of a PCClass and is therefore + * only required in PCClass and not PCClassLevel + */ + public boolean removeFeatAuto(String type) { + if (featAutos == null) { + return false; + } + for (LevelProperty<String> autoFeat : featAutos) { + if (autoFeat.getObject().equals(type)) { + return featAutos.remove(autoFeat); + } + } + return false; + } + + /** + * Removes an AUTO feat from the list of feats this class grants. + * * @param aLevel * The level the feat would have been granted at. * @param aFeat @@ -1601,11 +1610,16 @@ * PCCLASSONLY This is for GUI construction of a PCClass and is therefore * only required in PCClass and not PCClassLevel */ - public final void removeFeatAuto(final int aLevel, final String aFeat) { + public boolean removeFeatAuto(int aLevel, String type) { if (featAutos == null) { - return; + return false; } - featAutos.remove(Integer.toString(aLevel) + Constants.PIPE + aFeat); + for (LevelProperty<String> autoFeat : featAutos) { + if (autoFeat.getLevel() == aLevel && autoFeat.getObject().equals(type)) { + return featAutos.remove(autoFeat); + } + } + return false; } // public void removeAutoAbility(final AbilityCategory aCategory, final int aLevel, final String aKey) @@ -1956,28 +1970,26 @@ } /* - * STRINGREFACTOR This is currently processed outside of this set (it is a , - * delimited list) This processing needs to be moved back into the - * PROHIBITED Tag - */ - /* - * TYPESAFETY This is actually passing around DOMAINs of Spells, and thus - * can be made type safe. - */ - /* * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass because it * is a Tag */ - public final void setProhibitedString(final String aString) { - prohibitedString = aString; + public final boolean addProhibitedSchool(String school) { + if (prohibitedSchools == null) { + prohibitedSchools = new ArrayList<String>(); + } + if (prohibitedSchools.contains(school)) { + return false; + } else { + return prohibitedSchools.add(school); + } } - + /* * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public final String getProhibitedString() { - return prohibitedString; + public final List<String> getProhibitedSchools() { + return prohibitedSchools; } /* @@ -2284,10 +2296,6 @@ } /* - * STRINGREFACTOR This is currently taking in a delimited String and should - * be taking in a List or somesuch. - */ - /* * TYPESAFETY This is throwing around Spell names as Strings. :( */ /* @@ -2308,16 +2316,16 @@ * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass * because it is a Tag */ - public final void setSpellLevelString(final String aString) { - classSpellString = aString; + public final void setClassSpellChoices(int choiceCount, List<String> choices) { + classSpellChoices = ChoiceList.getChoiceList(choiceCount, choices); } /* * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public final String getSpellLevelString() { - return classSpellString; + public final ChoiceList<String> getClassSpellChoices() { + return classSpellChoices; } /* @@ -3135,14 +3143,6 @@ } /* - * STRINGREFACTOR This is currently taking in a delimited String and should - * be taking in a List or somesuch. The processing needs to be moved back - * into the FEATAUTO tag - * - * In addition, this needs to be using LevelProperty here in PCClass, since - * it is level dependent. - */ - /* * TYPESAFETY This is throwing around Feat names as Strings. :( */ /* @@ -3150,37 +3150,25 @@ * require this method. The PCClassLevelversion should NOT be level * dependent */ - public void setFeatAutos(final int aLevel, final String aString) { - final StringTokenizer aTok = new StringTokenizer(aString, - Constants.PIPE); - final String prefix = aLevel + Constants.PIPE; - + public void addFeatAuto(final int aLevel, final String aString) { if (featAutos == null) { - featAutos = new ArrayList<String>(); + featAutos = new ArrayList<LevelProperty<String>>(); } - // TODO - This token processing should happen in the token. - while (aTok.hasMoreTokens()) { - final String fName = aTok.nextToken(); + featAutos.add(LevelProperty.getLevelProperty(aLevel, aString)); + } - if (fName.startsWith(".CLEAR")) { - if (fName.startsWith(".CLEAR.")) { - final String postFix = Constants.PIPE + fName.substring(7); - - // remove feat by name, must run through all 20 levels - for (int i = 0; i < 45; ++i) { - featAutos.remove(i + postFix); - } - } else // clear em all - { - featAutos.clear(); - } - } else { - featAutos.add(prefix + fName); - } + /* + * PCCLASSONLY This is an editor and loader requirement, therefore + * PCClass only + */ + public void clearFeatAutos() { + if (featAutos != null) + { + featAutos.clear(); } } -// public void setAutoAbilities(final AbilityCategory aCategory, final int aLevel, final List<String> aList) + // public void setAutoAbilities(final AbilityCategory aCategory, final int aLevel, final List<String> aList) // { // if ( aCategory == AbilityCategory.FEAT ) // { @@ -3839,7 +3827,12 @@ checkAdd(pccTxt, "ANY", "DEITY:", CoreUtility.join(deityList, '|')); checkAdd(pccTxt, "", "ATTACKCYCLE", attackCycle); checkAdd(pccTxt, "", "CASTAS:", castAs); - checkAdd(pccTxt, Constants.s_NONE, "PROHIBITED:", prohibitedString); + + if (prohibitedSchools != null) { + pccTxt.append('\t').append("PROHIBITED:"); + pccTxt.append(CollectionUtilities.joinStringRepresentations(prohibitedSchools, ",")); + } + checkAdd(pccTxt, Constants.s_NONE, "SPELLSTAT:", spellBaseStat); checkAdd(pccTxt, Constants.s_NONE, "SPELLTYPE:", spellType); @@ -3898,12 +3891,14 @@ pccTxt.append("\tITEMCREATE:").append(itemCreationMultiplier); } - if (classSpellString != null) { - pccTxt.append("\tSPELLLIST:").append(classSpellString).append('\t'); + if (classSpellChoices != null) { + checkAdd(pccTxt, "", "SPELLLIST:", classSpellChoices.toString()); } checkAdd(pccTxt, "", "SPECIALS:", specialsString); - checkAdd(pccTxt, "", "SKILLLIST:", classSkillString); + if (classSkillChoices != null) { + checkAdd(pccTxt, "", "SKILLLIST:", classSkillChoices.toString()); + } if (getWeaponProfBonus().size() != 0) { pccTxt.append("\tWEAPONBONUS:"); @@ -4073,8 +4068,14 @@ buildPccText(pccTxt, getFeatList().iterator(), ":", "\tFEAT:", lineSep); // TODO - Add ABILITY tokens. - buildPccText(pccTxt, getFeatAutos().iterator(), Constants.PIPE, - "\tFEATAUTO:", lineSep); + if (featAutos != null) + { + for (LevelProperty<String> autoFeat : featAutos) + { + pccTxt.append(lineSep).append(autoFeat.getLevel()); + pccTxt.append("\tFEATAUTO:").append(autoFeat.getObject()); + } + } // TODO - This should be removed. if ((uattList != null) && (uattList.size() != 0)) { @@ -4225,11 +4226,20 @@ */ public void addClassSpellList(final String tok) { if (classSpellList == null) { - newClassSpellList(); + classSpellList = new ArrayList<String>(); + } else { + classSpellList.clear(); } classSpellList.add(tok); - classSpellString = null; + /* + * CONSIDER I have taken out classSpellString = null; which is now the + * equivalent of classSpellChoices = null; ... I don't understand why in + * this unique situation of Player Character Import that resetting this + * produces better behavior than adding a class (which doesn't delete + * the list). Seems to me a case of unnecessary (and confusing) + * deletion... - thpr 10/29/06 + */ stableSpellKey = null; } @@ -4696,7 +4706,9 @@ aClass.setSubClassKey(getSubClassKey()); // aClass.setSubClassString(getSubClassString()); - aClass.setProhibitedString(getProhibitedString()); + if (prohibitedSchools != null) { + aClass.prohibitedSchools = new ArrayList<String>(prohibitedSchools); + } aClass.setHitDie(hitDie); // aClass.setSkillPoints(skillPoints); aClass.setSkillPointFormula(skillPointFormula); @@ -4734,7 +4746,7 @@ hitDieLockMap); } if (featAutos != null) { - aClass.featAutos = new ArrayList<String>(featAutos); + aClass.featAutos = new ArrayList<LevelProperty<String>>(featAutos); } // if ( theAutoAbilities != null ) // { @@ -4743,9 +4755,7 @@ // TODO - Why is this not copying the skillList from the master? aClass.skillList = null; - aClass.classSkillString = classSkillString; aClass.classSkillList = null; - aClass.classSpellString = classSpellString; aClass.classSpellList = null; aClass.stableSpellKey = null; @@ -5423,18 +5433,15 @@ } } - final StringTokenizer aTok = new StringTokenizer(prohibitedString, ",", - false); - - while (aTok.hasMoreTokens()) { - final String a = aTok.nextToken(); - - if (aSpell.getSchools().contains(a) - || aSpell.getSubschools().contains(a)) { - return true; + if (prohibitedSchools != null) { + for (String school : prohibitedSchools) { + if (aSpell.getSchools().contains(school) + || aSpell.getSubschools().contains(school)) { + return true; + } } } - + return false; } @@ -7012,7 +7019,7 @@ List<List<SubClass>> selectedList = c.getSelectedList(); if (!selectedList.isEmpty()) { - setProhibitedString(""); + prohibitedSchools = null; specialtyList = null; SubClass sc = selectedList.get(0).get(0); @@ -7057,12 +7064,7 @@ .hasNext();) { final List columns = i.next(); sc = (SubClass) columns.get(0); - - if (prohibitedString.length() > 0) { - prohibitedString = prohibitedString.concat(","); - } - - prohibitedString = prohibitedString.concat(sc.getChoice()); + addProhibitedSchool(sc.getChoice()); } } } @@ -7116,35 +7118,21 @@ */ private void chooseClassSkillList() { // if no entry or no choices, just return - if (classSkillString == null) { + if (classSkillChoices == null) { return; } - final StringTokenizer aTok = new StringTokenizer(classSkillString, "|", - false); - int amt = 0; - - if (classSkillString.indexOf('|') >= 0) { - amt = Integer.parseInt(aTok.nextToken()); - } - - final List<String> aList = new ArrayList<String>(); - - while (aTok.hasMoreTokens()) { - aList.add(aTok.nextToken()); - } - - if (aList.size() == 1) { - classSkillList = aList; - + List<String> classSkillChoiceList = classSkillChoices.getList(); + if (classSkillChoiceList.size() == 1) { + classSkillList = classSkillChoiceList; return; } final ChooserInterface c = ChooserFactory.getChooserInstance(); c.setTitle("Select class whose class-skills this class will inherit"); - c.setPool(amt); + c.setPool(classSkillChoices.getCount()); c.setPoolFlag(false); - c.setAvailableList(aList); + c.setAvailableList(classSkillChoiceList); c.setVisible(true); final List<String> selectedList = c.getSelectedList(); @@ -7161,35 +7149,21 @@ */ private void chooseClassSpellList() { // if no entry or no choices, just return - if ((classSpellString == null) || (level < 1)) { + if (classSpellChoices == null) { return; } - final StringTokenizer aTok = new StringTokenizer(classSpellString, "|", - false); - int amt = 0; - - if (classSpellString.indexOf('|') >= 0) { - amt = Integer.parseInt(aTok.nextToken()); - } - - final List<String> aList = new ArrayList<String>(); - - while (aTok.hasMoreTokens()) { - aList.add(aTok.nextToken()); - } - - if (aList.size() == amt) { - classSpellList = aList; - + List<String> classSpellChoiceList = classSpellChoices.getList(); + if (classSpellChoiceList.size() == 1) { + classSpellList = classSpellChoiceList; return; } final ChooserInterface c = ChooserFactory.getChooserInstance(); c.setTitle("Select class whose list of spells this class will use"); - c.setPool(amt); + c.setPool(classSpellChoices.getCount()); c.setPoolFlag(false); - c.setAvailableList(aList); + c.setAvailableList(classSpellChoiceList); c.setVisible(true); final List<String> selectedList = c.getSelectedList(); @@ -7214,6 +7188,9 @@ * PCClass. Either way, this will be far from its current form in the final * solution. */ + /* + * CONSIDER Why does this not inherit classSkillChoices? + */ private void inheritAttributesFrom(final PCClass otherClass) { if (otherClass.getBonusSpellBaseStat() != null) { setBonusSpellBaseStat(otherClass.getBonusSpellBaseStat()); @@ -7223,9 +7200,7 @@ setSpellBaseStat(otherClass.getSpellBaseStat()); } - if (otherClass.classSpellString != null) { - classSpellString = otherClass.classSpellString; - } + classSpellChoices = otherClass.classSpellChoices; addAutoArray(otherClass.getSafeListFor(ListKey.AUTO_ARRAY)); @@ -7332,18 +7307,6 @@ } } - /* - * REFACTOR to DELETEMETHOD This is only called in one place, it should - * be inlined for clarity - not worth the separate method call - */ - private void newClassSpellList() { - if (classSpellList == null) { - classSpellList = new ArrayList<String>(); - } else { - classSpellList.clear(); - } - } - /** * Rolls hp for the current level according to the rules set in options. * @@ -7536,14 +7499,13 @@ { if (featAutos != null) { - for (int x = featAutos.size() - 1; x >= 0; --x) + for (Iterator<LevelProperty<String>> it = featAutos.iterator(); it + .hasNext();) { - StringTokenizer aTok = new StringTokenizer(featAutos.get(x), "|", false); - final int level = Integer.parseInt(aTok.nextToken()); - - if (level == aLevel) + LevelProperty<String> autoFeat = it.next(); + if (autoFeat.getLevel() == aLevel) { - featAutos.remove(x); + it.remove(); } } } Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -16423,35 +16423,8 @@ { for (final Iterator<String> e1 = aClass.getFeatAutos().iterator(); e1.hasNext();) { - // - // PCClass object have auto feats stored in format: - // lvl|feat_name - // - final String aString = e1.next(); + String autoFeat = e1.next(); - if (aString.indexOf('|') < 1) - { - continue; - } - - final StringTokenizer aTok = new StringTokenizer(aString, Constants.PIPE); - int i; - - try - { - i = Integer.parseInt(aTok.nextToken()); - } - catch (NumberFormatException exc) - { - continue; - } - - if (i > aClass.getLevel()) - { - continue; - } - - String autoFeat = aTok.nextToken(); final int idx = autoFeat.indexOf('['); if (idx >= 0) Added: Trunk/pcgen/code/src/java/pcgen/core/utils/ChoiceList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/utils/ChoiceList.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/core/utils/ChoiceList.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -0,0 +1,62 @@ +/* + * 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 October 29, 2006. + * + * Current Ver: $Revision: 1111 $ + * Last Editor: $Author: boomer70 $ + * Last Edited: $Date: 2006-06-22 21:22:44 -0400 (Thu, 22 Jun 2006) $ + */ +package pcgen.core.utils; + +import java.util.List; + +import pcgen.core.Constants; +import pcgen.util.CollectionUtilities; + +public class ChoiceList<T> { + + private final List<T> list; + + private final int count; + + public ChoiceList(int choiceCount, List<T> choiceList) { + count = choiceCount; + list = choiceList; + } + + public int getCount() { + return count; + } + + public List<T> getList() { + return list; + } + + public String toString() { + return count + + Constants.PIPE + + CollectionUtilities.joinStringRepresentations(list, + Constants.PIPE); + } + + public static <E> ChoiceList<E> getChoiceList(int choiceCount, + List<E> choiceList) { + return new ChoiceList<E>(choiceCount, choiceList); + } + +} Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -25,6 +25,12 @@ import pcgen.core.*; import pcgen.core.utils.CoreUtility; import pcgen.gui.utils.JComboBoxEx; +import pcgen.io.EntityEncoder; +import pcgen.persistence.lst.PCClassLstToken; +import pcgen.persistence.lst.TokenStore; +import pcgen.util.CollectionUtilities; +import plugin.lsttokens.pcclass.ProhibitedToken; +import plugin.lsttokens.pcclass.SpelllistToken; import javax.swing.*; import java.awt.GridBagConstraints; @@ -136,7 +142,9 @@ if (a.length() > 0) { - obj.setProhibitedString(a); + PCClassLstToken token = (PCClassLstToken) TokenStore.inst() + .getTokenMap(PCClassLstToken.class).get("PROHIBITED"); + token.parse(obj, a, -9); } a = specialtyKnown.getText().trim(); @@ -147,13 +155,9 @@ } obj.setSpellBookUsed(spellBook.getSelectedObjects() != null); - a = spellList.getText().trim(); + + SpelllistToken.parseSpellList(obj, spellList.getText().trim()); - if (a.length() > 0) - { - obj.setSpellLevelString(a); - } - //a = spellStat.getText().trim(); //if (a.length() > 0) //{ @@ -219,7 +223,7 @@ } knownSpells.setText(known.toString()); memorize.setSelected(obj.getMemorizeSpells()); - prohibited.setText(obj.getProhibitedString()); + prohibited.setText(CollectionUtilities.joinStringRepresentations(obj.getProhibitedSchools(), ",")); StringBuffer specKnown = new StringBuffer(); for (Iterator iter = obj.getSpecialtyKnownList().iterator(); iter.hasNext();) @@ -233,7 +237,7 @@ } specialtyKnown.setText(specKnown.toString()); spellBook.setSelected(obj.getSpellBookUsed()); - spellList.setText(obj.getSpellLevelString()); + spellList.setText(obj.getClassSpellChoices().toString()); //spellStat.setText(obj.getSpellBaseStat()); //spellType.setText(obj.getSpellType()); Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -315,25 +315,10 @@ } } - Collection aCol = obj.getFeatAutos(); - - if (aCol != null) + for ( final LevelProperty<String> c : obj.getAllFeatAutos() ) { - for (Iterator se = aCol.iterator(); se.hasNext();) - { - String c = (String) se.next(); - int y = c.indexOf('|'); - - try - { - LevelTag lt = new LevelTag(c.substring(0, y), LevelTag.TAG_FEATAUTO, c.substring(y + 1)); - levelTagList.add(lt); - } - catch (Exception exc) - { - Logging.errorPrint("Unrecognized FEATAUTO format:" + c, exc); - } - } + LevelTag lt = new LevelTag(c.getLevel(), LevelTag.TAG_FEATAUTO, c.getObject()); + levelTagList.add(lt); } /* Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -1010,7 +1010,7 @@ PCClass thisPCClass = (PCClass) thisPObject; thisPCClass.clearTemplates(); thisPCClass.addUmult(".CLEAR"); - thisPCClass.setFeatAutos(-1, ".CLEAR"); + thisPCClass.clearFeatAutos(); thisPCClass.addUdamList(".CLEAR"); break; Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -78,6 +78,7 @@ 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; @@ -745,12 +746,13 @@ b.append(aClass.getSpecialtyListString(pc)).append("</b><br>"); //$NON-NLS-1$ } - if (aClass.getProhibitedString().length() != 0) + if (aClass.getProhibitedSchools() != null) { b.append(PropertyFactory .getString("InfoSpells.prohibited.school")); //$NON-NLS-1$ b.append("<b>"); //$NON-NLS-1$ - b.append(aClass.getProhibitedString()).append("</b><br>"); //$NON-NLS-1$ + b.append(CollectionUtilities.joinStringRepresentations(aClass.getProhibitedSchools(), ",")); + b.append("</b><br>"); //$NON-NLS-1$ } String bString = aClass.getDefaultSourceString(); Modified: Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -1705,7 +1705,7 @@ { if (pcClass.getLevel() > 0) { - if (!pcClass.getProhibitedString().equals(Constants.s_NONE)) + if (pcClass.getProhibitedSchools() != null) { return 0; } Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -37,8 +37,11 @@ import pcgen.io.parsers.CharacterDomainParser; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.PersistenceManager; +import pcgen.persistence.lst.PCClassLstToken; +import pcgen.persistence.lst.TokenStore; import pcgen.util.Logging; import pcgen.util.PropertyFactory; +import plugin.lsttokens.pcclass.ProhibitedToken; import java.util.*; @@ -539,7 +542,9 @@ } aClass.setSubClassKey(subClassKey); - aClass.setProhibitedString(prohibitedString); + PCClassLstToken token = (PCClassLstToken) TokenStore.inst() + .getTokenMap(PCClassLstToken.class).get("PROHIBITED"); + token.parse(aClass, prohibitedString, -9); } // Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -39,6 +39,7 @@ import java.util.*; import pcgen.core.pclevelinfo.PCLevelInfoStat; +import pcgen.util.CollectionUtilities; /** * <code>PCGVer2Creator</code><br> @@ -787,13 +788,13 @@ buffer.append(pcClass.getCastStringForLevel(classLevel)); } - final String prohibited = pcClass.getProhibitedString(); + List<String> prohibited = pcClass.getProhibitedSchools(); - if (!Constants.EMPTY_STRING.equals(prohibited)) + if (prohibited != null) { buffer.append('|'); buffer.append(TAG_PROHIBITED).append(':'); - buffer.append(EntityEncoder.encode(prohibited)); + buffer.append(EntityEncoder.encode(CollectionUtilities.joinStringRepresentations(prohibited, ","))); } buffer.append(LINE_SEP); Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -41,8 +41,11 @@ import pcgen.io.parsers.CharacterDomainParser; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.PersistenceManager; +import pcgen.persistence.lst.PCClassLstToken; +import pcgen.persistence.lst.TokenStore; import pcgen.util.Logging; import pcgen.util.PropertyFactory; +import plugin.lsttokens.pcclass.ProhibitedToken; import java.math.BigDecimal; import java.util.*; @@ -1714,7 +1717,9 @@ } else if (TAG_PROHIBITED.equals(tag)) { - aPCClass.setProhibitedString(EntityEncoder.decode(element.getText())); + PCClassLstToken token = (PCClassLstToken) TokenStore.inst() + .getTokenMap(PCClassLstToken.class).get(TAG_PROHIBITED); + token.parse(aPCClass, EntityEncoder.decode(element.getText()), -9); } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -434,10 +434,15 @@ featLoader.loadLstFiles(featFileList); raceLoader.loadLstFiles(raceFileList); + + //Domain must load before CLASS - thpr 10/29/06 domainLoader.loadLstFiles(domainFileList); + + //Spell must load before CLASS - thpr 10/30/06 + spellLoader.loadLstFiles(spellFileList); + classLoader.loadLstFiles(classFileList); deityLoader.loadLstFiles(deityFileList); - spellLoader.loadLstFiles(spellFileList); // loaded before equipment to cover costs Modified: Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -9,8 +9,10 @@ DESCRIPTOR("Descriptor") { public Collection<String>getCheckList(Spell s) { return s.getDescriptorList(); }}, - SCHOOL("Export") { public Collection<String>getCheckList(Spell s) { return s.getSchools(); }}; + SCHOOL("School") { public Collection<String>getCheckList(Spell s) { return s.getSchools(); }}, + SUBSCHOOL("SubSchool") { public Collection<String>getCheckList(Spell s) { return s.getSubschools(); }}; + private final String text; ProhibitedSpellType(String s) Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/ProhibitedListToken.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -25,7 +25,6 @@ */ package plugin.exporttokens; -import pcgen.core.Constants; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; import pcgen.io.ExportHandler; @@ -67,7 +66,7 @@ } else { - jointext = ", "; + jointext = ","; } List<String> stringList = new ArrayList<String>(); @@ -76,9 +75,19 @@ { if (pcClass.getLevel() > 0) { - if (!pcClass.getProhibitedString().equals(Constants.s_NONE)) + if (pcClass.getProhibitedSchools() != null) { - stringList.add(pcClass.getProhibitedString()); + /* + * CONSIDER This was changed from adding + * pcClass.getProhibitedString() directly into stringList, + * which was adding a string which was "," delimited into + * the List, which gets joined by ", " below... SOOOOO, in + * THEORY, it is easier to add the individual items here and + * let the join happen in one step below - but it will + * change some spacing!! I hope this doesn't break anything :) - + * thpr 10/29/06 + */ + stringList.addAll(pcClass.getProhibitedSchools()); } } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/FeatautoToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/FeatautoToken.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/FeatautoToken.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -1,5 +1,9 @@ package plugin.lsttokens.pcclass; +import java.util.ArrayList; +import java.util.StringTokenizer; + +import pcgen.core.Constants; import pcgen.core.PCClass; import pcgen.persistence.lst.PCClassLstToken; @@ -13,7 +17,21 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setFeatAutos(level, value); + final StringTokenizer aTok = new StringTokenizer(value, Constants.PIPE); + + while (aTok.hasMoreTokens()) { + final String fName = aTok.nextToken(); + + if (fName.startsWith(".CLEAR")) { + if (fName.startsWith(".CLEAR.")) { + pcclass.removeFeatAuto(fName.substring(7)); + } else { + pcclass.clearFeatAutos(); + } + } else { + pcclass.addFeatAuto(level, fName); + } + } return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitedToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitedToken.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitedToken.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -1,5 +1,8 @@ package plugin.lsttokens.pcclass; +import java.util.StringTokenizer; + +import pcgen.core.Constants; import pcgen.core.PCClass; import pcgen.persistence.lst.PCClassLstToken; @@ -13,7 +16,14 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setProhibitedString(value); + final StringTokenizer aTok = new StringTokenizer(value, ","); + while (aTok.hasMoreTokens()) { + String prohibitedSchool = aTok.nextToken(); + if (!prohibitedSchool.equals(Constants.s_NONE)) + { + pcclass.addProhibitedSchool(prohibitedSchool); + } + } return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SkilllistToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SkilllistToken.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SkilllistToken.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -1,7 +1,12 @@ 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; /** * Class deals with SKILLLIST Token @@ -13,7 +18,29 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setClassSkillString(value); + final StringTokenizer aTok = new StringTokenizer(value, "|"); + int skillCount = 0; + + if (value.indexOf('|') >= 0) { + try { + skillCount = Integer.parseInt(aTok.nextToken()); + } catch (NumberFormatException e) { + Logging.errorPrint("Import error: Expected first value of " + + "SKILLLIST token with a | to be a number"); + return false; + } + } + + final List<String> skillChoices = new ArrayList<String>(); + + while (aTok.hasMoreTokens()) { + skillChoices.add(aTok.nextToken()); + } + + //Protection against a "" value parameter + if (skillChoices.size() > 0) { + pcclass.setClassSkillChoices(skillCount, skillChoices); + } return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpelllistToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpelllistToken.java 2006-10-31 00:18:10 UTC (rev 1564) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpelllistToken.java 2006-10-31 04:15:53 UTC (rev 1565) @@ -1,7 +1,12 @@ 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; /** * Class deals with SPELLLIST Token @@ -13,7 +18,33 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setSpellLevelString(value); + return parseSpellList(pcclass, value); + } + + public static boolean parseSpellList(PCClass pcclass, String value) { + final StringTokenizer aTok = new StringTokenizer(value, "|"); + int spellCount = 0; + + if (value.indexOf('|') >= 0) { + try { + spellCount = Integer.parseInt(aTok.nextToken()); + } catch (NumberFormatException e) { + Logging.errorPrint("Import error: Expected first value of " + + "SPELLLIST token with a | to be a number"); + return false; + } + } + + final List<String> spellChoices = new ArrayList<String>(); + + while (aTok.hasMoreTokens()) { + spellChoices.add(aTok.nextToken()); + } + + //Protection against a "" value parameter + if (spellChoices.size() > 0) { + pcclass.setClassSpellChoices(spellCount, spellChoices); + } return true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-11-02 01:16:04
|
Revision: 1567 http://svn.sourceforge.net/pcgen/?rev=1567&view=rev Author: thpr Date: 2006-11-01 17:15:34 -0800 (Wed, 01 Nov 2006) Log Message: ----------- PCClass Changes, part of 1460794 (Remove token parsing from core): SR now parsed in the Tag ATTACKCYCLE now parsed in the Tag, String no longer stored in PCClass, directly loads attackCycleMap KNOWNSPELLS now parsed in the Tag, creates a List in PCClass Fix for Bug 1580948: SPECIALTYKNOWN is now based on LevelProperty, not a List that assumes it appears in every Class Level line Other PCClass changes: FeatList eliminates the ":" separator, also uses LevelProperty Changed PCC output of PCClass to account for the fact that SPECIALTYKNOWN is level dependent Type Safety: AttackType (MELEE, RANGED, etc.) is now type safe GUI: Eliminate SpecialtyKnown from ClassAbilityPanel (it is level dependent, cannot be edited in a useful way in that panel) Added Feature Req 1588269 to get SPECIALTYKNOWN supported in ClassLevelPanel Misc: Add license information to DoubleKeyMap (I missed that when I created it??) Change getSecondaryKeySet of DoubleKeyMap to avoid exposing the internal Maps to accidental manipulation 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/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.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/editor/EditorMainForm.java Trunk/pcgen/code/src/java/pcgen/io/exporttoken/AttackToken.java Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java Trunk/pcgen/code/src/java/pcgen/util/DoubleKeyMap.java Trunk/pcgen/code/src/java/plugin/lsttokens/SrLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/AttackcycleToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/KnownspellsToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpecialtyknownToken.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java Trunk/pcgen/code/src/java/pcgen/util/enumeration/AttackType.java Modified: Trunk/pcgen/code/src/java/gmgen/plugin/PlayerCharacterOutput.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/plugin/PlayerCharacterOutput.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/gmgen/plugin/PlayerCharacterOutput.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -3,6 +3,7 @@ import pcgen.core.*; import pcgen.io.ExportHandler; import pcgen.util.CollectionUtilities; +import pcgen.util.enumeration.AttackType; import java.io.BufferedWriter; import java.io.File; @@ -208,7 +209,7 @@ int tohitBonus = (int) pc.getTotalBonusTo("TOHIT", "TOHIT") + (int) pc.getTotalBonusTo("TOHIT", "TYPE.MELEE") + (int) pc.getTotalBonusTo("COMBAT", "TOHIT") + (int) pc.getTotalBonusTo("COMBAT", "TOHIT.MELEE"); - return pc.getAttackString(Constants.ATTACKSTRING_MELEE, tohitBonus); + return pc.getAttackString(AttackType.MELEE, tohitBonus); } public String getName() @@ -226,7 +227,7 @@ int tohitBonus = (int) pc.getTotalBonusTo("TOHIT", "TOHIT") + (int) pc.getTotalBonusTo("TOHIT", "TYPE.RANGED") + (int) pc.getTotalBonusTo("COMBAT", "TOHIT") + (int) pc.getTotalBonusTo("COMBAT", "TOHIT.RANGED"); - return pc.getAttackString(Constants.ATTACKSTRING_MELEE, tohitBonus); + return pc.getAttackString(AttackType.MELEE, tohitBonus); } public String getRegion() Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -54,6 +54,7 @@ import pcgen.util.Logging; import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; +import pcgen.util.enumeration.AttackType; import pcgen.util.enumeration.DefaultTriState; import pcgen.util.enumeration.VisionType; @@ -132,7 +133,7 @@ * account for that and actually store these by level and put them into the * appropriate PCClassLevel. */ - private ArrayList<String> featList = null; + private ArrayList<LevelProperty<String>> featList = null; /* * ALLCLASSLEVELS Since the known list is class level dependent, it needs to @@ -161,7 +162,7 @@ * LevelProperty (if it gets used)] (not the raw Strings) need to be stored * in EACH individual PCClassLevel. */ - private ArrayList<String> specialtyknownList = null; + private ArrayList<LevelProperty<String>> specialtyknownList = null; /* * STRINGREFACTOR This is currently taking in a delimited String and should @@ -810,7 +811,7 @@ * item from the second one. For small maps, this can be > 50% memory * savings. */ - private HashMap<String, String> attackCycleMap = null; + private HashMap<AttackType, String> attackCycleMap = null; // private DoubleKeyMap<AbilityCategory, Integer, List<String>> theAutoAbilities = null; @@ -1644,9 +1645,9 @@ * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public final List<String> getFeatList() { + public final List<LevelProperty<String>> getFeatList() { if (featList == null) { - final List<String> ret = Collections.emptyList(); + final List<LevelProperty<String>> ret = Collections.emptyList(); return Collections.unmodifiableList(ret); } return Collections.unmodifiableList(featList); @@ -2681,17 +2682,31 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in - * PCClass for PCClassLevel creation (in the factory) + * PCCLASSONLY This is required in PCClass for PCClass editing */ - public final Collection<String> getSpecialtyKnownList() { + public final Collection<LevelProperty<String>> getSpecialtyKnownList() { if (specialtyknownList == null) { - final List<String> ret = Collections.emptyList(); + final List<LevelProperty<String>> ret = Collections.emptyList(); return Collections.unmodifiableList(ret); } return Collections.unmodifiableList(specialtyknownList); } + /* + * PCCLASSLEVELONLY This is required in PCClassLevel and should be present in + * PCClass for PCClassLevel creation (in the factory) + */ + public final String getSpecialtyKnownList(int aLevel) { + if (specialtyknownList != null) { + for (LevelProperty<String> lp : specialtyknownList) { + if (lp.getLevel() == aLevel) { + return lp.getObject(); + } + } + } + return null; + } + /** * Adds the numeric value given to the number of specialty school spells * that the class can cast per spell level. @@ -2704,8 +2719,6 @@ * * <p> * TODO - Why is this stored as a String???? - * <p> - * TODO - Why is this a list? */ /* * STRINGREFACTOR This should really be stored as an Array, not as a String, @@ -2716,20 +2729,14 @@ * done from there. */ /* - * BUG This is not correctly accounting for the LEVEL of the SPECIALTYKNOWN. - * If SPECIALTYKNOWN did not appear in EACH AND EVERY level then something - * would break. It should be stored as a Map of levels, taking the level - * from the SPECIALTYKNOWN Tag call. - */ - /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public final void addSpecialtyKnown(final String aNumber) { + public final void addSpecialtyKnown(int aLevel, String aNumber) { if (specialtyknownList == null) { - specialtyknownList = new ArrayList<String>(2); + specialtyknownList = new ArrayList<LevelProperty<String>>(); } - specialtyknownList.add(aNumber); + specialtyknownList.add(LevelProperty.getLevelProperty(aLevel, aNumber)); } /** @@ -2898,35 +2905,23 @@ } } - StringTokenizer aTok; - int x = spellLevel; + String aString = getSpecialtyKnownList(pcLevel); + if (aString != null) + { + StringTokenizer aTok = new StringTokenizer(aString, ","); + int x = spellLevel; - /* - * REFACTOR This should really be calling a getSpecialtyKnownList(int - * level) method. - */ - for (final String aString : getSpecialtyKnownList()) { - if (pcLevel == 1) { - aTok = new StringTokenizer(aString, ","); + while (aTok.hasMoreTokens()) { + final String spells = aTok.nextToken(); + final int t = Integer.parseInt(spells); - while (aTok.hasMoreTokens()) { - final String spells = aTok.nextToken(); - final int t = Integer.parseInt(spells); + if (x == 0) { + total += t; - if (x == 0) { - total += t; - - break; - } - - --x; + break; } - } - --pcLevel; - - if (pcLevel < 1) { - break; + --x; } } @@ -3676,35 +3671,22 @@ * @param srString */ /* - * STRINGREFACTOR This should be moved OUT of PCClass and put into the SR - * Tag. - */ - /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public void setSR(final String srString) { - if (".CLEAR".equals(srString)) { - SR = null; - - return; + public void setSR(int aLevel, String srString) { + if (SR == null) { + SR = new ArrayList<LevelProperty<String>>(); } - - final StringTokenizer aTok = new StringTokenizer(srString, - Constants.PIPE, false); - final int lvl = Integer.parseInt(aTok.nextToken()); - final String tokenSrString = aTok.nextToken(); - - if (".CLEAR".equals(tokenSrString)) { - SR = null; - } else { - if (SR == null) { - SR = new ArrayList<LevelProperty<String>>(); - } - - SR.add(LevelProperty.getLevelProperty(lvl, tokenSrString)); - } + SR.add(LevelProperty.getLevelProperty(aLevel, srString)); } + + /* + * PCCLASSONLY Since this is part of LST file import + */ + public void clearSR() { + SR = null; + } /** * Assumption: SR list is sorted by level. @@ -3941,8 +3923,16 @@ } } - for (final String known : getSpecialtyKnownList()) { - pccTxt.append("\tSPECIALTYKNOWN:").append(known); + /* + * 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) { + pccTxt.append(lineSep).append(lp.getLevel()).append("\tSPECIALTYKNOWN:") + .append(lp.getObject()); + } } pccTxt.append(lineSep); @@ -4065,7 +4055,14 @@ } } - buildPccText(pccTxt, getFeatList().iterator(), ":", "\tFEAT:", lineSep); + if (featList != null) + { + for (LevelProperty<String> lp : featList) + { + pccTxt.append(lineSep).append(lp.getLevel()); + pccTxt.append("\tFEATAUTO:").append(lp.getObject()); + } + } // TODO - Add ABILITY tokens. if (featAutos != null) @@ -4285,22 +4282,16 @@ } /* - * STRINGREFACTOR This needs to store a LevelProperty object that contains a - * Domain, NOT a String, especially a | or : delimited String... !! - */ - /* * PCCLASSANDLEVEL This needs to be in both PCClass (since it's imported from * a Tag) and PCClassLevel (although the PCClassLevel version should not be * level dependent) */ public void addFeatList(final int aLevel, final String aFeatList) { - // TODO - Why oh Why do we need yet another separator. // TODO - Make this not string based. - final String aString = aLevel + ":" + aFeatList; if (featList == null) { - featList = new ArrayList<String>(); + featList = new ArrayList<LevelProperty<String>>(); } - featList.add(aString); + featList.add(LevelProperty.getLevelProperty(aLevel, aFeatList)); } /* @@ -4334,41 +4325,25 @@ } /* - * STRINGREFACTOR This is currently taking in a delimited String and should - * be taking in a List or somesuch. The processing needs to be moved back - * into the KNOWNSPELL tag. Actually, this needs to use LevelProperty to - * make the proper assignments. - */ - /* * TYPESAFETY This is throwing around Spell names as Strings. :( */ /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public void addKnownSpellsList(final String aString) { - + public void addKnownSpell(final String aString) { if (knownSpellsList == null) { knownSpellsList = new ArrayList<String>(); } - final StringTokenizer aTok; - - if (aString.startsWith(".CLEAR")) { - knownSpellsList.clear(); - - if (".CLEAR".equals(aString)) { - return; - } - - aTok = new StringTokenizer(aString.substring(6), "|", false); - } else { - aTok = new StringTokenizer(aString, "|", false); - } - - while (aTok.hasMoreTokens()) { - knownSpellsList.add(aTok.nextToken()); - } + knownSpellsList.add(aString); } + + /* + * PCCLASSONLY - for class construction + */ + public void clearKnownSpellsList() { + knownSpellsList = null; + } /** * Add a level of this class to the character. Note this call is assumed to @@ -4549,29 +4524,10 @@ * PlayerCharacter.getAttackString()) to determine what the final attack * bonuses are. */ - public int attackCycle(final int index) { - String aKey = null; - + public int attackCycle(final AttackType at) { if (attackCycleMap != null) { - /* - * TYPESAFETY These Constants could be a Typesafe Enumeration, and - * that would be a good thing for memory use (less strings) and - * error catching (note that this method does not complain if the - * index is out of bounds) - */ - if (index == Constants.ATTACKSTRING_MELEE) { - // Base attack - aKey = "BAB"; - } else if (index == Constants.ATTACKSTRING_RANGED) { - // Ranged attack - aKey = "RAB"; - } else if (index == Constants.ATTACKSTRING_UNARMED) { - // Unarmed attack - aKey = "UAB"; - } + final String aString = attackCycleMap.get(at); - final String aString = attackCycleMap.get(aKey); - if (aString != null) { return Integer.parseInt(aString); } @@ -4713,12 +4669,11 @@ // aClass.setSkillPoints(skillPoints); aClass.setSkillPointFormula(skillPointFormula); aClass.setInitialFeats(initialFeats); - aClass.setSpellBaseStat(spellBaseStat); aClass.setBonusSpellBaseStat(bonusSpellBaseStat); aClass.setSpellType(spellType); // aClass.setAttackBonusType(attackBonusType); if (specialtyknownList != null) { - aClass.specialtyknownList = new ArrayList<String>( + aClass.specialtyknownList = new ArrayList<LevelProperty<String>>( specialtyknownList); } if (knownList != null) { @@ -4731,7 +4686,7 @@ aClass.uattList = new ArrayList<String>(uattList); // aClass.acList = new ArrayList<String>(acList); if (featList != null) { - aClass.featList = new ArrayList<String>(featList); + aClass.featList = new ArrayList<LevelProperty<String>>(featList); } // aClass.vFeatList = (ArrayList) vFeatList.clone(); if (vFeatMap != null) { @@ -4773,9 +4728,8 @@ if (knownSpellsList != null) { aClass.knownSpellsList = new ArrayList<String>(knownSpellsList); } - aClass.attackCycle = attackCycle; if (attackCycleMap != null) { - aClass.attackCycleMap = new HashMap<String, String>( + aClass.attackCycleMap = new HashMap<AttackType, String>( attackCycleMap); } aClass.castAs = castAs; @@ -6948,11 +6902,12 @@ } } - for (String feats : getFeatList()) { - if (aLevel == Integer.parseInt(getToken(0, feats, ":"))) { + for (LevelProperty<String> lp : getFeatList()) { + if (lp.getLevel() == aLevel) + { final double preFeatCount = aPC.getUsedFeatCount(); - AbilityUtilities.modFeatsFromList(aPC, pcLevelInfo, getToken(1, - feats, ":"), addThem, aLevel == 1); + AbilityUtilities.modFeatsFromList(aPC, pcLevelInfo, lp + .getObject(), addThem, aLevel == 1); final double postFeatCount = aPC.getUsedFeatCount(); @@ -7453,37 +7408,24 @@ * Unparsed ATTACKCYCLE string. */ /* - * DELETEMETHOD by putting this back in the ATTACKCYCLE tag. That should - * then provide an attackCycleMap into PCClass. + * PCCLASSANDLEVEL since this is from a TAG and also is required in + * the PCClassLevel */ - public final void setAttackCycle(final String aString) { - attackCycle = aString; - if (aString.indexOf('|') == -1) - return; - - final StringTokenizer aTok = new StringTokenizer(attackCycle, - Constants.PIPE); - - while (aTok.hasMoreTokens()) { - final String attackType = aTok.nextToken(); - final String aVal = aTok.nextToken(); - if (attackCycleMap == null) { - attackCycleMap = new HashMap<String, String>(); - } - attackCycleMap.put(attackType, aVal); + public final void setAttackCycle(AttackType at, String aString) { + if (attackCycleMap == null) { + attackCycleMap = new HashMap<AttackType, String>(); } + attackCycleMap.put(at, aString); } - - /** - * Returns the unadjusted unprocessed attackCycle. - * - * @return The base attackCycle string. - */ + /* - * DELETEMETHOD since attackCycle will be deleted + * PCCLASSONLY Only for editing classes */ - public final String getAttackCycle() { - return attackCycle; + public final Map<AttackType, String> getAttackCycle() { + if (attackCycleMap == null) { + return null; + } + return Collections.unmodifiableMap(attackCycleMap); } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -1674,17 +1674,21 @@ } /** - * Set the SR (or clear it) + * Set the SR * @param newSR */ - public void setSR(String newSR) + public void setSR(int aLevel, String newSR) { - if (".CLEAR".equals(newSR)) - { - newSR = null; - } stringChar.put(StringKey.SR_FORMULA, newSR); } + + /** + * Clear the SR + */ + public void clearSRList() + { + stringChar.remove(StringKey.SR_FORMULA); + } /** * Get the SR Formula Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -83,6 +83,7 @@ import pcgen.util.DoubleKeyMap; import pcgen.util.Logging; import pcgen.util.PropertyFactory; +import pcgen.util.enumeration.AttackType; import pcgen.util.enumeration.Load; import pcgen.util.enumeration.Visibility; import pcgen.util.enumeration.VisionType; @@ -4125,15 +4126,14 @@ setDirty(true); } - public String getAttackString(final int index) + public String getAttackString(AttackType at) { - // index: 0 = melee; 1 = ranged; 2 = unarmed - return getAttackString(index, 0); + return getAttackString(at, 0); } - public String getAttackString(final int index, final int bonus) + public String getAttackString(AttackType at, final int bonus) { - return getAttackString(index, bonus, 0); + return getAttackString(at, bonus, 0); } /** @@ -4146,12 +4146,8 @@ * only the size of the attacks generated. The second increases both * the size and number of attacks * - * @param index The type of attack. Takes one of three values; - * <ul> - * <li> Constants.ATTACKSTRING_MELEE - * <li> Constants.ATTACKSTRING_RANGED - * <li> Constants.ATTACKSTRING_UNARMED - * </ul> + * @param index The type of attack. Takes an AttackType (an enumeration) + * * @param TOHITBonus A bonus that will be added to the TOHIT numbers. This * bonus affects only the numbers produced, not the number * of attacks @@ -4161,9 +4157,9 @@ * @return The attack string for this character */ - public String getAttackString(final int index, final int TOHITBonus, int BABBonus) + public String getAttackString(AttackType at, final int TOHITBonus, int BABBonus) { - final String cacheLookup = "AttackString:" + index + "," + TOHITBonus + "," + BABBonus; + final String cacheLookup = "AttackString:" + at.getIdentifier() + "," + TOHITBonus + "," + BABBonus; final String cached = getVariableProcessor().getCachedString(cacheLookup); if (cached != null) @@ -4226,7 +4222,7 @@ final int b = pcClass.baseAttackBonus(this); // Get the attack cycle - final int c = pcClass.attackCycle(index); + final int c = pcClass.attackCycle(at); // add to all other classes final int d = ab.get(c).intValue() + b; Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassAbilityPanel.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -23,13 +23,14 @@ package pcgen.gui.editor; import pcgen.core.*; +import pcgen.core.utils.ChoiceList; import pcgen.core.utils.CoreUtility; import pcgen.gui.utils.JComboBoxEx; -import pcgen.io.EntityEncoder; import pcgen.persistence.lst.PCClassLstToken; import pcgen.persistence.lst.TokenStore; import pcgen.util.CollectionUtilities; -import plugin.lsttokens.pcclass.ProhibitedToken; +import pcgen.util.MapCollection; +import pcgen.util.enumeration.AttackType; import plugin.lsttokens.pcclass.SpelllistToken; import javax.swing.*; @@ -40,6 +41,8 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; /** * <code>ClassAbilityPanel</code> @@ -65,7 +68,6 @@ private JTextField levelsPerFeat = new JTextField(); private JTextField maxLevel = new JTextField(); private JTextField prohibited = new JTextField(); - private JTextField specialtyKnown = new JTextField(); private JTextField spellList = new JTextField(); /** Creates new form ClassAbilityPanel */ @@ -87,7 +89,9 @@ if (a.length() > 0) { - obj.setAttackCycle(a); + PCClassLstToken token = (PCClassLstToken) TokenStore.inst() + .getTokenMap(PCClassLstToken.class).get("ATTACKCYCLE"); + token.parse(obj, a, -9); } a = hitDice.getText().trim(); @@ -133,8 +137,12 @@ if (a.length() > 0) { - obj.addKnownSpellsList(".CLEAR"); - obj.addKnownSpellsList(a); + obj.clearKnownSpellsList(); + final StringTokenizer aTok = new StringTokenizer(a, "|", false); + + while (aTok.hasMoreTokens()) { + obj.addKnownSpell(aTok.nextToken()); + } } obj.setMemorizeSpells(memorize.getSelectedObjects() != null); @@ -147,13 +155,6 @@ token.parse(obj, a, -9); } - a = specialtyKnown.getText().trim(); - - if (a.length() > 0) - { - obj.addSpecialtyKnown(a); - } - obj.setSpellBookUsed(spellBook.getSelectedObjects() != null); SpelllistToken.parseSpellList(obj, spellList.getText().trim()); @@ -200,7 +201,11 @@ } PCClass obj = (PCClass) po; - attackCycle.setText(obj.getAttackCycle()); + Map<AttackType, String> attackCycleMap = obj.getAttackCycle(); + if (attackCycleMap != null) { + MapCollection mc = new MapCollection(attackCycleMap); + attackCycle.setText(CollectionUtilities.joinStringRepresentations(mc, Constants.PIPE)); + } hitDice.setText(String.valueOf(obj.getBaseHitDie())); deity.setText(CoreUtility.join(obj.getDeityList(), '|')); itemCreate.setText(obj.getItemCreationMultiplier()); @@ -212,32 +217,34 @@ castAs.setText(obj.getCastAs()); StringBuffer known = new StringBuffer(); - for (Iterator iter = obj.getKnownSpellsList().iterator(); iter.hasNext();) + for (String str : obj.getKnownSpellsList()) { - String element = (String) iter.next(); if (known.length() > 0) { known.append('|'); } - known.append(element); + known.append(str); } knownSpells.setText(known.toString()); memorize.setSelected(obj.getMemorizeSpells()); prohibited.setText(CollectionUtilities.joinStringRepresentations(obj.getProhibitedSchools(), ",")); - StringBuffer specKnown = new StringBuffer(); - for (Iterator iter = obj.getSpecialtyKnownList().iterator(); iter.hasNext();) - { - String element = (String) iter.next(); - if (known.length() > 0) - { - specKnown.append('|'); - } - specKnown.append(element); +// StringBuffer specKnown = new StringBuffer(); +// for (LevelProperty<String> lp : obj.getSpecialtyKnownList()) +// { +// if (known.length() > 0) +// { +// specKnown.append('|'); +// } +// specKnown.append(lp.getLevel()); +// specKnown.append('='); +// specKnown.append(lp.getObject()); +// } + spellBook.setSelected(obj.getSpellBookUsed()); + ChoiceList<String> classSpellChoices = obj.getClassSpellChoices(); + if (classSpellChoices != null) { + spellList.setText(classSpellChoices.toString()); } - specialtyKnown.setText(specKnown.toString()); - spellBook.setSelected(obj.getSpellBookUsed()); - spellList.setText(obj.getClassSpellChoices().toString()); //spellStat.setText(obj.getSpellBaseStat()); //spellType.setText(obj.getSpellType()); @@ -412,12 +419,13 @@ add(memorize, gridBagConstraints); - tempLabel = new JLabel("Specialty Known:"); - gridBagConstraints = buildConstraints(gridBagConstraints, 0, 6, true); - add(tempLabel, gridBagConstraints); + //Removed specialtyKnown because it is level dependent - thpr 10/31/06 + //tempLabel = new JLabel("Specialty Known:"); + //gridBagConstraints = buildConstraints(gridBagConstraints, 0, 6, true); + //add(tempLabel, gridBagConstraints); - gridBagConstraints = buildConstraints(gridBagConstraints, 1, 6, true); - add(specialtyKnown, gridBagConstraints); + //gridBagConstraints = buildConstraints(gridBagConstraints, 1, 6, true); + //add(specialtyKnown, gridBagConstraints); tempLabel = new JLabel("Prohibited:"); gridBagConstraints = buildConstraints(gridBagConstraints, 2, 6, true); Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -47,7 +47,6 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; -import java.util.Collection; import java.util.Iterator; import java.util.List; import pcgen.core.prereq.Prerequisite; @@ -438,6 +437,10 @@ tagList.addItem("UMULT"); tagList.addItem("UDAM"); */ + /* + * CONSIDER TODO Need to add SpecialtyKnown to the above list... + * and add the functionality to this class - thpr 10/31/06 + */ tagList.setSelectedIndex(0); level.setText("1 "); Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -616,7 +616,7 @@ thisPObject.clearDR(); thisPObject.clearPreReq(); thisPObject.clearSpecialAbilityList(); - thisPObject.setSR(".CLEAR"); + thisPObject.clearSRList(); thisPObject.getSpellSupport().clearSpellList(); thisPObject.clearAutoList(); Modified: Trunk/pcgen/code/src/java/pcgen/io/exporttoken/AttackToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/exporttoken/AttackToken.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/io/exporttoken/AttackToken.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -25,10 +25,10 @@ */ package pcgen.io.exporttoken; -import pcgen.core.Constants; import pcgen.core.PlayerCharacter; import pcgen.io.ExportHandler; import pcgen.util.Delta; +import pcgen.util.enumeration.AttackType; import java.util.StringTokenizer; @@ -123,19 +123,19 @@ if (attackType.equals("RANGED")) { int total = getTotalToken(pc, attackType); - return pc.getAttackString(Constants.ATTACKSTRING_RANGED, total); + return pc.getAttackString(AttackType.RANGED, total); } else if (attackType.equals("UNARMED")) { int total = getTotalToken(pc, "MELEE"); // TODO: Is this correct for 3.0 also? - return pc.getAttackString(Constants.ATTACKSTRING_MELEE, total); + return pc.getAttackString(AttackType.MELEE, total); //return pc.getAttackString(Constants.ATTACKSTRING_UNARMED, total); } else { int total = getTotalToken(pc, attackType); - return pc.getAttackString(Constants.ATTACKSTRING_MELEE, total); + return pc.getAttackString(AttackType.MELEE, total); } } return getSubToken(pc, attackType, modifier); @@ -171,18 +171,7 @@ } else { - if (attackType.equals("RANGED")) - { - return pc.getAttackString(Constants.ATTACKSTRING_RANGED); - } - else if (attackType.equals("UNARMED")) - { - return pc.getAttackString(Constants.ATTACKSTRING_UNARMED); - } - else - { - return pc.getAttackString(Constants.ATTACKSTRING_MELEE); - } + return pc.getAttackString(AttackType.valueOf(attackType)); } return ""; } Modified: Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -31,6 +31,7 @@ import pcgen.io.ExportHandler; import pcgen.util.Delta; import pcgen.util.Logging; +import pcgen.util.enumeration.AttackType; import java.util.ArrayList; import java.util.Iterator; @@ -2639,7 +2640,7 @@ */ private static String getRangedAttackString(PlayerCharacter pc) { - return pc.getAttackString(Constants.ATTACKSTRING_RANGED, 0, 0); + return pc.getAttackString(AttackType.RANGED, 0, 0); } /** @@ -2659,7 +2660,7 @@ */ private static String getRangedAttackString(PlayerCharacter pc, int bonus, int BABBonus) { - return pc.getAttackString(Constants.ATTACKSTRING_RANGED, bonus, BABBonus); + return pc.getAttackString(AttackType.RANGED, bonus, BABBonus); } /** @@ -2670,7 +2671,7 @@ */ private static String getMeleeAttackString(PlayerCharacter pc) { - return pc.getAttackString(Constants.ATTACKSTRING_MELEE, 0, 0); + return pc.getAttackString(AttackType.MELEE, 0, 0); } /** @@ -2690,7 +2691,7 @@ */ private static String getMeleeAttackString(PlayerCharacter pc, int bonus, int BABBonus) { - return pc.getAttackString(Constants.ATTACKSTRING_MELEE, bonus, BABBonus); + return pc.getAttackString(AttackType.MELEE, bonus, BABBonus); } /** @@ -2701,7 +2702,7 @@ */ private static String getUnarmedAttackString(PlayerCharacter pc) { - return pc.getAttackString(Constants.ATTACKSTRING_UNARMED, 0, 0); + return pc.getAttackString(AttackType.UNARMED, 0, 0); } /** @@ -2721,7 +2722,7 @@ */ private static String getUnarmedAttackString(PlayerCharacter pc, int bonus, int BABBonus) { - return pc.getAttackString(Constants.ATTACKSTRING_UNARMED, bonus, BABBonus); + return pc.getAttackString(AttackType.UNARMED, bonus, BABBonus); } /** Modified: Trunk/pcgen/code/src/java/pcgen/util/DoubleKeyMap.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/DoubleKeyMap.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/pcgen/util/DoubleKeyMap.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -1,7 +1,25 @@ /* + * 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 Jun 16, 2005 * - * Copyright (c) Thomas Parker, 2005. + * Current Ver: $Revision$ + * Last Editor: $Author$ + * Last Edited: $Date$ */ package pcgen.util; @@ -126,7 +144,7 @@ { return Collections.emptySet(); } - return localMap.keySet(); + return new HashSet<K2>(localMap.keySet()); } /** Added: Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -0,0 +1,138 @@ +/* + * 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 31, 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; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +/* + * + */ +public class MapCollection implements Collection<Object> { + + private final Map<?, ?> map; + + public MapCollection(Map<?, ?> m) { + if (m == null) { + throw new IllegalArgumentException( + "Cannot provide null to MapCollection"); + } + map = new HashMap<Object, Object>(m); + } + + public boolean add(Object arg0) { + throw new UnsupportedOperationException(); + } + + public boolean addAll(Collection<?> arg0) { + throw new UnsupportedOperationException(); + } + + public void clear() { + map.clear(); + } + + public boolean contains(Object arg0) { + return map.containsKey(arg0) || map.containsValue(arg0); + } + + public boolean containsAll(Collection<?> arg0) { + for (Object obj : arg0) { + if (!map.containsKey(obj) && !map.containsValue(obj)) { + return false; + } + } + return true; + } + + public boolean isEmpty() { + return map.isEmpty(); + } + + public Iterator<Object> iterator() { + return new MapCollectionIterator(map); + } + + public boolean remove(Object arg0) { + throw new UnsupportedOperationException(); + } + + public boolean removeAll(Collection<?> arg0) { + throw new UnsupportedOperationException(); + } + + public boolean retainAll(Collection<?> arg0) { + throw new UnsupportedOperationException(); + } + + public int size() { + return map.size(); + } + + public Object[] toArray() { + // FIXME Auto-generated method stub + return null; + } + + public Object[] toArray(Object[] arg0) { + // FIXME Auto-generated method stub + return null; + } + + private class MapCollectionIterator implements Iterator<Object> { + Entry<?, ?> workingEntry; + + private boolean returnedKey = false; + + private final Iterator hashIterator; + + MapCollectionIterator(Map<?, ?> m) { + hashIterator = m.entrySet().iterator(); + } + + public boolean hasNext() { + return returnedKey || hashIterator.hasNext(); + } + + public void remove() { + throw new UnsupportedOperationException(); + } + + public Object next() { + if (returnedKey) { + returnedKey = false; + return workingEntry.getValue(); + } else { + workingEntry = (Entry<?, ?>) hashIterator.next(); + returnedKey = true; + return workingEntry.getKey(); + } + } + + } + +} Added: Trunk/pcgen/code/src/java/pcgen/util/enumeration/AttackType.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/enumeration/AttackType.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/util/enumeration/AttackType.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -0,0 +1,31 @@ +package pcgen.util.enumeration; + +public enum AttackType { + + MELEE("BAB"), + + RANGED("RAB"), + + UNARMED("UAB"), + + GRAPPLE("GAB"); + + private final String identifier; + + private AttackType(String ident) { + identifier = ident; + } + + public String getIdentifier() { + return identifier; + } + + public static AttackType getInstance(String ident) { + for (AttackType at : AttackType.values()) { + if (at.identifier.equals(ident)) { + return at; + } + } + throw new IllegalArgumentException("Illegal AttackType identifier: " + ident); + } +} Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/SrLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/SrLst.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/SrLst.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -18,10 +18,10 @@ } public boolean parse(PObject obj, String value, int anInt) { - if (anInt > -9) { - obj.setSR(anInt + "|" + value); + if (".CLEAR".equals(value)) { + obj.clearSRList(); } else { - obj.setSR(value); + obj.setSR(anInt, value); } return true; } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/AttackcycleToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/AttackcycleToken.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/AttackcycleToken.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -1,7 +1,11 @@ package plugin.lsttokens.pcclass; +import java.util.StringTokenizer; + +import pcgen.core.Constants; import pcgen.core.PCClass; import pcgen.persistence.lst.PCClassLstToken; +import pcgen.util.enumeration.AttackType; /** * Class deals with ATTACKCYCLE Token @@ -13,7 +17,31 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setAttackCycle(value); + if (value.indexOf('|') == -1) + return true; + + final StringTokenizer aTok = new StringTokenizer(value, Constants.PIPE); + + while (aTok.hasMoreTokens()) { + AttackType at = AttackType.getInstance(aTok.nextToken()); + String cycle = aTok.nextToken(); + pcclass.setAttackCycle(at, cycle); + /* + * This is a bit of a hack - it is designed to account for the fact + * that the BAB tag in ATTACKCYCLE actually impacts both + * ATTACK.MELEE and ATTACK.GRAPPLE ... therefore, one method of + * handing this (which is done here) is to actually allow the + * pcgen.core code to keep the 4 attack type view (MELEE, RANGED, + * UNARMED, GRAPPLE) by simply loading the attackCycle for MELEE + * into GRAPPLE. This is done in the hope that this is a more + * flexible solution for potential future requirements for other + * attack types (rather than treating GRAPPLE as a special case + * throughout the core code) - thpr 11/1/06 + */ + if (at.equals(AttackType.MELEE)) { + pcclass.setAttackCycle(AttackType.GRAPPLE, cycle); + } + } return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/KnownspellsToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/KnownspellsToken.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/KnownspellsToken.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -1,5 +1,7 @@ package plugin.lsttokens.pcclass; +import java.util.StringTokenizer; + import pcgen.core.PCClass; import pcgen.persistence.lst.PCClassLstToken; @@ -13,7 +15,11 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.addKnownSpellsList(value); + final StringTokenizer aTok = new StringTokenizer(value, "|", false); + + while (aTok.hasMoreTokens()) { + pcclass.addKnownSpell(aTok.nextToken()); + } return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpecialtyknownToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpecialtyknownToken.java 2006-11-01 04:33:42 UTC (rev 1566) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/SpecialtyknownToken.java 2006-11-02 01:15:34 UTC (rev 1567) @@ -13,7 +13,7 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.addSpecialtyKnown(value); + pcclass.addSpecialtyKnown(level, value); return true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-11-04 01:22:28
|
Revision: 1573 http://svn.sourceforge.net/pcgen/?rev=1573&view=rev Author: thpr Date: 2006-11-03 17:22:00 -0800 (Fri, 03 Nov 2006) Log Message: ----------- PCClass/PCClassLevel Convert vFeatMap to use LevelProperty (for consistency) Convert hitDieLockMap to use LevelProperty (for consistency) Delete specialsString (unused) Inline private single use methods in PCClass Delete unused methods in PCClass Eliminate PObject.visible, PCClass (the only user) now uses visibility Field Protection Make numberSpellsFromSpecialty, bonusSpellBaseStat and spellBaseStat private Use setters in subclass constructors Bug Fix: 1580961 MULTIPREREQS is now obeyed in PCClass.isQualified Misc Have Ability.clone() actually return an Ability to avoid casting Avoid one case of String.toString() Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/Ability.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/SubClass.java Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterFactory.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/VisibleToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/Ability.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -375,7 +375,7 @@ * @return a copy of this Ability */ @Override - public Object clone() + public Ability clone() { Ability anAbility = null; Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -56,6 +56,7 @@ import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.AttackType; import pcgen.util.enumeration.DefaultTriState; +import pcgen.util.enumeration.Visibility; import pcgen.util.enumeration.VisionType; /** @@ -65,27 +66,31 @@ */ public class PCClass extends PObject { /* - * PROTECTIONREFACTOR spellBaseStat should be made private + * 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. */ /* - * TYPESAFETY If this really is a Base stat, then this should be storing - * that Stat in a type safe form. - */ - /* * ALLCLASSLEVELS 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 */ - protected String spellBaseStat = Constants.s_NONE; + private String spellBaseStat = Constants.s_NONE; /* - * PROTECTIONREFACTOR bonusSpellBaseStat should be made private + * 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. */ /* - * TYPESAFETY This should really be storing a PCStat or something else that - * is type safe, not simply a String. - */ - /* * ALLCLASSLEVELS 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 @@ -98,15 +103,12 @@ * Note this is dependent upon how PCClassLevel ends up calculating the * known and cast spells for any given level. */ - protected String bonusSpellBaseStat = Constants.s_DEFAULT; + private String bonusSpellBaseStat = Constants.s_DEFAULT; /* * UNKNOWNDESTINATION Don't know where to put this yet */ - /* - * PROTECTIONREFACTOR numSpellsFromSpecialty should be made private - */ - protected int numSpellsFromSpecialty = 0; + private int numSpellsFromSpecialty = 0; /* * LEVELONEONLY Since this is for a Class Line and not a ClassLevel line, a @@ -119,6 +121,12 @@ private ArrayList<LevelProperty<Domain>> domainList = null; /* + * TYPESAFETY This is throwing around Feat names as Strings. :( + * + * This requires a Chooser of some type to be able to be present in PCClass, as + * this may be a CHOOSE: String rather than an individual Feat + */ + /* * ALLCLASSLEVELS The automatic Feats appropriate to any given level (they * should be stored in a series of LevelProperty objects) need to be placed * into each individual PCClassLevel when it is constructed. @@ -126,7 +134,14 @@ private ArrayList<LevelProperty<String>> featAutos = null; /* - * TYPESAFETY The Feats should be type safe, not Strings... + * FUTURETYPESAFETY The Feats should be type safe, not Strings... The challenge + * here is that this also is difficult to make Type Safe. The problem is not + * in having the Abilities themselves be passed in (That is distinctly + * possible), it is in getting the associated Strings correct, as those + * are magically processed based on the PC's deity - so the DEITYWEAPON + * associated String would need to be recognized as magical and processed + * correctly in the code before it is added to the PC, but still appear as + * the magical string here (and somehow do that in a typesafe way). */ /* * ALLCLASSLEVELS Since the Feats are being granted by level, this needs to @@ -136,12 +151,20 @@ 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... + */ + /* * ALLCLASSLEVELS Since the known list is class level dependent, it needs to * be stored into each PCClassLevel */ private ArrayList<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 @@ -151,6 +174,12 @@ private ArrayList<String> knownSpellsList = null; /* + * TYPESAFETY This is an interesting case of Type Safety, that may not be + * possible, as this is a big magical in what it could be - School, + * Subschool, and other things. Need lots of investigation as to what the + * appropriate Type for this is or whether it's stuck as a String. + */ + /* * ALLCLASSLEVELS This is the list of specialties that were taken as part of * leveling up at a certain point. Therefore this gets moved to PCClassLevel = * byproduct of addLevel @@ -158,6 +187,14 @@ 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. @@ -167,6 +204,10 @@ /* * STRINGREFACTOR This is currently taking in a delimited String and should * be taking in a List or somesuch. + * + * The challenge here (which requires a new CHOICE class - is that this may + * not be simply a list, but could include a CHOICE as well... need to figure + * out how to do that in a type safe way :/ */ /* * TYPESAFETY This is throwing around template names as Strings. :( @@ -242,14 +283,16 @@ * Map) */ /* - * REFACTOR This is currently using a Map to map for levels - why is this - * not using LevelProperty? + * REFACTOR Should decide whether this should be LevelProperty<Ability> and + * allow multiple instances of the same level within the List... that is how + * other variables are working - not this one because of the conversion from + * vFeatMap (which didn't use LevelProperty) */ - private HashMap<Integer, List<Ability>> vFeatMap = null; + private List<LevelProperty<List<Ability>>> vFeatList = null; /* * ALLCLASSLEVELS Hard to tell here yet, since this is part of the Ability - * project, but this will need similar support to vFeatMap + * project, but this will need similar support to vFeatList?? */ private DoubleKeyMap<AbilityCategory, Integer, List<Ability>> vAbilityMap = null; @@ -272,14 +315,11 @@ * that can take place in at each class level */ /* - * REFACTOR This should really be stored in a LevelProperty, not in a Map? - */ - /* * ALLCLASSLEVELS This is modifications of the Hit Die and therefore, needs * to be placed into all of the ClassLevels, so that the PC can have HPs * based on the ClassLevel. */ - private HashMap<Integer, String> hitDieLockMap = null; + private List<LevelProperty<String>> hitDieLockList = null; /* * ALLCLASSLEVELS skillPool is part each PCClassLevel and what that level @@ -289,6 +329,9 @@ private int skillPool = 0; /* + * TYPESAFETY Dependent upon classSkillChoices being type safe + */ + /* * ALLCLASSLEVELS classSkillList is part of PCClassLevel (they are the * selections the character takes at a given level) - triggered by * addLevel @@ -296,6 +339,9 @@ private List<String> classSkillList = null; /* + * TYPESAFETY Dependent upon classSpellChoices being type safe + */ + /* * ALLCLASSLEVELS classSpellList is part of PCClassLevel (they are the * selections the character takes at a given level) - triggered by * addLevel @@ -303,6 +349,9 @@ private List<String> classSpellList = null; /* + * TYPESAFETY This should be working with Skill objects, not Strings + */ + /* * ALLCLASSLEVELS This is a list of the additional Class Skills that have * been added by a LevelAbilityClassSkill (such as the additional class * skills granted to the Expert class). Thease must be selected for the @@ -394,6 +443,9 @@ private ChoiceList<String> classSkillChoices = null; /* + * TYPESAFETY This is throwing around Spell names as Strings. :( + */ + /* * REFACTOR This is actually a moderate challenge in refactoring * PCClassLevel out of PCClass. This actually does a deferral to another * class' Spell List. This is definitely possible to do in a reasonable way @@ -470,10 +522,6 @@ * type safe to the list of classes. */ /* - * BUG There is no code behind this tag - no ability to perform a level - * exchange exists in PCGen. - */ - /* * UNKNOWNDESTINATION Don't know where to put this yet... this is a * COMPLICATED function that allows the exchange of leveis (presumably on a * one-time basis). Thus, this needs to be tagged as performed, and thus @@ -512,11 +560,6 @@ private List<String> prohibitedSchools = null; /* - * DELETEVARIABLE This variable is never used (get method is never called) - */ - private String specialsString = Constants.EMPTY_STRING; - - /* * TYPESAFETY This should NOT be a String, as Spell Types are a specific set * of items... */ @@ -615,11 +658,6 @@ // level /* - * BUG This is currently NOT processed in PCClass. The intent here is to - * only have this check when this particular class is taken as a 2nd class, - * not as the first class of a character (according to the Docs) - */ - /* * ALLCLASSLEVELS Because this indicates prerequisites for a given * PCClassLevel (though it's dependent upon the existing classes of the * PlayerCharacter), it must be passed in to the PCClassLevel. This is not @@ -1675,10 +1713,10 @@ * course) */ public void putHitDieLock(final String hitDieLock, final int aLevel) { - if (hitDieLockMap == null) { - hitDieLockMap = new HashMap<Integer, String>(); + if (hitDieLockList == null) { + hitDieLockList = new ArrayList<LevelProperty<String>>(); } - hitDieLockMap.put(aLevel, hitDieLock); + hitDieLockList.add(LevelProperty.getLevelProperty(aLevel, hitDieLock)); } /* @@ -1687,10 +1725,14 @@ * differences, of course) */ protected String getHitDieLock(final int aLevel) { - if (hitDieLockMap == null) { - return null; + if (hitDieLockList != null) { + for (LevelProperty<String> lp : hitDieLockList) { + if (lp.getLevel() == aLevel) { + return lp.getObject(); + } + } } - return hitDieLockMap.get(aLevel); + return null; } /* @@ -1853,13 +1895,6 @@ } /* - * DELETEMETHOD This is associated with the unused variable specialsString - */ - public final void setSpecialsString(final String aString) { - specialsString = aString; - } - - /* * PCCLASSLEVELONLY created during PCClassLevel creation (in the factory) */ public final Collection<String> getSpecialtyList() { @@ -2203,16 +2238,6 @@ return skillPointFormula; } - // public final void setSkillPoints(final int points) - // { - // skillPoints = points; - // } - - // public int getSkillPoints() - // { - // return skillPoints; - // } - /* * PCCLASSLEVELONLY since the specialtyList is * created during PCClassLevel creation (in the factory) @@ -2297,9 +2322,6 @@ } /* - * TYPESAFETY This is throwing around Spell names as Strings. :( - */ - /* * BUG This is currently NOT processed correctly by PCClass or PCGen, in * that duplicate spell casting ability is never assigned. */ @@ -2481,10 +2503,8 @@ */ /* * REFACTOR to eliminate the caching (highestSpellLevelMap is useless + * in a case where PCClassLevel is broken out) */ - /* - * - */ public int getHighestLevelSpell() { // check to see if we have a cached value first if (highestSpellLevelMap != null) { @@ -2716,19 +2736,8 @@ * * @param aNumber * String version of the number of bonus spells. - * - * <p> - * TODO - Why is this stored as a String???? */ /* - * 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. - */ - /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ @@ -3110,37 +3119,7 @@ return uattList; } - /** - * Set whether or not this class should be displayed to the user in the UI. - * - * @param visible - * true if the class should be displayed to the user. - */ /* - * DELETEMETHOD This should be refactored to use the setVisibility - * and getVisibility methods of PObject. - */ - public final void setVisible(final boolean visible) { - this.visible = visible; - } - - /** - * Identify if this class should be displayed to the user in the UI. - * - * @return true if the class should be displayed to the user. - */ - /* - * DELETEMETHOD This should be refactored to use the setVisibility - * and getVisibility methods of PObject. - */ - public final boolean isVisible() { - return visible; - } - - /* - * TYPESAFETY This is throwing around Feat names as Strings. :( - */ - /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method. The PCClassLevelversion should NOT be level * dependent @@ -3157,10 +3136,7 @@ * PCClass only */ public void clearFeatAutos() { - if (featAutos != null) - { - featAutos.clear(); - } + featAutos = null; } // public void setAutoAbilities(final AbilityCategory aCategory, final int aLevel, final List<String> aList) @@ -3650,15 +3626,19 @@ // !contains(aPC.getCritterType(), preRaceType)) if (isMonster() && (preRaceType != null) - && (!aPC.getRace().getRaceType().equalsIgnoreCase(preRaceType) && !contains( - aPC.getCritterType(), preRaceType))) + && (!aPC.getRace().getRaceType().equalsIgnoreCase(preRaceType) && !(aPC + .getCritterType().indexOf(preRaceType) >= 0))) // Move the check for type out of race and into PlayerCharacter to make // it easier for a template to adjust it. { return false; } - if (!canBePrestige(aPC)) { + if (multiPreReqs && aPC.getClassList().isEmpty()) { + return true; + } + + if (!PrereqHandler.passesAll(getPreReqList(), aPC, this)) { return false; } @@ -3722,26 +3702,15 @@ return null; } - /** - * needed for Class Editor - returns contents of SR(index). - * - * @param index - * @param delimiter - * @return String - */ /* - * REFACTOR to DELETEMETHOD This should be done by the ClassEditor, if it - * really wants it, or by some other entity (like the SR Tag class or even - * the SRToken class in pcgen.io.exporttoken?). PCClass should NOT reconvert - * into a String... :( + * PCCLASSONLY This is for editing classes */ - public String getSRListString(final int index, final String delimiter) { - if ((SR != null) && (SR.size() > index)) { - final LevelProperty<String> lp = SR.get(index); - - return lp.getLevel() + delimiter + lp.getObject(); + public LevelProperty<String> getSRforLevel(int aLevel) { + for (LevelProperty<String> lp : SR) { + if (lp.getLevel() == aLevel) { + return lp; + } } - return null; } @@ -3830,8 +3799,8 @@ pccTxt.append("\tSTARTSKILLPTS:").append(skillPointFormula); } - if (!visible) { - pccTxt.append("\tVISIBLE:N"); + if (!getVisibility().equals(Visibility.DEFAULT)) { + pccTxt.append("\tVISIBLE:" + getVisibility().toString()); } if (initialFeats != 0) { @@ -3877,7 +3846,6 @@ checkAdd(pccTxt, "", "SPELLLIST:", classSpellChoices.toString()); } - checkAdd(pccTxt, "", "SPECIALS:", specialsString); if (classSkillChoices != null) { checkAdd(pccTxt, "", "SKILLLIST:", classSkillChoices.toString()); } @@ -4091,8 +4059,12 @@ } List<String> umultList = getListFor(ListKey.UMULT); - if ((umultList != null) && (umultList.size() != 0)) { - buildPccText(pccTxt, umultList.iterator(), "|", "\tUMULT:", lineSep); + if (umultList != null) { + for (String st : umultList) { + final int sepPos = st.indexOf("|"); + pccTxt.append(lineSep).append(st.substring(0, sepPos)) + .append("\tUMULT:").append(st.substring(sepPos + 1)); + } } return pccTxt.toString(); @@ -4105,10 +4077,10 @@ public List<Ability> getVirtualFeatList(final int aLevel) { final List<Ability> aList = new ArrayList<Ability>(); - if (vFeatMap != null) { - for (int i = -9; i <= aLevel; i++) { - if (vFeatMap.containsKey(i)) { - aList.addAll(vFeatMap.get(i)); + if (vFeatList != null) { + for (LevelProperty<List<Ability>> lp : vFeatList) { + if (lp.getLevel() <= aLevel) { + aList.addAll(lp.getObject()); } } } @@ -4295,11 +4267,6 @@ } /* - * 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... - */ - /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ @@ -4325,9 +4292,6 @@ } /* - * TYPESAFETY This is throwing around Spell names as Strings. :( - */ - /* * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ @@ -4439,7 +4403,7 @@ /** - * Adds virtual feats to the vFeatMao + * Adds virtual feats to the vFeatList * * @param aLevel * level @@ -4451,18 +4415,20 @@ * require this method */ public void addVirtualFeats(final int aLevel, final List<Ability> vList) { - List<Ability> vFeatsAtLevel; - - if (vFeatMap == null) { - vFeatMap = new HashMap<Integer, List<Ability>>(); + if (vFeatList == null) { + vFeatList = new ArrayList<LevelProperty<List<Ability>>>(); } - if (vFeatMap.containsKey(aLevel)) { - vFeatsAtLevel = vFeatMap.get(aLevel); - } else { - vFeatsAtLevel = new ArrayList<Ability>(); - vFeatMap.put(aLevel, vFeatsAtLevel); + boolean found = false; + for (LevelProperty<List<Ability>> lp : vFeatList) { + if (lp.getLevel() == aLevel) { + found = true; + lp.getObject().addAll(vList); + } } - vFeatsAtLevel.addAll(vList); + if (!found) { + List<Ability> arrayList = new ArrayList<Ability>(vList); + vFeatList.add(LevelProperty.getLevelProperty(aLevel, arrayList)); + } super.addVirtualFeats(vList); } @@ -4689,16 +4655,17 @@ aClass.featList = new ArrayList<LevelProperty<String>>(featList); } // aClass.vFeatList = (ArrayList) vFeatList.clone(); - if (vFeatMap != null) { - aClass.vFeatMap = new HashMap<Integer, List<Ability>>(vFeatMap); + if (vFeatList != null) { + //I guess a shallow clone is OK???? already was that way ... - thpr 11/2/06 + aClass.vFeatList = new ArrayList<LevelProperty<List<Ability>>>(vFeatList); } if ( vAbilityMap != null ) { aClass.vAbilityMap = new DoubleKeyMap<AbilityCategory, Integer, List<Ability>>(vAbilityMap); } - if (hitDieLockMap != null) { - aClass.hitDieLockMap = new HashMap<Integer, String>( - hitDieLockMap); + if (hitDieLockList != null) { + aClass.hitDieLockList = new ArrayList<LevelProperty<String>>( + hitDieLockList); } if (featAutos != null) { aClass.featAutos = new ArrayList<LevelProperty<String>>(featAutos); @@ -4714,7 +4681,6 @@ aClass.classSpellList = null; aClass.stableSpellKey = null; - aClass.setSpecialsString(specialsString); aClass.setExClass(exClass); aClass.setLevelExchange(levelExchange); aClass.maxCastLevel = maxCastLevel; @@ -5081,13 +5047,6 @@ } /* - * DELETEMETHOD This uses the unused variable specialsString - */ - public String specialsString() { - return specialsString; - } - - /* * REFACTOR TO DELETEMETHOD I would really like to get rid of this, since it * it used as a "funky spells" test - which should be more explicit than * implicit in zero cast spells. @@ -5146,10 +5105,8 @@ final List<SpecialAbility> bList = new ArrayList<SpecialAbility>(); for (SpecialAbility sa : specialAbilityList) { - //CONSIDER This can be optimized to create saKey inside the next IF - final String saKey = sa.getKeyName(); - if (sa.pcQualifiesFor(aPC)) { + final String saKey = sa.getKeyName(); if (saKey.startsWith(".CLEAR")) { if (".CLEARALL".equals(saKey)) { bList.clear(); @@ -5372,7 +5329,7 @@ * PlayerCharacter into an object like PCClass is generally (but certainly * not always) bad form. In this case, the PC is present in order to test * prerequisites, so perhaps this is an OK use of passing in - * PlayerCharacter... + * PlayerCharacter... (double dispatch) */ public boolean isProhibited(final Spell aSpell, final PlayerCharacter aPC) { if (!PrereqHandler.passesAll(aSpell.getPreReqList(), aPC, this)) { @@ -5931,9 +5888,8 @@ * The name of the new class for the altered special abilities */ /* - * DELETEMETHOD Great theory, wrong universe. This is unused code, except for - * in the test system. Either someone should explain where this is headed, or - * it should be removed for simplification of the code. + * REFACTOR Great theory, wrong universe. Well, mayne not, but the name implies + * events which aren't occurring here. Need to at least rename this... */ void fireNameChanged(final String oldClass, final String newClass) { // @@ -6515,28 +6471,6 @@ } /* - * REFACTOR to DELETEMETHOD While this is (perhaps?) a useful - * Utility method, it is NOT to be placed in PCClass, but in a general - * utility class for Tokens. - */ - private static String getToken(int tokenNum, final String aList, - final String delim) { - final StringTokenizer aTok = new StringTokenizer(aList, delim, false); - - while (aTok.hasMoreElements() && (tokenNum >= 0)) { - final String aString = aTok.nextToken(); - - if (tokenNum == 0) { - return aString; - } - - --tokenNum; - } - - return null; - } - - /* * PCCLASSLEVELONLY Since this is a level dependent calculation, this should * be performed by the PCClassLevel. */ @@ -6685,17 +6619,6 @@ return statsToChoose - iCount; } - private static void buildPccText(final StringBuffer pccTxt, - final Iterator<String> listIterator, final String separator, - final String label, final String lineSep) { - while (listIterator.hasNext()) { - final String listItem = listIterator.next(); - final int sepPos = listItem.indexOf(separator); - pccTxt.append(lineSep).append(listItem.substring(0, sepPos)) - .append(label).append(listItem.substring(sepPos + 1)); - } - } - /** * Build a list of Sub-Classes for the user to choose from. The two lists * passed in will be populated. @@ -6861,14 +6784,6 @@ return iBonus * iTimes; } - /* - * DELETEMETHOD This is private, used once, and only one line long. - * Refactor this out by inlining it. - */ - private boolean canBePrestige(final PlayerCharacter aPC) { - return PrereqHandler.passesAll(getPreReqList(), aPC, this); - } - /** * This method adds or deletes feats for a level. * @@ -7128,15 +7043,6 @@ } /* - * DELETEMETHOD Looks like a semi-useful utility method, but it's only - * used once, and since we're trying to eliminate String processing, - * let's inline this one and ditch this method. - */ - private static boolean contains(final String big, final String little) { - return big.indexOf(little) >= 0; - } - - /* * REFACTOR Some derivative of this method will be in PCClass only as part * of the factory creation of a PCClassLevel... or perhaps in PCClassLevel * so it can steal some information from other PCClassLevels of that @@ -7375,20 +7281,6 @@ } /** - * Retrieve the full list of spells for the class. This will return all - * spells defined for the class irrespective of the level in the class - * currently held. - * - * @return The full list of spells for the class. - */ - /* - * DELETEMETHOD No one uses this, so remove it. - */ - public List<PCSpell> getFullSpellList() { - return getSpellSupport().getSpellList(-1); - } - - /** * Returns the highest spell level for which a KNOWN: tag entry was found. * * @return The highest spell level this class can know spells to. Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -114,11 +114,6 @@ protected String displayName = Constants.EMPTY_STRING; /** Indicates if this object should be displayed to the user in the UI. */ - /* - * DELETEVARIABLE This should be deleted, and PCClass (the only user of - * visible) should be trained to use the visibility variable - */ - protected boolean visible = true; protected Visibility visibility = Visibility.DEFAULT; /** Map of the bonuses for the object */ @@ -1337,7 +1332,6 @@ retVal.listChar.removeListFor(ListKey.SAVE); retVal.setName(displayName); - retVal.visible = visible; retVal.visibility = visibility; retVal.setKeyName(keyName); retVal.spellSupport = (SpellSupport) spellSupport.clone(); Modified: Trunk/pcgen/code/src/java/pcgen/core/SubClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SubClass.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/core/SubClass.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -55,8 +55,8 @@ /** Constructor */ public SubClass() { - numSpellsFromSpecialty = 0; - spellBaseStat = null; + setNumSpellsFromSpecialty(0); + setSpellBaseStat(null); } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -44,8 +44,8 @@ /** Constructor */ public SubstitutionClass() { - numSpellsFromSpecialty = 0; - spellBaseStat = null; + setNumSpellsFromSpecialty(0); + setSpellBaseStat(null); } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -488,7 +488,7 @@ { break; } - if (aClass.isVisible() + if (aClass.getVisibility().equals(Visibility.DEFAULT) && PrereqHandler.passesAll(aClass.getPreReqList(), aPC, aClass) && aClass.isQualified(aPC)) { Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassBasePanel.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -27,6 +27,7 @@ import pcgen.core.PCClass; import pcgen.core.PObject; import pcgen.util.PropertyFactory; +import pcgen.util.enumeration.Visibility; import javax.swing.JCheckBox; import javax.swing.JLabel; @@ -110,7 +111,7 @@ obj.setHasSubClass(hasSubClass.getSelectedObjects() != null); obj.setModToSkills(modToSkills.getSelectedObjects() != null); obj.setMultiPreReqs(multiPreReq.getSelectedObjects() != null); - obj.setVisible(chkVisible.getSelectedObjects() != null); + obj.setVisibility(chkVisible.getSelectedObjects() == null ? Visibility.HIDDEN : Visibility.DEFAULT); Object[] sel = getTypesSelectedList(); thisPObject.setTypeInfo(".CLEAR"); @@ -180,7 +181,7 @@ hasSubClass.setSelected(obj.hasSubClass()); modToSkills.setSelected(obj.getModToSkills()); multiPreReq.setSelected(obj.multiPreReqs()); - chkVisible.setSelected(obj.isVisible()); + chkVisible.setSelected(obj.getVisibility().equals(Visibility.DEFAULT)); } private static GridBagConstraints buildConstraints(GridBagConstraints gridBagConstraints, int gridx, int gridy, Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -279,45 +279,25 @@ } } - flag = true; index = 0; - while (flag) + while (true) { - String src = obj.getSRListString(index++, "|"); - - if (src != null) - { - int y = src.indexOf('|'); - String lev = src.substring(y + 1); - src = src.substring(0, y); - - LevelTag lt = new LevelTag(src, LevelTag.TAG_SR, lev); - levelTagList.add(lt); + LevelProperty<String> lp = obj.getSRforLevel(index++); + if (lp == null) { + break; } - else - { - flag = false; - } + levelTagList.add(new LevelTag(lp.getLevel(), LevelTag.TAG_SR, lp.getObject())); } - aList = obj.getFeatList(); - - if ((aList != null) && (aList.size() != 0)) + for (LevelProperty<String> lp : obj.getFeatList()) { - for (Iterator se = aList.iterator(); se.hasNext();) - { - String c = (String) se.next(); - int y = c.indexOf(':'); - LevelTag lt = new LevelTag(c.substring(0, y), LevelTag.TAG_FEAT, c.substring(y + 1)); - levelTagList.add(lt); - } + levelTagList.add(new LevelTag(lp.getLevel(), LevelTag.TAG_FEAT, lp.getObject())); } - for ( final LevelProperty<String> c : obj.getAllFeatAutos() ) + for (LevelProperty<String> c : obj.getAllFeatAutos() ) { - LevelTag lt = new LevelTag(c.getLevel(), LevelTag.TAG_FEATAUTO, c.getObject()); - levelTagList.add(lt); + levelTagList.add(new LevelTag(c.getLevel(), LevelTag.TAG_FEATAUTO, c.getObject())); } /* Modified: Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterFactory.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterFactory.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/gui/filter/FilterFactory.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -27,6 +27,7 @@ import pcgen.persistence.PersistenceManager; import pcgen.util.Logging; import pcgen.util.PropertyFactory; +import pcgen.util.enumeration.Visibility; import java.util.*; @@ -295,7 +296,7 @@ for ( final PCClass pcClass : Globals.getClassList() ) { - if (pcClass.isVisible() && filter.accept(null, pcClass)) + if (pcClass.getVisibility().equals(Visibility.DEFAULT) && filter.accept(null, pcClass)) { raceFilters.add(FilterFactory.createFavoredClassFilter(pcClass.getKeyName())); } Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -114,6 +114,7 @@ import pcgen.util.Logging; import pcgen.util.PropertyFactory; import pcgen.util.enumeration.Tab; +import pcgen.util.enumeration.Visibility; /** * ??? @@ -895,7 +896,7 @@ for (int i = 0; i < pTypes.length; i++) { pTypes[i] = new PObjectNode(); - pTypes[i].setItem(typeList.get(i).toString()); + pTypes[i].setItem(typeList.get(i)); pTypes[i].setParent(typeRoot); } typeRoot.setChildren(pTypes); @@ -1962,7 +1963,9 @@ return false; } - return ((modelType == 1) || (aClass.isVisible() && accept(pc, aClass))); + return (modelType == 1) + || (aClass.getVisibility().equals(Visibility.DEFAULT) && accept( + pc, aClass)); } public List<String> getMColumnList() Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -43,7 +43,6 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import javax.swing.BorderFactory; @@ -110,6 +109,7 @@ import pcgen.util.Logging; import pcgen.util.PropertyFactory; import pcgen.util.enumeration.Tab; +import pcgen.util.enumeration.Visibility; /** * <code>InfoSummary</code> is a panel which allows the user to enter @@ -2808,7 +2808,7 @@ continue; } - if (aClass.isVisible() && accept(pc, aClass)) + if (aClass.getVisibility().equals(Visibility.DEFAULT) && accept(pc, aClass)) { addElement(aClass); } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/VisibleToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/VisibleToken.java 2006-11-03 17:03:33 UTC (rev 1572) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/VisibleToken.java 2006-11-04 01:22:00 UTC (rev 1573) @@ -2,6 +2,7 @@ import pcgen.core.PCClass; import pcgen.persistence.lst.PCClassLstToken; +import pcgen.util.enumeration.Visibility; /** * Class deals with VISIBLE Token @@ -13,7 +14,9 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.setVisible(value.toUpperCase().startsWith("Y")); + if (!value.toUpperCase().startsWith("Y")) { + pcclass.setVisibility(Visibility.HIDDEN); + } //Assume DEFAULT is the DEFAULT :) return true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-11-05 00:23:03
|
Revision: 1585 http://svn.sourceforge.net/pcgen/?rev=1585&view=rev Author: thpr Date: 2006-11-04 16:22:44 -0800 (Sat, 04 Nov 2006) Log Message: ----------- PCClass/PCClassLevel: Eliminate highestLevelSpellMap (cache) Lots of cleanup for level-aware vs. not level-aware items Make many methods only return the items for EXACTLY the level given as a parameter, not that level and all lower levels (prepares for split) Modified Paths: -------------- Trunk/pcgen/code/src/java/gmgen/plugin/PcgCombatant.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/Skill.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java Trunk/pcgen/code/src/java/pcgen/core/spell/PCSpellTracker.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoKnownSpells.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/SpellModel.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/DomainToken.java Modified: Trunk/pcgen/code/src/java/gmgen/plugin/PcgCombatant.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/plugin/PcgCombatant.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/gmgen/plugin/PcgCombatant.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -757,9 +757,7 @@ { StringBuffer statBuf = new StringBuffer(); PlayerCharacterOutput pcOut = new PlayerCharacterOutput(pc); - List<CharacterDomain> domainList = pc.getCharacterDomainList(); - - if (domainList.size() > 0) + if (pc.hasCharacterDomainList()) { //Domains //Deity @@ -772,7 +770,7 @@ //Domain List with powers boolean firstLine = true; - for ( CharacterDomain cd : domainList ) + for ( CharacterDomain cd : pc.getCharacterDomainList() ) { if (!firstLine) { Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -2564,7 +2564,73 @@ */ public static int minLevelForSpellLevel(final PCClass castingClass, final int spellLevel, final boolean allowBonus) { - return castingClass.minLevelForSpellLevel(spellLevel, 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; } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -76,7 +76,7 @@ * be Involatile. */ /* - * ALLCLASSLEVELS The spellBaseStat needs to be stored in EACH individual + * 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 */ @@ -92,7 +92,7 @@ * be Involatile. */ /* - * ALLCLASSLEVELS The challenge here is that the bonus spells must be + * 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 @@ -112,18 +112,18 @@ private int numSpellsFromSpecialty = 0; /* - * ALLCLASSLEVELS Since this applies to a ClassLevel line + * FINALALLCLASSLEVELS Since this applies to a ClassLevel line */ private ArrayList<LevelProperty<Domain>> domainList = null; /* - * TYPESAFETY This is throwing around Feat names as Strings. :( + * FUTURETYPESAFETY This is throwing around Feat names as Strings. :( * * This requires a Chooser of some type to be able to be present in PCClass, as * this may be a CHOOSE: String rather than an individual Feat */ /* - * ALLCLASSLEVELS The automatic Feats appropriate to any given level (they + * FINALALLCLASSLEVELS The automatic Feats appropriate to any given level (they * should be stored in a series of LevelProperty objects) need to be placed * into each individual PCClassLevel when it is constructed. */ @@ -140,7 +140,7 @@ * the magical string here (and somehow do that in a typesafe way). */ /* - * ALLCLASSLEVELS Since the Feats are being granted by level, this needs to + * FINALALLCLASSLEVELS Since the Feats are being granted by level, this needs to * account for that and actually store these by level and put them into the * appropriate PCClassLevel. */ @@ -167,20 +167,20 @@ private ArrayList<SpellFilter> knownSpellsList = null; /* - * TYPESAFETY This is an interesting case of Type Safety, that may not be + * FUTURETYPESAFETY This is an interesting case of Type Safety, that may not be * possible, as this is a big magical in what it could be - School, * Subschool, and other things. Need lots of investigation as to what the * appropriate Type for this is or whether it's stuck as a String. */ /* - * ALLCLASSLEVELS This is the list of specialties that were taken as part of + * FINALALLCLASSLEVELS This is the list of specialties that were taken as part of * leveling up at a certain point. Therefore this gets moved to PCClassLevel = * byproduct of addLevel */ private ArrayList<String> specialtyList = null; /* - * ALLCLASSLEVELS The specialtyKnownList [based on their level and/or + * FINALALLCLASSLEVELS 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. */ @@ -204,19 +204,19 @@ private ArrayList<LevelProperty<String>> templates = null; /* - * ALLCLASSLEVELS The SR List is level dependent - heck, it's in a + * 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; /* - * ALLCLASSLEVELS Since this seems to allow for class dependent additions of + * 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; /* - * ALLCLASSLEVELS This is pretty obvious, as these are already in a + * FINALALLCLASSLEVELS This is pretty obvious, as these are already in a * LevelProperty... these go into the PCClassLevel */ private ArrayList<LevelProperty<Equipment>> naturalWeapons = null; @@ -310,20 +310,24 @@ private int skillPool = 0; /* - * TYPESAFETY Dependent upon classSkillChoices being type safe + * FUTURETYPESAFETY Dependent upon classSkillChoices being type safe, which + * in turn is dependent on the Chooser system being type safe :/ */ /* - * ALLCLASSLEVELS classSkillList is part of PCClassLevel (they are the + * FINALPCCLASSLEVELONLY + * FINALALLCLASSLEVELS classSkillList is part of PCClassLevel (they are the * selections the character takes at a given level) - triggered by * addLevel */ private List<String> classSkillList = null; /* - * TYPESAFETY Dependent upon classSpellChoices being type safe + * FUTURETYPESAFETY Dependent upon classSpellChoices being type safe, which + * in turn is dependent on the Chooser system being type safe :/ */ /* - * ALLCLASSLEVELS classSpellList is part of PCClassLevel (they are the + * FINALPCCLASSLEVELONLY + * FINALALLCLASSLEVELS classSpellList is part of PCClassLevel (they are the * selections the character takes at a given level) - triggered by * addLevel */ @@ -345,7 +349,7 @@ // really working properly /* - * ALLCLASSLEVELS The Vision List is level dependent - heck, it's in a + * FINALALLCLASSLEVELS The Vision List is level dependent - heck, it's in a * LevelProperty, so that should be pretty obvious :) */ private List<LevelProperty<Vision>> visionList = null; @@ -393,7 +397,7 @@ private DefaultTriState XPPenalty = DefaultTriState.DEFAULT; /* - * ALLCLASSLEVELS The abbrev simply needs to be directly loaded into each + * FINALALLCLASSLEVELS The abbrev simply needs to be directly loaded into each * individual PCClassLevel. No modification or level dependency on the way * there. */ @@ -406,19 +410,29 @@ private String castAs = Constants.EMPTY_STRING; /* - * ALLCLASSLEVELS The selected delegate skill lists (not the raw - * classSkillChoices) need to be stored in EACH individual PCClassLevel. - * This is the case because each individual PCClassLevel will be capable of - * granting skills, and this is the delegate to determine what is - * appropriate (skill-wise) for any given PCClassLevel. + * FINALPCCLASSONLY The selected delegate skill lists [see classSkillList] + * (not the raw classSkillChoices) need to be stored in EACH individual + * PCClassLevel. This is the case because each individual PCClassLevel will + * be capable of granting skills, and this is the delegate to determine what + * is appropriate (skill-wise) for any given PCClassLevel. */ /* - * TYPESAFETY This should be better than a String... + * FUTURETYPESAFETY This should be better than a String... the problem here + * is that this is dependent upon the Choice system being type safe. While + * it doesn't LOOK type-hostile, it is using a LOT of unchecked Objects, + * which makes me sensitive to the fact that it may NOT be entirely type + * safe. Better to rebuild that at some point to be Java 1.5 friendly and + * then have this as a later dependency. */ private ChoiceList<String> classSkillChoices = null; /* - * TYPESAFETY This is throwing around Spell names as Strings. :( + * FUTURETYPESAFETY This should be better than a String... the problem here + * is that this is dependent upon the Choice system being type safe. While + * it doesn't LOOK type-hostile, it is using a LOT of unchecked Objects, + * which makes me sensitive to the fact that it may NOT be entirely type + * safe. Better to rebuild that at some point to be Java 1.5 friendly and + * then have this as a later dependency. */ /* * REFACTOR This is actually a moderate challenge in refactoring @@ -434,19 +448,22 @@ * still use the same class, or is the user stuck with the original choice. */ /* - * ALLCLASSLEVELS The selected delegate spell lists (not the raw - * classSpellString) need to be stored in EACH individual PCClassLevel. This - * is the case because each individual PCClassLevel will be capable of - * holding individual spells known and spells cast (per day) and this is the - * delegate to determine what is appropriate for any given PCClassLevel. + * FINALPCCLASSONLY The selected delegate spell lists [see classSpellList] + * (not the raw classSpellString) need to be stored in EACH individual + * PCClassLevel. This is the case because each individual PCClassLevel will + * be capable of holding individual spells known and spells cast (per day) + * and this is the delegate to determine what is appropriate for any given + * PCClassLevel. */ private ChoiceList<String> classSpellChoices = null; /* - * TYPESAFETY The Deity List should be something other than Strings + * FUTURETYPESAFETY The Deity List should be something other than Strings + * + * Question: How to do this with the 'Magical' ANY Deity? */ /* - * ALLCLASSLEVELS Might as well place this into all PCCLassLevels, since it + * FINALALLCLASSLEVELS Might as well place this into all PCCLassLevels, since it * does seem to apply to all of them individually */ private List<String> deityList = new ArrayList<String>(2); @@ -524,7 +541,7 @@ private String preRaceType = null; /* - * ALLCLASSLEVELS Because this indicates prohibited Spell Schools and Spells + * FINALALLCLASSLEVELS Because this indicates prohibited Spell Schools and Spells * Known and Cast are granted by each PCClassLevel, this must be passed into * each and every PCClassLevel (though it can be given in its pure form). */ @@ -535,11 +552,14 @@ private List<String> prohibitedSchools = null; /* - * TYPESAFETY This should NOT be a String, as Spell Types are a specific set - * of items... + * 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. */ /* - * ALLCLASSLEVELS Because this indicates a Spell Type of a Class and + * 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). @@ -549,6 +569,9 @@ /* * PCCLASSLEVELONLY Since this is not part of a tag and is related to how * spells are related to a PCClassLevel + * + * Actually, I may want to DELETEVARIABLE - this is really a cache, and + * need to consider how valuable it is to have a cache vs. not have it. */ private String stableSpellKey = null; @@ -560,9 +583,7 @@ private String subClassKey = Constants.s_NONE; /* - * PCCLASSONLY This is reference information from a Tag, and is used to - * allow a choice of sublevel that is made and placed into the PCClassLevel - * in the subClassKey. + * DELETEVARIABLE from ancient code - can delete */ private String subClassString = Constants.s_NONE; @@ -574,9 +595,7 @@ private Map<Integer, String> substitutionClassKey = null; /* - * PCCLASSONLY This is reference information from a Tag, and is used to - * allow a choice of substituion level that is made and placed into the - * PCClassLevel in the substitutionClassKey. + * DELETEVARIABLE Unused variable */ private String substitutionClassString = Constants.s_NONE; @@ -736,15 +755,6 @@ private int maxKnownLevel = -1; // max level KNOWN: tag is found /* - * DELETEVARIABLE This is a cache, and a weird one at that, given that it - * only ever stores a key of "-1". This processing should probably be done - * by a Utility Class which parses through the PCClassLevels of a given - * PlayerCharacter... it can reasonably be cached there in the - * PlayerCharacter, but no longer in the PCClass or PCClassLevel. - */ - private HashMap<Integer, Integer> highestSpellLevelMap = null; - - /* * FORMULAREFACTOR This is currently processed elsewhere - should be * processed as a Formula, not a String... */ @@ -839,7 +849,7 @@ * The abbreviation to use. */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and PCClassLevel since + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and PCClassLevel since * it is a Tag */ public final void setAbbrev(final String argAbbrev) { @@ -852,7 +862,7 @@ * @return The abbreviation string. */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final String getAbbrev() { @@ -902,12 +912,13 @@ } /** - * Returns the list of domains that this class grants access to. + * Returns the list of domains that this class grants access to for ONLY the + * specifically given level * - * @return List of Domain choices for this class. + * @return List of Domain choices for the given level of this class. */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final List<Domain> getAddDomains(int domainLevel) { @@ -918,7 +929,7 @@ List<Domain> returnList = new ArrayList<Domain>(); for (LevelProperty<Domain> prop : addDomains) { - if (prop.getLevel() <= domainLevel) + if (prop.getLevel() == domainLevel) { returnList.add(prop.getObject()); } @@ -927,7 +938,7 @@ } /* - * PCCLASSONLY This is only for editing of a PCClass; therefore + * FINALPCCLASSONLY This is only for editing of a PCClass; therefore * not required for a PCClassLevel */ public List<LevelProperty<Domain>> getAddDomains() { @@ -986,7 +997,7 @@ * Stat abbreviation to use as bonus spell stat. */ /* - * PCCLASSANDLEVEL Since this comes from a tag and is requried by at least + * FINALPCCLASSANDLEVEL Since this comes from a tag and is requried by at least * some PCClassLevels in order to calculate bonus spells, this must appear * in both PCClass and PCClassLevel */ @@ -1003,7 +1014,7 @@ * @return Stat abbreviation that should be used to calculate bonus spells. */ /* - * PCCLASSANDLEVEL Since this comes from a tag and is requried by at least + * FINALPCCLASSANDLEVEL Since this comes from a tag and is requried by at least * some PCClassLevels in order to calculate bonus spells, this must appear * in both PCClass and PCClassLevel */ @@ -1261,8 +1272,7 @@ if (includeAdj && !bookName.equals(Globals.getDefaultSpellBook()) - && ((getSpecialtyList().size() > 0) || (aPC - .getCharacterDomainList().size() > 0))) { + && (hasSpecialtyList() || aPC.hasCharacterDomainList())) { // We need to do this for EVERY spell level up to the // one really under consideration, because if there // are any specialty spells available BELOW this level, @@ -1349,8 +1359,9 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass since it is - * a Tag + * FINALPCCLASSONLY This is required in PCClass since it is + * a Tag, but is used for construction of PCClassLevels and therefore + * not passed into a PCCLassLevel */ public void setClassSkillChoices(int choiceCount, List<String> choices) { classSkillChoices = ChoiceList.getChoiceList(choiceCount, choices); @@ -1460,7 +1471,7 @@ } /* - * PCCLASSLEVELONLY This is only part of the level, as the spell list is + * FINALPCCLASSLEVELONLY This is only part of the level, as the spell list is * calculated based on other factors, it is not a Tag */ public final List<String> getClassSpellList() { @@ -1468,7 +1479,7 @@ } /* - * PCCLASSANDLEVEL This is appropriate for both PCClassLevel and + * FINALPCCLASSANDLEVEL This is appropriate for both PCClassLevel and * PCClass since it is a Tag */ public final void addDeity(String aDeity) { @@ -1476,14 +1487,14 @@ } /* - * PCCLASSONLY Since this is for constructing a PCClass + * FINALPCCLASSONLY Since this is for constructing a PCClass */ public final void clearDeityList() { deityList.clear(); } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final List<String> getDeityList() { @@ -1491,12 +1502,11 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ /** - * Returns the Domains provided to a character up to and including - * the given level + * Returns the Domains provided to a character by ONLY 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 @@ -1510,7 +1520,7 @@ List<Domain> returnList = new ArrayList<Domain>(); for (LevelProperty<Domain> prop : domainList) { - if (prop.getLevel() <= domainLevel) + if (prop.getLevel() == domainLevel) { returnList.add(prop.getObject()); } @@ -1535,7 +1545,7 @@ } /* - * PCCLASSONLY This is only for PCClass - used to edit the class + * FINALPCCLASSONLY This is only for PCClass - used to edit the class */ public final Collection<LevelProperty<String>> getAllFeatAutos() { if (featAutos == null) { @@ -1547,14 +1557,14 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public final Collection<String> getFeatAutos() { + public final Collection<String> getFeatAutos(int aLevel) { List<String> returnList = new ArrayList<String>(); if (featAutos != null) { for (LevelProperty<String> autoFeat : featAutos) { - if (autoFeat.getLevel() <= level) { + if (autoFeat.getLevel() == aLevel) { returnList.add(autoFeat.getObject()); } } @@ -1589,7 +1599,7 @@ * The feat string to remove. */ /* - * PCCLASSONLY This is for GUI construction of a PCClass and is therefore + * FINALPCCLASSONLY This is for GUI construction of a PCClass and is therefore * only required in PCClass and not PCClassLevel */ public boolean removeFeatAuto(String type) { @@ -1613,7 +1623,7 @@ * The feat string to remove. */ /* - * PCCLASSONLY This is for GUI construction of a PCClass and is therefore + * FINALPCCLASSONLY This is for GUI construction of a PCClass and is therefore * only required in PCClass and not PCClassLevel */ public boolean removeFeatAuto(int aLevel, String type) { @@ -1647,8 +1657,7 @@ // } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in - * PCClass for PCClassLevel creation (in the factory) + * FINALPCCLASSONLY This is for construction of a PCClass */ public final List<LevelProperty<String>> getFeatList() { if (featList == null) { @@ -1862,7 +1871,7 @@ } /* - * PCCLASSLEVELONLY created during PCClassLevel creation (in the factory) + * FINALPCCLASSLEVELONLY created during PCClassLevel creation (in the factory) */ public final Collection<String> getSpecialtyList() { if (specialtyList == null) { @@ -1873,8 +1882,15 @@ } /* - * PCCLASSLEVELONLY Input during construction of a PCClassLevel + * FINALPCCLASSLEVELONLY For boolean testing of possession */ + public final boolean hasSpecialtyList() { + return specialtyList != null && specialtyList.size() > 0; + } + + /* + * FINALPCCLASSLEVELONLY Input during construction of a PCClassLevel + */ public final void addSpecialty(final String aSpecialty) { if (specialtyList == null) { specialtyList = new ArrayList<String>(); @@ -1883,7 +1899,7 @@ } /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL 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 aLevel, final Domain aDomain) { @@ -1973,7 +1989,7 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass because it + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and PCClass because it * is a Tag */ public final boolean addProhibitedSchool(String school) { @@ -1988,7 +2004,15 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSONLY This is required in PCClass because it is used in + * construction of PCClassLevel... (or is it required there too??) + */ + public final void clearProhibitedSchools() { + prohibitedSchools = null; + } + + /* + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final List<String> getProhibitedSchools() { @@ -2206,35 +2230,7 @@ } /* - * PCCLASSLEVELONLY since the specialtyList is - * created during PCClassLevel creation (in the factory) - */ - public String getSpecialtyListString(final PlayerCharacter aPC) { - final StringBuffer retString = new StringBuffer(); - - for (final String spec : getSpecialtyList()) { - if (retString.length() > 0) { - retString.append(','); - } - - retString.append(spec); - } - - for (CharacterDomain cd : aPC.getCharacterDomainList()) { - if (cd.getDomain() != null) { - if (retString.length() > 0) { - retString.append(','); - } - - retString.append(cd.getDomain().getKeyName()); - } - } - - return retString.toString(); - } - - /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public final void setSpellBaseStat(final String baseStat) { @@ -2242,7 +2238,7 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final String getSpellBaseStat() { @@ -2269,11 +2265,13 @@ } final StringBuffer aBuf = new StringBuffer(); + boolean needPipe = false; for (String keyStr : classSpellList) { - if (aBuf.length() > 0) { + if (needPipe) { aBuf.append(Constants.PIPE); } + needPipe = true; if (keyStr.endsWith("(Domain)")) { aBuf.append("DOMAIN").append(Constants.PIPE).append( @@ -2303,23 +2301,24 @@ * consistent with the lower levels (or first level) of this PCClass */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass - * because it is a Tag + * FINALPCCLASSONLY This is required in PCClass since it is + * a Tag, but is used for construction of PCClassLevels and therefore + * not passed into a PCCLassLevel */ public final void setClassSpellChoices(int choiceCount, List<String> choices) { classSpellChoices = ChoiceList.getChoiceList(choiceCount, choices); } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in - * PCClass for PCClassLevel creation (in the factory) + * FINALPCCLASSONLY This is only the choice list, not the actual choices + * that were made, so this is only required in the PCClass */ public final ChoiceList<String> getClassSpellChoices() { return classSpellChoices; } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass since + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and PCClass since * it is a Tag */ public final void setSpellType(final String newType) { @@ -2327,7 +2326,7 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final String getSpellType() { @@ -2355,12 +2354,6 @@ castList.add(LevelProperty.getLevelProperty(aLevel, cast)); } - /** - * Return CAST: string for a level - * - * @param aLevel - * @return String - */ /* * REFACTOR to DELETEMETHOD This should really be handled elsewhere, such * as in an export Token or something that is the universal location for @@ -2378,82 +2371,16 @@ } return Collections.emptyList(); } - + /* - * REFACTOR This really needs to be an external item to both PCClass and - * PCClassLevel, in some external Utility Class which is smart enough to do - * mass PCClassLevel processing. Thus this is really a candidate for - * DELETEMETHOD + * PCCLASSONLY For editing a PCClass and Global checks... */ - public int minLevelForSpellLevel(final int spellLevel, - final boolean allowBonus) { - int minLevel = Constants.INVALID_LEVEL; - - for (LevelProperty<List<String>> lp : castList) { - 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; - } + public List<LevelProperty<List<String>>> getCastList() { + if (castList == null) { + final List<LevelProperty<List<String>>> ret = Collections.emptyList(); + return Collections.unmodifiableList(ret); } - - if (minLevel < Constants.INVALID_LEVEL) { - return minLevel; - } - - for (LevelProperty<List<String>> lp : knownList) { - 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; + return castList; } /** @@ -2461,41 +2388,21 @@ * * @return The level of the highest level spell available. */ - /* - * REFACTOR to eliminate the caching (highestSpellLevelMap is useless - * in a case where PCClassLevel is broken out) - */ public int getHighestLevelSpell() { - // check to see if we have a cached value first - if (highestSpellLevelMap != null) { - final Integer highest = highestSpellLevelMap.get(-1); - if (highest != null) { - return highest.intValue(); - } - } - - int highestCastable = -1; + int highest = -1; + if (castList != null) { for (LevelProperty<List<String>> lp : castList) { - highestCastable = Math.max(highestCastable, lp.getObject().size() - 1); + highest = Math.max(highest, lp.getObject().size() - 1); } } - // Highest Known spell for level - int highestKnown = -1; if (knownList != null) { for (LevelProperty<List<String>> lp : knownList) { - highestKnown = Math.max(highestKnown, lp.getObject().size() - 1); + highest = Math.max(highest, lp.getObject().size() - 1); } } - int highest = Math.max(highestCastable, highestKnown); - - // cache the value - if (highestSpellLevelMap == null) { - highestSpellLevelMap = new HashMap<Integer, Integer>(); - highestSpellLevelMap.put(-1, highest); - } return highest; } @@ -2591,8 +2498,7 @@ * PCClassLevel */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in - * PCClass for PCClassLevel creation (in the factory) + * FINALPCCLASSONLY This is for PCClass construction and Global queries */ public List<LevelProperty<List<String>>> getKnownList() { if (Constants.EMPTY_STRING.equals(castAs) @@ -2616,23 +2522,40 @@ } return knownList; } + + /* + * FINALPCCLASSANDLEVEL This is used for detecting spell casting ability + */ + public boolean hasKnownList() { + if (!Constants.EMPTY_STRING.equals(castAs) && !getKeyName().equals(castAs)) { + final PCClass aClass = Globals.getClassKeyed(castAs); + if (aClass != null) { + return aClass.hasKnownList(); + } + } + return knownList != null && !knownList.isEmpty(); + } /** - * Return KNOWN: string for a level + * Return KNOWN: List for a level * * @param aInt * The level of the class to be retrieved - * @return String The KNOWN string, if any - * <p> - * TODO - Why is this a String??? + * @return String The KNOWN List, if any */ /* - * PCCLASSLEVELONLY This is required in PCClassLevel since it is level + * FINALPCCLASSLEVELONLY 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; } @@ -2660,7 +2583,7 @@ } /* - * PCCLASSONLY This is required in PCClass for PCClass editing + * FINALPCCLASSONLY This is required in PCClass for PCClass editing */ public final Collection<LevelProperty<int[]>> getSpecialtyKnownList() { if (specialtyknownList == null) { @@ -2671,7 +2594,7 @@ } /* - * PCCLASSLEVELONLY This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final int[] getSpecialtyKnownList(int aLevel) { @@ -2696,7 +2619,7 @@ * String version of the number of bonus spells. */ /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public final void addSpecialtyKnown(int aLevel, int[] array) { @@ -2776,11 +2699,11 @@ final PlayerCharacter aPC) { if (getCastForLevel(pcLevel, spellLevel, bookName, aPC) > 0) { // if this class has a specialty, return +1 - if (getSpecialtyList().size() > 0) { + if (hasSpecialtyList()) { return "+1"; } - if (aPC.getCharacterDomainList().isEmpty()) { + if (!aPC.hasCharacterDomainList()) { return ""; } @@ -2953,18 +2876,14 @@ } /* - * PCCLASSONLY Since this is setting the possible subclasses, this is only - * part of PCClass, since the specific subclass key will be set during - * PCClassLevel construction + * DELETEMETHOD - unused variable */ public final void setSubClassString(final String aString) { subClassString = aString; } /* - * PCCLASSONLY Since this is setting the possible subclasses, this is only - * part of PCClass, since the specific subclass key will be set during - * PCClassLevel construction + * DELETEMETHOD Per Tir, this is from the 3.0/4.0 cleanup and is unused code. */ public final String getSubClassString() { return subClassString; @@ -2992,18 +2911,14 @@ } /* - * PCCLASSONLY Since this is setting the possible substitution classes, this - * is only part of PCClass, since the specific substitution class key will - * be set during PCClassLevel construction + * DELETEMETHOD - variable is unused */ public final void setSubstitutionClassString(final String aString) { substitutionClassString = aString; } /* - * PCCLASSONLY Since this is getting the possible substitution classes, this - * is only part of PCClass, since the specific substitution class key will - * be set during PCClassLevel construction + * DELETEMETHOD unused method */ public final String getSubstitutionClassString() { return substitutionClassString; @@ -3051,7 +2966,7 @@ } /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method. The PCClassLevelversion should NOT be level * dependent */ @@ -3063,7 +2978,7 @@ } /* - * PCCLASSONLY This is an editor and loader requirement, therefore + * FINALPCCLASSONLY This is an editor and loader requirement, therefore * PCClass only */ public void clearFeatAutos() { @@ -3180,7 +3095,7 @@ * @param aPC */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel PCClass since it is + * FINALPCCLASSANDLEVEL This is required in PCClassLevel PCClass since it is * a Tag [with level dependence differences, of course) */ public final void addVision(int aLevel, Vision vis) { @@ -3191,7 +3106,7 @@ } /* - * PCCLASSONLY This is an editor and loader requirement, therefore + * FINALPCCLASSONLY This is an editor and loader requirement, therefore * PCClass only */ public void clearVisionList() { @@ -3202,7 +3117,7 @@ } /* - * PCCLASSONLY This is an editor and loader requirement, therefore + * FINALPCCLASSONLY This is an editor and loader requirement, therefore * PCClass only */ public boolean removeVisionType(VisionType type) { @@ -3491,26 +3406,42 @@ * @return natural weapons list */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSLEVELONLY This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ - public List<Equipment> getNaturalWeapons() { + /* + * CONSIDER The fact that this does NOT override PObject would break + * EditorMainForm, if EditorMainForm was smart enough to realize that a + * PCClass can have natural weapons. Currently it does not. It would also + * need to be smart enough to deal with level dependencies of Natural + * Weapons in PCClasses, so that is non-trivial. This issue is trackered as + * 1590553 + */ + public List<Equipment> getNaturalWeapons(int aLevel) { + if (naturalWeapons == null) { + return new ArrayList<Equipment>(); + } + final List<Equipment> tempArray = new ArrayList<Equipment>(); - if ((naturalWeapons == null) || (naturalWeapons.isEmpty())) { - return tempArray; - } - for (LevelProperty<Equipment> lp : naturalWeapons) { - if (lp.getLevel() <= level) { - final Equipment weapon = lp.getObject(); - tempArray.add(weapon); -// addWeaponProfAutos(weapon.getName()); + if (lp.getLevel() == level) { + tempArray.add(lp.getObject()); } } return tempArray; } + + /* + * FINALPCCLASSONLY For editing PCClasses + */ + public List<LevelProperty<Equipment>> getAllNaturalWeapons() { + if (naturalWeapons == null) { + return new ArrayList<LevelProperty<Equipment>>(); + } + return naturalWeapons; + } // /* // * (non-Javadoc) @@ -3582,7 +3513,7 @@ * @param srString */ /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public void setSR(int aLevel, String srString) { @@ -3593,48 +3524,58 @@ } /* - * PCCLASSONLY Since this is part of LST file import + * FINALPCCLASSONLY Since this is part of LST file import */ public void clearSR() { SR = null; } - /** - * Assumption: SR list is sorted by level. + /* + * FINALPCCLASSLEVELONLY This is required to fetch the SR * - * REFACTOR This needs to be changed so that there isn't an assumption that - * the SR is sorted by level... - * - * @return SR formula + * UNWIND the level checking will have to be unwound into the users of this + * class, as these SRs will not pass from one PCClassLevel to another unless + * they are specified... */ - /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in - * PCClass for PCClassLevel creation (in the factory) - */ - public String getSRFormula() { - LevelProperty<String> lp = null; + protected int getSR(PlayerCharacter aPC) { + if (aPC == null) { + return 0; + } + + LevelProperty<String> activeLP = null; if (SR != null) { final int lvl = level; - - for (int i = 0, x = SR.size(); i < x; ++i) { - if (SR.get(i).getLevel() > lvl) { - break; + for (LevelProperty<String> lp : SR) { + if (lp.getLevel() > lvl) { + continue; } - - lp = SR.get(i); + if (activeLP == null || activeLP.getLevel() < lp.getLevel()) { + activeLP = lp; + continue; + } } } - if (lp != null) { - return lp.getObject(); + //if there's a current PC, go ahead and evaluate the formula + if (activeLP != null) + { + return aPC.getVariableValue(activeLP.getObject(), getQualifiedKey()).intValue(); } - return null; + return 0; + } + + /* + * FINALPCCLASSONLY This is for building a PCClass + */ + public List<LevelProperty<String>> getSRlist() { + return SR; + } /* - * PCCLASSONLY This is for editing classes + * FINALPCCLASSONLY This is for editing classes */ public LevelProperty<String> getSRforLevel(int aLevel) { if (SR != null) { @@ -4034,10 +3975,15 @@ * @return Map */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) [with level dependent * differences, of course] */ + /* + * UNWIND I'm not going to unwind this one early, because PC.getVisionList + * actually depends on this for a bug fix - this will 'naturally' be fixed + * when PCClassLevel is broken out because it is used in few places. + */ @Override public List<Vision> getVision() { List<Vision> returnList = super.getVision(); @@ -4100,16 +4046,32 @@ } /* - * PCCLASSLEVELONLY This is only part of the level, as the spell list is + * FINALPCCLASSLEVELONLY This is only part of the level, as the skill list is * calculated based on other factors, it is not a Tag */ + public void addClassSkill(final String tok) { + if (classSkillList == null) { + classSkillList = new ArrayList<String>(); + } + classSkillList.add(tok); + } + + /* + * FINALPCCLASSLEVELONLY This is only part of the level, as the skill list is + * calculated based on other factors, it is not a Tag + */ + public void clearClassSkillList() { + classSkillList = null; + } + + /* + * FINALPCCLASSLEVELONLY This is only part of the level, as the spell list is + * calculated based on other factors, it is not a Tag + */ public void addClassSpellList(final String tok) { if (classSpellList == null) { classSpellList = new ArrayList<String>(); - } else { - classSpellList.clear(); } - classSpellList.add(tok); /* * CONSIDER I have taken out classSpellString = null; which is now the @@ -4119,14 +4081,27 @@ * the list). Seems to me a case of unnecessary (and confusing) * deletion... - thpr 10/29/06 */ + /* + * CONSIDER This is a confusing side-effect - this really needs to be + * identified better as a cached variable (transient) so that it is + * recognized that this is simply making a 'cache' dirty - thpr 11/4/06 + */ stableSpellKey = null; } + + /* + * FINALPCCLASSLEVELONLY This is only part of the level, as the spell list is + * calculated based on other factors, it is not a Tag + */ + public void clearClassSpellList() { + classSpellList = null; + } /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ - public void addDomain(final Domain domain, int domainLevel) { + public void addDomain(int domainLevel, final Domain domain) { if (domainList == null) { domainList = new ArrayList<LevelProperty<Domain>>(); } @@ -4164,7 +4139,7 @@ } /* - * PCCLASSANDLEVEL This needs to be in both PCClass (since it's imported from + * FINALPCCLASSANDLEVEL This needs to be in both PCClass (since it's imported from * a Tag) and PCClassLevel (although the PCClassLevel version should not be * level dependent) */ @@ -4177,7 +4152,7 @@ } /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public void setKnown(final int iLevel, final List<String> aList) { @@ -4540,8 +4515,6 @@ // aClass.setSkillPoints(skillPoints); aClass.setSkillPointFormula(skillPointFormula); aClass.setInitialFeats(initialFeats); - aClass.setBonusSpellBaseStat(bonusSpellBaseStat); - aClass.setSpellType(spellType); // aClass.setAttackBonusType(attackBonusType); if (specialtyknownList != null) { aClass.specialtyknownList = new ArrayList<LevelProperty<int[]>>( @@ -4591,7 +4564,6 @@ aClass.maxCastLevel = maxCastLevel; aClass.maxKnownLevel = maxKnownLevel; - aClass.abbrev = abbrev; aClass.memorizeSpells = memorizeSpells; aClass.multiPreReqs = multiPreReqs; aClass.deityList = new ArrayList<String>(deityList); @@ -4603,7 +4575,6 @@ aClass.attackCycleMap = new HashMap<AttackType, String>( attackCycleMap); } - aClass.castAs = castAs; aClass.preRaceType = preRaceType; aClass.modToSkills = modToSkills; aClass.levelsPerFeat = levelsPerFeat; @@ -4686,11 +4657,12 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass, since it is a Tag + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and PCClass, since it is a Tag * * Need to look into the details of stableSpellKey to figure out the appropriate * place for that */ + @Override public void setName(final String newName) { super.setName(newName); @@ -4704,6 +4676,12 @@ abbrev = newName.substring(0, i); } + /* + * CONSIDER This (below) is a bit of a confusing side effect - needs to be + * far more explicit that stableSpellKey is a cache, and that there are + * also side effects to getSpellKey (side effects are bad :( ) - + * thpr 11/4/06 + */ stableSpellKey = null; getSpellKey(); } @@ -4815,10 +4793,10 @@ } /* - * PCCLASSLEVELONLY This is only part of the level, as the skill list is + * FINALPCCLASSLEVELONLY This is only part of the level, as the skill list is * calculated based on other factors, it is not a Tag */ - public boolean hasClassSkillList(final String aString) { + public boolean hasClassSkill(final String aString) { if ((classSkillList == null) || classSkillList.isEmpty()) { return false; } @@ -4838,7 +4816,8 @@ * PCCLASSLEVELONLY? This really seems to be a shortcut test that is part of * the GUI presentation of a PlayerCharacter. It would be really nice if * this could be deleted, but it may actually be providing some speed (need - * to evaluate whether a better test exists, however) + * to evaluate whether a better test exists, however, since it seems REALLY + * slow for something that should be a quick test!) */ public boolean hasKnownSpells(final PlayerCharacter aPC) { for (int i = 0; i <= getHighestLevelSpell(); i++) { @@ -5051,7 +5030,7 @@ } /* - * PCCLASSLEVELONLY This is only part of the level, as the skill list is + * FINALPCCLASSLEVELONLY This is only part of the level, as the skill list is * calculated based on other factors, it is not a Tag */ final List<String> getClassSkillList() { @@ -5324,7 +5303,7 @@ } final StringTokenizer aTok = new StringTokenizer(udamList.get( - Math.max(iLevel - 1, 0)).toString(), ",", false); + Math.max(iLevel - 1, 0)), ",", false); while ((iSize > -1) && aTok.hasMoreTokens()) { aDamage = aTok.nextToken(); @@ -5605,7 +5584,15 @@ makeRegionSelection(newLevel, aPC); // Make sure any natural weapons are added - aPC.addNaturalWeapons(getNaturalWeapons()); + if (naturalWeapons != null) { + List<Equipment> natWeap = new ArrayList<Equipment>(); + for (LevelProperty<Equipment> lp : naturalWeapons) { + if (lp.getLevel() <= newLevel) { + natWeap.add(lp.getObject()); + } + } + aPC.addNaturalWeapons(natWeap); + } } // this is a monster class, so don't worry about experience @@ -6033,7 +6020,19 @@ aPC.validateCharacterDomains(); // be sure to remove any natural weapons - aPC.removeNaturalWeapons(this); + for (Equipment eq : this.getNaturalWeapons(newLevel + 1)) { + /* + * This is a COMPLETE hack to emulate PC.removeNaturalWeapons + * without going through the convoluted "I am level dependent, + * you're not" game that is required in today's PCClass is + * level-aware world. This becomes a lot easier in a + * PCClass/PCClassLevel world, and the system can go back to + * using PC.removeNaturalWeapons + */ + aPC.removeEquipment(eq); + aPC.delEquipSetItem(eq); + aPC.setDirty(true); + } } else { Logging .errorPrint("No current pc in subLevel()? How did this happen?"); @@ -6672,15 +6671,14 @@ } } - for (LevelProperty<String> lp : getFeatList()) { + for (LevelProperty<String> lp : featList) { if (lp.getLevel() == aLevel) { final double preFeatCount = aPC.getUsedFeatCount(); AbilityUtilities.modFeatsFromList(aPC, pcLevelInfo, lp .getObject(), addThem, aLevel == 1); - + final double postFeatCount = aPC.getUsedFeatCount(); - // Adjust the feat count by the total number that were given aPC.adjustFeats(postFeatCount - preFeatCount); } @@ -6744,7 +6742,10 @@ List<List<SubClass>> selectedList = c.getSelectedList(); if (!selectedList.isEmpty()) { - prohibitedSchools = null; + clearProhibitedSchools(); + /* + * CONSIDER What happens to this reset during PCClass/PCClassLevel split + */ specialtyList = null; SubClass sc = selectedList.get(0).get(0); @@ -6847,9 +6848,11 @@ return; } + clearClassSkillList(); + List<String> classSkillChoiceList = classSkillChoices.getList(); if (classSkillChoiceList.size() == 1) { - classSkillList = classSkillChoiceList; + addClassSkill(classSkillChoiceList.get(0)); return; } @@ -6861,10 +6864,8 @@ c.setVisible(true); final List<String> selectedList = c.getSelectedList(); - classSkillList = new ArrayList<String>(); - for (String sel : selectedList) { - classSkillList.add(sel); + addClassSkill(sel); } } @@ -6877,10 +6878,12 @@ if (classSpellChoices == null) { return; } + + clearClassSpellList(); List<String> classSpellChoiceList = classSpellChoices.getList(); if (classSpellChoiceList.size() == 1) { - classSpellList = classSpellChoiceList; + addClassSpellList(classSpellChoiceList.get(0)); return; } @@ -6891,10 +6894,10 @@ c.setAvailableList(classSpellChoiceList); c.setVisible(true); - final List<String> selectedList = c.getSelectedList(); - classSpellList = new ArrayList<String>(); - - classSpellList.addAll(selectedList); + List<String> selectedList = c.getSelectedList(); + for (String st : selectedList) { + addClassSpellList(st); + } } /* @@ -6993,7 +6996,13 @@ * 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)) { + List<Domain> domList = new ArrayList<Domain>(); + for (int lvl = 0 ; lvl <= aLevel ; lvl++) { + for (Domain dom : getDomainList(lvl)) { + domList.add(dom); + } + } + for (final Domain dom : domList) { if (dom.qualifies(aPC)) { String domKey = dom.getKeyName(); @@ -7098,13 +7107,13 @@ * @see pcgen.core.PObject#addNaturalWeapon(pcgen.core.Equipment, int) */ /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method (of course, a level independent version for PCClassLevel) */ public void addNaturalWeapon(final Equipment weapon, final int aLevel) { - /* - * CONSIDER Should this be checking for a null list?? - */ + if (naturalWeapons == null) { + naturalWeapons = new ArrayList<LevelProperty<Equipment>>(); + } naturalWeapons.add(LevelProperty.getLevelProperty(aLevel, weapon)); } @@ -7179,7 +7188,7 @@ * @param aLevel */ /* - * PCCLASSONLY I think (heh) that committing this to the PCClassLevel really should + * FINALPCCLASSONLY I think (heh) that committing this to the PCClassLevel really should * be part of the PCClass Factory, and thus part of the creation of the PCClassLevel * and thus only in PCClass */ Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -4747,13 +4747,14 @@ return null; } - /** - * @return characterDomainList - */ public List<CharacterDomain> getCharacterDomainList() { return Collections.unmodifiableList(characterDomainList); } + + public boolean hasCharacterDomainList() { + return characterDomainList != null && !characterDomainList.isEmpty(); + } public Domain getCharacterDomainKeyed(final String domainKey) { @@ -8188,7 +8189,7 @@ // If they don't memorise spells and don't have // a CastList then they use something funky // like Power Points (psionic) - if (!aClass.getMemorizeSpells() && aClass.getKnownList().isEmpty() && aClass.zeroCastSpells()) + if (!aClass.getMemorizeSpells() && !aClass.hasKnownList() && aClass.zeroCastSpells()) { return true; } @@ -16417,10 +16418,14 @@ for (final PCClass aClass : getClassList()) { - for (final Iterator<String> e1 = aClass.getFeatAutos().iterator(); e1.hasNext();) + List<String> classFeatList = new ArrayList<String>(); + for (int lvl = 0; lvl <= aClass.getLevel(); lvl++) { + for (String st : aClass.getFeatAutos(lvl)) { + classFeatList.add(st); + } + } + for (String autoFeat : classFeatList) { - String autoFeat = e1.next(); - final int idx = autoFeat.indexOf('['); if (idx >= 0) @@ -16495,6 +16500,9 @@ } } + /* + * BUG I think -> if it's empty, we step through it?!? - thpr 11/3/06 + */ if (getCharacterDomainList().isEmpty()) { for (final CharacterDomain aCD : getCharacterDomainList()) Modified: Trunk/pcgen/code/src/java/pcgen/core/Skill.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Skill.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/core/Skill.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -215,7 +215,7 @@ } // test for SKILLLIST skill - if (aClass.hasClassSkillList(keyName)) + if (aClass.hasClassSkill(keyName)) { return true; } Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -372,10 +372,9 @@ // Check to see if we have any domains that have this spell. PObject owner = null; - List<CharacterDomain> cdl = pc.getCharacterDomainList(); - if (cdl != null) + if (pc.hasCharacterDomainList()) { - for (CharacterDomain cd : cdl) + for (CharacterDomain cd : pc.getCharacterDomainList()) { Domain domain = cd.getDomain(); final String key = domain.getSpellKey(); Modified: Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -524,7 +524,7 @@ { // This is a spellcasting class. We may have to select // spells of some sort (known or prepared). - if ( aClass.getKnownList().size() > 0 || aClass.hasKnownSpells(aPC) ) + if ( aClass.hasKnownList() || aClass.hasKnownSpells(aPC) ) { Logging.debugPrint("NPCGenerator: known spells to select"); //$NON-NLS-1$ int highestSpellLevel = aClass.getHighestLevelSpell(aPC); Modified: Trunk/pcgen/code/src/java/pcgen/core/spell/PCSpellTracker.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/spell/PCSpellTracker.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/core/spell/PCSpellTracker.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -103,7 +103,7 @@ buildSpellInfoMap(spellInfoMap, key1, key2, e); } - if (!pc.getCharacterDomainList().isEmpty()) { + if (pc.hasCharacterDomainList()) { List<Domain> domains = new ArrayList<Domain>(); for ( CharacterDomain cd : pc.getCharacterDomainList() ) { @@ -214,7 +214,7 @@ buildSpellLevelMap(levelMatch, e); } - if (!pc.getCharacterDomainList().isEmpty()) { + if (pc.hasCharacterDomainList()) { e = pc.getCharacterDomainList().iterator(); buildSpellLevelMap(levelMatch, e); } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -276,14 +276,8 @@ } } - index = 0; - - while (true) + for (LevelProperty<String> lp : obj.getSRlist()) { - LevelProperty<String> lp = obj.getSRforLevel(index++); - if (lp == null) { - break; - } levelTagList.add(new LevelTag(lp.getLevel(), LevelTag.TAG_SR, lp.getObject())); } Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java 2006-11-05 00:21:29 UTC (rev 1584) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java 2006-11-05 00:22:44 UTC (rev 1585) @@ -45,7 +45,6 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.StringTokenizer; import javax.swing.BorderFactory; import javax.swing.DefaultListSelectionModel; @@ -79,7 +78,6 @@ 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; @@ -461,31 +459,34 @@ // Loop through the available prestige domains for (PCClass aClass : pc.getClassList()) { - for (Domain prestigeDomain : aClass.getAddDoma... [truncated message content] |
From: <th...@us...> - 2006-11-05 23:37:41
|
Revision: 1599 http://svn.sourceforge.net/pcgen/?rev=1599&view=rev Author: thpr Date: 2006-11-05 15:37:30 -0800 (Sun, 05 Nov 2006) Log Message: ----------- Tokens: Correct SubclassToken and SubclasslevelToken (contents reversed) PCClass: Unwind buildSubClassChoiceList for speed and clarity Some minor tweaks for speed Misc: Convert spellMap in SpellSupport to Integer,.. from String,.. for performance Modified Paths: -------------- 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/SpellSupport.java Trunk/pcgen/code/src/java/pcgen/core/SubClass.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/UattToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclassToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclasslevelToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-05 17:12:38 UTC (rev 1598) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-05 23:37:30 UTC (rev 1599) @@ -224,14 +224,16 @@ /* * PCCLASSONLY This is really an item that the PCClass knows, and then the * selected subClass, if any, is structured into the PCClassLevel during the - * construction of the PCClassLevel + * construction of the PCClassLevel (inheritAttributesFrom - although that + * could really be cleaned up and a better method found) */ 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 + * during the construction of the PCClassLevel (inheritAttributesFrom - + * although that could really be cleaned up and a better method found) */ private ArrayList<SubstitutionClass> substitutionClassList = null; @@ -469,11 +471,13 @@ private List<String> deityList = new ArrayList<String>(2); /* - * TYPESAFETY This should not be a String, but a member of a Typesafe - * Enumeration of Classes... + * FUTURETYPESAFETY This should not be a String, but a member of a Typesafe + * Enumeration of Classes... unfortunately, that really requires a two-pass + * design for the LST files... because the EX Class may not exist at the + * time this tag is hit. */ /* - * ALLCLASSLEVELS Because this indicates what a Class becomes when the + * FINALALLCLASSLEVELS Because this indicates what a Class becomes when the * prerequisites are no longer met, this must be passed into each and every * PCClassLevel (though it can be given in its pure form). */ @@ -515,7 +519,7 @@ */ /* * UNKNOWNDESTINATION Don't know where to put this yet... this is a - * COMPLICATED function that allows the exchange of leveis (presumably on a + * COMPLICATED function that allows the exchange of levels (presumably on a * one-time basis). Thus, this needs to be tagged as performed, and thus * unrepeatable. */ @@ -594,12 +598,25 @@ /* * ALLCLASSLEVELS This goes into each PCClassLevel from PCClass in order to * indicate if the given PCClassLevel is actualy a SubClass + * + * CONSIDER Technically, that's not true ... this is really an indication of + * whether the class HAS subclasses or not (an abstract test, not a practical + * "a subclass has been selected" test. Is this therefore duplicate information?? + * + * Can I DELETEVARIABLE? */ private boolean hasSubClass = false; /* * ALLCLASSLEVELS This goes into each PCClassLevel from PCClass in order to * indicate if the given PCClassLevel is actualy a SubstitutionClass + * + * CONSIDER Technically, that's not true ... this is really an indication of + * whether the class HAS substitution classes or not (an abstract test, not + * a practical "a substitution class has been selected" test. Is this + * therefore duplicate information?? + * + * Can I DELETEVARIABLE? */ private boolean hasSubstitutionClass = false; @@ -650,6 +667,8 @@ * "post-hoc" verifications (to find cases later invalidated due to Data * updates or code fixes) and therefore it should be stored in the * PCClassLevel + * + * I really want to DELETEVARIABLE */ private boolean multiPreReqs = false; @@ -1519,7 +1538,7 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass since it + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and PCClass since it * is a Tag */ public final void setExClass(final String aString) { @@ -1527,7 +1546,7 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public final String getExClass() { @@ -2461,16 +2480,6 @@ * feats). */ public final Integer getLevelsPerFeat() { - if (levelsPerFeat == null) { - /* - * REFACTOR This SHOULD NOT protect against a NPE, that should be up - * to the CALLING method to do that... protecting against bad coding - * is a bad practice. - */ - levelsPerFeat = Integer.valueOf(-1); // -1 to indicate it's not a - // 'set' value, this is to avoid - // null pointer errors - } return levelsPerFeat; } @@ -2561,7 +2570,7 @@ * @return The list of automatically known spells. */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ public List<SpellFilter> getKnownSpellsList() { @@ -2847,7 +2856,7 @@ } /* - * PCCLASSONLY This is really an item that the PCClass knows, and then the + * FINALPCCLASSONLY This is really an item that the PCClass knows, and then the * selected subClass, if any, is structured into the PCClassLevel during the * construction of the PCClassLevel */ @@ -2915,16 +2924,13 @@ } /** - * - * @return uattList - * <p> * TODO - This should be removed. */ /* * DELETEMETHOD Associated with the unused List uattList */ - public final Collection<String> getUattList() { - return uattList; + public final void addUatt(String s) { + uattList.add(s); } /* @@ -2978,6 +2984,13 @@ } /* + * PCCLASSLEVELONLY This is required for PlayerCharacter.makeEXclass() + */ + public Map<Integer, Integer> getHitPointMap() { + return new HashMap<Integer, Integer>(hitPointMap); + } + + /* * PCCLASSLEVELONLY This is dependent upon the class level * and is therefore appropriate only for PCClassLevel */ @@ -2998,10 +3011,10 @@ * PCCLASSLEVELONLY This is dependent upon the class level * and is therefore appropriate only for PCClassLevel */ - public final void setHitPointMap(final PCClass otherClass) { + public final void setHitPointMap(Map<Integer, Integer> hpMap) { hitPointMap = null; - if (otherClass.hitPointMap != null) { - hitPointMap = new HashMap<Integer, Integer>(otherClass.hitPointMap); + if (hpMap != null) { + hitPointMap = new HashMap<Integer, Integer>(hpMap); } } @@ -3129,8 +3142,8 @@ { int monLev = aPC.getRace().getMonsterClassLevels(aPC, false); - int MLevPerFeat = this.getLevelsPerFeat().intValue(); - divisor = (MLevPerFeat >= 1) ? MLevPerFeat : rangeLevel; + Integer mLevPerFeat = getLevelsPerFeat(); + divisor = (mLevPerFeat != null && mLevPerFeat >= 1) ? mLevPerFeat : rangeLevel; formula = new StringBuffer("max(0,floor((CL-"); formula.append(monLev); formula.append(")/"); @@ -3338,12 +3351,20 @@ } /* - * PCCLASSANDLEVEL This is required in PCClassLevel and should be present in + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and should be present in * PCClass for PCClassLevel creation (in the factory) */ + /* + * FUTUREREFACTOR This would really be nice to have initilized when the LST files + * are read in, which is possible because the ClassTypes are all defined as part + * of the GameMode... however the problem is that the order of the ISMONSTER tag + * and the TYPE tags cannot be defined - .MODs and .COPYs make it impossible to + * guarantee an order. Therefore, this must wait for a two-pass design in the + * import system - thpr 10/4/06 + */ public boolean isMonster() { if (monsterFlag != null) { - return monsterFlag.equals(Boolean.TRUE); + return monsterFlag.booleanValue(); } if (getMyTypeCount() == 0) { @@ -3572,24 +3593,17 @@ /** * Sets this class as a "monster" class. - * * <p> * Monster classes have special behaviour in certain cases. * - * <p> - * TODO - Figure out what those cases are. - * * @param aFlag * true if this is a monster class. */ /* - * PCCLASSANDLEVEL This is required in PCClassLevel and PCClass since + * FINALPCCLASSANDLEVEL This is required in PCClassLevel and PCClass since * it is a Tag */ public void setMonsterFlag(final boolean aFlag) { - if (monsterFlag == null) { - monsterFlag = Boolean.valueOf(aFlag); - } monsterFlag = aFlag; } @@ -4071,7 +4085,7 @@ } /* - * PCCLASSONLY This is really an item that the PCClass knows, and then the + * FINALPCCLASSONLY This is really an item that the PCClass knows, and then the * selected subClass, if any, is structured into the PCClassLevel during the * construction of the PCClassLevel */ @@ -4080,7 +4094,7 @@ subClassList = new ArrayList<SubClass>(); } - sClass.setHitPointMap(this); + sClass.setHitPointMap(hitPointMap); sClass.setHitDie(hitDie); subClassList.add(sClass); } @@ -4095,7 +4109,7 @@ substitutionClassList = new ArrayList<SubstitutionClass>(); } - sClass.setHitPointMap(this); + sClass.setHitPointMap(hitPointMap); sClass.setHitDie(hitDie); substitutionClassList.add(sClass); } @@ -4134,7 +4148,7 @@ } /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public void addKnownSpell(final SpellFilter aFilter) { @@ -4145,7 +4159,7 @@ } /* - * PCCLASSONLY - for class construction + * FINALPCCLASSONLY - for class construction */ public void clearKnownSpellsList() { knownSpellsList = null; @@ -4521,7 +4535,6 @@ aClass.classSpellList = null; aClass.stableSpellKey = null; - aClass.setExClass(exClass); aClass.setLevelExchange(levelExchange); aClass.maxCastLevel = maxCastLevel; aClass.maxKnownLevel = maxKnownLevel; @@ -4554,9 +4567,10 @@ //This is ok as a shallow copy - contract on readers of domainList aClass.addDomains = new ArrayList<LevelProperty<Domain>>(addDomains); } - aClass.setHitPointMap(this); + if (hitPointMap != null) { + aClass.hitPointMap = new HashMap<Integer, Integer>(hitPointMap); + } aClass.hasSubClass = hasSubClass; - aClass.subClassList = subClassList; aClass.hasSubstitutionClass = hasSubstitutionClass; aClass.substitutionClassList = substitutionClassList; @@ -4665,7 +4679,7 @@ } /* - * PCCLASSONLY This is really an item that the PCClass knows, and then the + * FINALPCCLASSONLY This is really an item that the PCClass knows, and then the * selected subClass, if any, is structured into the PCClassLevel during the * construction of the PCClassLevel */ @@ -6251,8 +6265,7 @@ */ /* * DELETEMETHOD if not PCCLASSONLY. This is required in PCClass since - * it is really done during addLevel. Note that templatesAdded is - * never used and will be deleted. + * it is really done during addLevel. */ public List<String> getTemplates(final boolean flag, final PlayerCharacter aPC) { @@ -6436,91 +6449,6 @@ } /** - * Build a list of Sub-Classes for the user to choose from. The two lists - * passed in will be populated. - * - * @param choiceList - * The list of sub-classes to choose from. - * @param removeList - * The list of sub-classes that cannot be chosen - * @param useProhibitCost - * SHould the prohibited cost be used rather than the cost of the - * sub-class. - * @param aPC - */ - /* - * 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 void buildSubClassChoiceList(final List<List> choiceList, - final List<List> removeList, final boolean useProhibitCost, - final PlayerCharacter aPC) { - int displayedCost; - - boolean subClassSelected = false; - for (SubClass sc : subClassList) { - if (!PrereqHandler.passesAll(sc.getPreReqList(), aPC, this)) { - continue; - } - - final List<Object> columnList = new ArrayList<Object>(3); - - if (useProhibitCost) { - displayedCost = sc.getProhibitCost(); - } else { - if (!this.getSubClassKey().equals("None")) { - // We already have a subclass requested. - // If it is legal we will return that. - subClassSelected = true; - } - displayedCost = sc.getCost(); - } - - boolean added = false; - columnList.add(sc); - columnList.add(String.valueOf(displayedCost)); - - StringBuffer otherColumn = new StringBuffer(); - if (sc.getNumSpellsFromSpecialty() != 0) { - otherColumn.append("SPECIALTY SPELLS:").append( - sc.getNumSpellsFromSpecialty()); - added = true; - } - - if (sc.getSpellBaseStat() != null) { - if (otherColumn.length() > 0) { - otherColumn.append(" "); - } - otherColumn.append("SPELL BASE STAT:").append( - sc.getSpellBaseStat()); - added = true; - } - - if (!added) { - otherColumn.append(' '); - } - columnList.add(otherColumn.toString()); - - if (displayedCost == 0) { - removeList.add(columnList); - } - - choiceList.add(columnList); - } - if (useProhibitCost == false && subClassSelected == true) { - // We want to return just the selected class. - for (Iterator<List> i = choiceList.iterator(); i.hasNext();) { - List columns = i.next(); - SubClass sc = (SubClass) columns.get(0); - if (!sc.getKeyName().equals(this.getSubClassKey())) { - i.remove(); - } - } - } - } - - /** * Build a list of Substitution Classes for the user to choose from. The * list passed in will be populated. * @@ -6674,17 +6602,41 @@ columnNames.add("Other"); List<List> choiceList = new ArrayList<List>(); - List<List> removeList = new ArrayList<List>(); - buildSubClassChoiceList(choiceList, removeList, false, aPC); + + for (SubClass sc : subClassList) { + /* + * BUG MULTIPREREQS would fail here on a SubClass :( - thpr 11/4/06 + * + * STOP THE MAGIC, I want to delete MULTIPREREQs + */ + if (!PrereqHandler.passesAll(sc.getPreReqList(), aPC, this)) { + continue; + } + final List<Object> columnList = new ArrayList<Object>(3); + + columnList.add(sc); + columnList.add(Integer.toString(sc.getCost())); + columnList.add(sc.getSupplementalDisplayInfo()); + + if (!getSubClassKey().equals(Constants.s_NONE)) { + // We already have a subclass requested. + // If it is legal we will return that. + choiceList.clear(); + choiceList.add(columnList); + break; + } + + choiceList.add(columnList); + } + /* * REFACTOR This makes an assumption that SubClasses are ONLY Schools, which may * not be a fabulous assumption */ final ChooserInterface c = ChooserFactory.getChooserInstance(); c.setTitle("School Choice (Specialisation)"); - c - .setMessageText("Make a selection. The cost column indicates the cost of that selection. " + c.setMessageText("Make a selection. The cost column indicates the cost of that selection. " + "If this cost is non-zero, you will be asked to also " + "select items from this list to give up to cover that cost."); c.setPool(1); @@ -6712,21 +6664,35 @@ SubClass sc = selectedList.get(0).get(0); choiceList = new ArrayList<List>(); - removeList = new ArrayList<List>(); - buildSubClassChoiceList(choiceList, removeList, true, aPC); + + for (SubClass sub : subClassList) { + if (sub.equals(sc)) { + //Skip the selected specialist school + continue; + } + /* + * BUG MULTIPREREQS would fail here on a SubClass :( - thpr 11/4/06 + * + * STOP THE MAGIC, I want to delete MULTIPREREQs + */ + if (!PrereqHandler.passesAll(sub.getPreReqList(), aPC, this)) { + continue; + } - // Remove the specialist school - for (Iterator<List> iter = choiceList.iterator(); iter.hasNext();) { - final List columns = iter.next(); + final List<Object> columnList = new ArrayList<Object>(3); - if (columns.get(0).equals(sc)) { - iter.remove(); - - break; + int displayedCost = sub.getProhibitCost(); + if (displayedCost == 0) { + continue; } + + columnList.add(sub); + columnList.add(Integer.toString(displayedCost)); + columnList.add(sub.getSupplementalDisplayInfo()); + + choiceList.add(columnList); } - choiceList.removeAll(removeList); setSubClassKey(sc.getKeyName()); if (sc.getChoice().length() > 0) { @@ -6738,8 +6704,7 @@ c1.setTitle("School Choice (Prohibited)"); c1.setAvailableColumnNames(columnNames); c1.setAvailableList(choiceList); - c1 - .setMessageText("Make a selection. You must make as many selections " + c1.setMessageText("Make a selection. You must make as many selections " + "necessary to cover the cost of your previous selections."); c1.setPool(sc.getCost()); c1.setPoolFlag(true); Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-05 17:12:38 UTC (rev 1598) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-05 23:37:30 UTC (rev 1599) @@ -9057,7 +9057,7 @@ rebuildLists(bClass, aClass, aClass.getLevel(), this); bClass.setLevel(aClass.getLevel(), this); - bClass.setHitPointMap(aClass); + bClass.setHitPointMap(aClass.getHitPointMap()); final int idx = classList.indexOf(aClass); classList.set(idx, bClass); Modified: Trunk/pcgen/code/src/java/pcgen/core/SpellSupport.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpellSupport.java 2006-11-05 17:12:38 UTC (rev 1598) +++ Trunk/pcgen/code/src/java/pcgen/core/SpellSupport.java 2006-11-05 23:37:30 UTC (rev 1599) @@ -53,7 +53,7 @@ private HashMap<String, Integer> spellLevelMap = new HashMap<String, Integer>(); private DoubleKeyMap<String, String, Info> spellInfoMap = new DoubleKeyMap<String, String, Info>(); - private HashMapToList<String, PCSpell> spellMap = new HashMapToList<String, PCSpell>(); + private HashMapToList<Integer, PCSpell> spellMap = new HashMapToList<Integer, PCSpell>(); private HashMap<String, List<Prerequisite>> preReqSpellLevelMap = new HashMap<String, List<Prerequisite>>(); /* @@ -180,7 +180,7 @@ */ public void addSpells(final int level, final List<PCSpell> aSpellList) { - final String aLevel = Integer.toString(level); + Integer aLevel = Integer.valueOf(level); for (PCSpell spell : aSpellList ) { if (!spellMap.containsInList(aLevel, spell)) @@ -202,9 +202,9 @@ if (spellMap != null) { - for ( String key : spellMap.getKeySet() ) + for ( Integer key : spellMap.getKeySet() ) { - if (allSpells || Integer.parseInt(key.toString()) <= levelLimit) + if (allSpells || key <= levelLimit) { aList.addAll(spellMap.getListFor(key)); } @@ -226,9 +226,9 @@ if (spellMap != null) { - for ( String key : spellMap.getKeySet() ) + for ( Integer key : spellMap.getKeySet() ) { - if (Integer.parseInt(key.toString()) == level) + if (key == level) { aList.addAll(spellMap.getListFor(key)); } @@ -243,7 +243,7 @@ */ public final void clearSpellList() { - spellMap = new HashMapToList<String, PCSpell>(); + spellMap = new HashMapToList<Integer, PCSpell>(); } /** @@ -545,7 +545,7 @@ public Object clone() throws CloneNotSupportedException { SpellSupport ss = (SpellSupport) super.clone(); ss.spellInfoMap = (DoubleKeyMap<String, String, Info>) spellInfoMap.clone(); - ss.spellMap = new HashMapToList<String, PCSpell>(); + ss.spellMap = new HashMapToList<Integer, PCSpell>(); ss.spellMap.addAllLists(spellMap); if (characterSpellList != null) { ss.characterSpellList = new ArrayList<CharacterSpell>(characterSpellList); Modified: Trunk/pcgen/code/src/java/pcgen/core/SubClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SubClass.java 2006-11-05 17:12:38 UTC (rev 1598) +++ Trunk/pcgen/code/src/java/pcgen/core/SubClass.java 2006-11-05 23:37:30 UTC (rev 1599) @@ -172,4 +172,27 @@ Logging.errorPrint(exc.getMessage()); } } + + public String getSupplementalDisplayInfo() { + boolean added = false; + StringBuffer displayInfo = new StringBuffer(); + if (getNumSpellsFromSpecialty() != 0) { + displayInfo.append("SPECIALTY SPELLS:").append( + getNumSpellsFromSpecialty()); + added = true; + } + + if (getSpellBaseStat() != null) { + if (added) { + displayInfo.append(" "); + } + displayInfo.append("SPELL BASE STAT:").append(getSpellBaseStat()); + added = true; + } + + if (!added) { + displayInfo.append(' '); + } + return displayInfo.toString(); + } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/UattToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/UattToken.java 2006-11-05 17:12:38 UTC (rev 1598) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/UattToken.java 2006-11-05 23:37:30 UTC (rev 1599) @@ -13,7 +13,7 @@ } public boolean parse(PCClass pcclass, String value, int level) { - pcclass.getUattList().add(value); + pcclass.addUatt(value); return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclassToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclassToken.java 2006-11-05 17:12:38 UTC (rev 1598) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclassToken.java 2006-11-05 23:37:30 UTC (rev 1599) @@ -9,11 +9,11 @@ public class SubclassToken implements SubClassLstToken { public String getTokenName() { - return "SUBCLASSLEVEL"; + return "SUBCLASS"; } public boolean parse(SubClass subclass, String value) { - subclass.addToLevelArray(value); + subclass.setName(value); return true; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclasslevelToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclasslevelToken.java 2006-11-05 17:12:38 UTC (rev 1598) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclasslevelToken.java 2006-11-05 23:37:30 UTC (rev 1599) @@ -4,16 +4,16 @@ import pcgen.persistence.lst.SubClassLstToken; /** - * Class deals with SUBCLASS Token + * Class deals with SUBCLASSLEVEL Token */ public class SubclasslevelToken implements SubClassLstToken { public String getTokenName() { - return "SUBCLASS"; + return "SUBCLASSLEVEL"; } public boolean parse(SubClass subclass, String value) { - subclass.setName(value); + subclass.addToLevelArray(value); return true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2006-11-08 02:14:35
|
Revision: 1605 http://svn.sourceforge.net/pcgen/?rev=1605&view=rev Author: thpr Date: 2006-11-07 18:14:21 -0800 (Tue, 07 Nov 2006) Log Message: ----------- BUG 1592361: Provides fix for Template HITDIE tags being applied twice when a character had a SUBCLASS Add new warning if a user has a SUBCLASS: line without additional tags (illegal because COST: is required, but the existing error message was hard to decode) Some minor cleanups to PCClass for PCClass/PCClassLevel split Moves some code out to CLASS exporttoken Modified Paths: -------------- 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/SpecialAbility.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-06 19:31:55 UTC (rev 1604) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2006-11-08 02:14:21 UTC (rev 1605) @@ -180,7 +180,7 @@ private ArrayList<String> specialtyList = null; /* - * FINALALLCLASSLEVELS The specialtyKnownList [based on their level and/or + * 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. */ @@ -368,6 +368,11 @@ * 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; /* @@ -587,7 +592,7 @@ private String subClassKey = Constants.s_NONE; /* - * ALLCLASSLEVELS This goes into each PCClassLevel from PCClass in order to + * FINALALLCLASSLEVELS This goes into each PCClassLevel from PCClass in order to * store what the substitution level actually is. This is NOT set by a tag, so it is * PCCLASSLEVELONLY */ @@ -621,18 +626,18 @@ private boolean hasSubstitutionClass = false; /* - * ALLCLASSLEVELS I think this is appropriate to put into all PCClassLevels, + * 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). */ /* - * REFACTOR This gets VERY interesting as far as prerequisite checking. + * 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?) + * matching keys? - I think so, yes.) */ private boolean memorizeSpells = true; @@ -734,6 +739,13 @@ */ /* * REFACTOR can this use an int or is null significant? + * + * Well, it looks like null is at least marginally significant, but nothing + * that a special (perhaps negative) value couldn't fix. The key here is in + * getting the legal parameters of this method established. The setter is + * gating the possible values (yea!) but then there are later assumptions in + * other parts of the code that the value can be anything, and they retest + * the value. Make consistent and eliminate useless code - thpr 11/6/06 */ private Integer levelsPerFeat = null; @@ -768,7 +780,7 @@ * processed as a Formula, not a String... */ /* - * ALLCLASSLEVELS The RESULT of this formula - at least I think it's the + * FINALALLCLASSLEVELS The RESULT of this formula - at least I think it's the * result - need to check on what's legal in the formula and whether this * must be calculated on the fly or not - can be placed into each * PCClassLevel. NOTE: This placement into the PCClassLevel needs to be @@ -1377,109 +1389,6 @@ } /* - * REFACTOR this to get it out into the exporttoken class (is that possible?) - */ - public List<String> getClassSpecialAbilityList(final PlayerCharacter aPC) { - final List<String> aList = new ArrayList<String>(); - final List<String> formattedList = new ArrayList<String>(); - final List<SpecialAbility> abilityList = getListFor(ListKey.SPECIAL_ABILITY); - - // - // Determine the list of abilities from this class - // that the character is eligable for - // - if (abilityList == null) { - return aList; - } - - if (!abilityList.isEmpty()) { - for (SpecialAbility saAbility : abilityList) { - final String aString = saAbility.toString(); - - boolean found = false; - - // TODO shouldn't this be - // if ( aList.contains( aString ) ) - for (String str : aList) { - if (aString.equals(str)) { - found = true; - - break; - } - } - - if (!found && saAbility.pcQualifiesFor(aPC)) { - aList.add(aString); - } - } - } - - // - // From the list of allowed SAs, format the output strings - // to include all of the variables - for (String str : aList) { - StringTokenizer varTok = new StringTokenizer(str, Constants.PIPE, - false); - final String aString = varTok.nextToken(); - - int[] varValue = null; - int varCount = varTok.countTokens(); - - if (varCount != 0) { - varValue = new int[varCount]; - - for (int j = 0; j < varCount; ++j) { - // Get the value for each variable - final String vString = varTok.nextToken(); - varValue[j] = aPC.getVariable(vString, true, true, "", "", - 0).intValue(); - } - } - - final StringBuffer newAbility = new StringBuffer(); - varTok = new StringTokenizer(aString, "%", true); - varCount = 0; - - boolean isZero = false; - - // Fill in each % with the value of the appropriate token - while (varTok.hasMoreTokens()) { - final String nextTok = varTok.nextToken(); - - if ("%".equals(nextTok)) { - if (varCount == 0) { - // If this is the first token, then set the count of - // successfull token replacements to 0 - isZero = true; - } - - if ((varValue != null) && (varCount < varValue.length)) { - final int thisVar = varValue[varCount++]; - - // Update isZero if this token has a value of anything - // other than 0 - isZero &= (thisVar == 0); - newAbility.append(thisVar); - } else { - newAbility.append('%'); - } - } else { - newAbility.append(nextTok); - } - } - - if (!isZero) { - // If all of the tokens for this ability were 0 then we do not - // show it, - // otherwise we add it to the return list. - formattedList.add(newAbility.toString()); - } - } - - return formattedList; - } - - /* * FINALPCCLASSLEVELONLY This is only part of the level, as the spell list is * calculated based on other factors, it is not a Tag */ @@ -1677,7 +1586,7 @@ } /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public final void setHitDie(final int dice) { @@ -1685,7 +1594,7 @@ } /* - * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public int getBaseHitDie() { @@ -1817,7 +1726,7 @@ } /* - * PCCLASSANDLEVEL This is a characteristic of both the PCClass and + * FINALPCCLASSANDLEVEL This is a characteristic of both the PCClass and * the individual PCClassLevels (because they grant spells) */ public final void setMemorizeSpells(final boolean memorizeSpells) { @@ -1825,7 +1734,7 @@ } /* - * PCCLASSANDLEVEL This is a characteristic of both the PCClass and + * FINALPCCLASSANDLEVEL This is a characteristic of both the PCClass and * the individual PCClassLevels (because they grant spells) */ public final boolean getMemorizeSpells() { @@ -1835,11 +1744,21 @@ /* * PCCLASSANDLEVEL This is a characteristic of both the PCClass and * the individual PCClassLevels (for later verification) + * + * I am trying to DELETEMETHOD by deletign multipreqs - thpr 11/6/06 */ public final void setMultiPreReqs(final boolean multiPreReqs) { this.multiPreReqs = multiPreReqs; } + /* + * PCCLASSANDLEVEL This is a characteristic of both the PCClass and + * the individual PCClassLevels (since the prereq needs to be + * enforced at every level-up) + * + * Trying to DELETEMETHOD by cleaning out PRERACETYPE - but need + * some more guidance from Tir on how this should work - thpr 11/6/06 + */ public final void setPreRaceType(final String preRaceType) { this.preRaceType = preRaceType.toUpperCase(); } @@ -1928,21 +1847,31 @@ * a certain advancement level, not across the entire Class level * progression. */ + /* + * REFACTOR At least CONSIDER Whether this should be an @Override of + * getDisplayName()? What additional value does this provide by being + * a separate method?? - thpr 11/6/06 + */ public String getDisplayClassName() { if ((subClassKey.length() > 0) && !subClassKey.equals(Constants.s_NONE)) { return getSubClassKeyed(subClassKey).getDisplayName(); } - return displayName; + return getDisplayName(); } /* - * PCCLASSANDLEVEL This can be simplified, however, since there won't be the + * PCCLASSLEVELONLY This can be simplified, however, since there won't be the * same subClass type delegation within the new PCClassLevel. - note this * method is really the PCClassLevel implementation of getDisplayClassName() * above [so technically this method doesn't go into PCClass, the method * above does) */ + /* + * REFACTOR Once this is in PCClassLevel, at least CONSIDER Whether this + * should be an @Override of getDisplayName()? What additional value does + * this provide by being a separate method?? - thpr 11/6/06 + */ public String getDisplayClassName(final int aLevel) { String aKey = getSubstitutionClassKey(aLevel); if (aKey == null) { @@ -1972,6 +1901,8 @@ * PCCLASSANDLEVEL Since this (or a new boolean identifier, perhaps, to * avoid confusion) is both a tag and an identifier for each class level as * to whether the subclass is activated, this is required in both locations. + * + * Trying to DELETEMETHOD by deleting HASSUBCLASS - thpr 11/6/06 */ public final void setHasSubClass(final boolean arg) { hasSubClass = arg; @@ -1982,6 +1913,8 @@ * avoid confusion) is both a tag and an identifier for each class level as * to whether the substitution class is activated, this is required in both * locations. + * + * Trying to DELETEMETHOD by deleting HASSUBSTITUTIONCLASS - thpr 11/6/06 */ public final void setHasSubstitutionClass(final boolean arg) { hasSubstitutionClass = arg; @@ -2035,7 +1968,7 @@ */ public int getLevelHitDie(final PlayerCharacter aPC, final int classLevel) { // Class Base Hit Die - int currHitDie = getLevelHitDieUnadjusted(aPC, classLevel); + int currHitDie = getBaseHitDie(); // Race String dieLock = aPC.getRace().getHitDieLock(); @@ -2077,6 +2010,15 @@ * only appropriate in the PCClassLevel that has the particular Hit Die for * which the calculation is required. */ + /* + * REFACTOR I think this should be a separate Class. Since this modification + * can't be done before it is time to do it "on the fly", we can at least + * "compile" the Die Lock, so that this string parsing doesn't happen every + * time. The question is: Is this an enumeration, Interface with + * implementations, or what is the best method for getting this effect + * without making the system far too complicated for something that really + * is very simple. - thpr 11/6/06 + */ private int calcHitDieLock(String dieLock, final int currDie) { final int[] dieSizes = Globals.getDieSizes(); int diedivide; @@ -2193,23 +2135,6 @@ } /* - * PCCLASSLEVELONLY This is an active level calculation, and is therefore - * only appropriate in the PCClassLevel that has the particular Hit Die for - * which the calculation is required. - */ - public final int getLevelHitDieUnadjusted(final PlayerCharacter aPC, - final int classLevel) { - if ("None".equals(subClassKey)) { - return hitDie; - } - final SubClass aSubClass = getSubClassKeyed(subClassKey); - if (aSubClass != null) { - return aSubClass.getLevelHitDie(aPC, classLevel); - } - return hitDie; - } - - /* * sets whether stat modifier is applied to skill points at level-up time */ public final void setModToSkills(final boolean bool) { @@ -2221,7 +2146,7 @@ } /* - * PCCLASSANDLEVEL Since this is a tag, and also impacts the number of + * FINALPCCLASSANDLEVEL Since this is a tag, and also impacts the number of * skills at a particular level, this (or perhaps just the result?) needs to * be in both PCClass and PCClassLevel */ @@ -2230,7 +2155,7 @@ } /* - * PCCLASSANDLEVEL Since this is a tag, and also impacts the number of + * FINALPCCLASSANDLEVEL Since this is a tag, and also impacts the number of * skills at a particular level, this (or perhaps just the result?) needs to * be in both PCClass and PCClassLevel */ @@ -2296,10 +2221,6 @@ } /* - * BUG This is currently NOT processed correctly by PCClass or PCGen, in - * that duplicate spell casting ability is never assigned. - */ - /* * UPPERLEVELPREREQ classSpellString is supposed to allow the spell use of * another class to this PCClass. Because it is possible to assign only a * subset of the items in the CLASSSPELL tag (if the tag is @@ -2364,10 +2285,11 @@ } /* - * REFACTOR to DELETEMETHOD This should really be handled elsewhere, such - * as in an export Token or something that is the universal location for - * recreating Strings out of more advanced structures. PCClass and - * PCClassLevel are not the place for this + * PCCLASSLEVELONLY Since this is the PCClassLevel specific version + * of getCastList, it is only appropriate for the class levels. + * + * May also be required in the Factory for PCClassLevels, so might + * also appear in PCClass. */ public List<String> getCastListForLevel(int aLevel) { if (castList != null) { @@ -2440,7 +2362,6 @@ return high; } - /** * Return number of spells known for a level. * @@ -2497,7 +2418,7 @@ * PCClassLevel */ /* - * FINALPCCLASSONLY This is for PCClass construction and Global queries + * PCCLASSONLY This is for PCClass construction and Global queries */ public List<LevelProperty<List<String>>> getKnownList() { if (Constants.EMPTY_STRING.equals(castAs) @@ -2523,7 +2444,7 @@ } /* - * FINALPCCLASSANDLEVEL This is used for detecting spell casting ability + * PCCLASSANDLEVEL This is used for detecting spell casting ability */ public boolean hasKnownList() { if (!Constants.EMPTY_STRING.equals(castAs) && !getKeyName().equals(castAs)) { @@ -2543,7 +2464,7 @@ * @return String The KNOWN List, if any */ /* - * FINALPCCLASSLEVELONLY This is required in PCClassLevel since it is level + * 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. @@ -2582,7 +2503,7 @@ } /* - * FINALPCCLASSONLY This is required in PCClass for PCClass editing + * PCCLASSONLY This is required in PCClass for PCClass editing */ public final Collection<LevelProperty<int[]>> getSpecialtyKnownList() { if (specialtyknownList == null) { @@ -2593,7 +2514,7 @@ } /* - * FINALPCCLASSANDLEVEL 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 int[] getSpecialtyKnownList(int aLevel) { @@ -2618,7 +2539,7 @@ * String version of the number of bonus spells. */ /* - * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public final void addSpecialtyKnown(int aLevel, int[] array) { @@ -2799,7 +2720,7 @@ } /* - * PCCLASSLEVELONLY Since this is setting the key that will appear in + * FINALPCCLASSLEVELONLY Since this is setting the key that will appear in * the PCClassLevel (called during construction) this is only required * in the level objects, not PCClass */ @@ -2811,7 +2732,7 @@ } /* - * PCCLASSLEVELONLY Since this is getting the key that will appear in + * FINALPCCLASSLEVELONLY Since this is getting the key that will appear in * the PCClassLevel (was set during construction) this is only required * in the level objects, not PCClass */ @@ -2875,7 +2796,7 @@ } /* - * PCCLASSONLY This is really an item that the PCClass knows, and then the + * FINALPCCLASSONLY 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 */ @@ -2884,11 +2805,9 @@ return null; } - for (Iterator i = substitutionClassList.iterator(); i.hasNext();) { - final SubstitutionClass a = (SubstitutionClass) i.next(); - - if (a.getKeyName().equals(aKey)) { - return a; + for (SubstitutionClass sc : substitutionClassList) { + if (sc.getKeyName().equals(aKey)) { + return sc; } } @@ -4128,7 +4047,7 @@ } /* - * FINALPCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel + * PCCLASSANDLEVEL Input from a Tag, and factory creation of a PCClassLevel * require this method */ public void setKnown(final int iLevel, final List<String> aList) { @@ -4487,10 +4406,7 @@ if (prohibitedSchools != null) { aClass.prohibitedSchools = new ArrayList<String>(prohibitedSchools); } - aClass.setHitDie(hitDie); // aClass.setSkillPoints(skillPoints); - aClass.setSkillPointFormula(skillPointFormula); - aClass.setInitialFeats(initialFeats); // aClass.setAttackBonusType(attackBonusType); if (specialtyknownList != null) { aClass.specialtyknownList = new ArrayList<LevelProperty<int[]>>( @@ -4539,10 +4455,8 @@ aClass.maxCastLevel = maxCastLevel; aClass.maxKnownLevel = maxKnownLevel; - aClass.memorizeSpells = memorizeSpells; aClass.multiPreReqs = multiPreReqs; aClass.deityList = new ArrayList<String>(deityList); - aClass.maxLevel = maxLevel; if (knownSpellsList != null) { aClass.knownSpellsList = new ArrayList<SpellFilter>(knownSpellsList); } @@ -4550,9 +4464,7 @@ aClass.attackCycleMap = new HashMap<AttackType, String>( attackCycleMap); } - aClass.preRaceType = preRaceType; aClass.modToSkills = modToSkills; - aClass.levelsPerFeat = levelsPerFeat; aClass.initMod = initMod; if (specialtyList != null) { aClass.specialtyList = new ArrayList<String>(specialtyList); @@ -6904,6 +6816,8 @@ if (otherClass.naturalWeapons != null) { naturalWeapons = new ArrayList<LevelProperty<Equipment>>(otherClass.naturalWeapons); } + + hitDie = otherClass.hitDie; } private void modDomainsForLevel(final int aLevel, final boolean adding, Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-06 19:31:55 UTC (rev 1604) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-11-08 02:14:21 UTC (rev 1605) @@ -7569,8 +7569,7 @@ { for (int level = 1; level <= pcClass.getLevel(); level++) { - int baseHD = pcClass.getLevelHitDieUnadjusted(this, - level); + int baseHD = pcClass.getBaseHitDie(); if (baseHD != pcClass.getLevelHitDie(this, level)) { // If the HD has changed from base reroll Modified: Trunk/pcgen/code/src/java/pcgen/core/SpecialAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpecialAbility.java 2006-11-06 19:31:55 UTC (rev 1604) +++ Trunk/pcgen/code/src/java/pcgen/core/SpecialAbility.java 2006-11-08 02:14:21 UTC (rev 1605) @@ -129,7 +129,7 @@ return displayName; } - boolean pcQualifiesFor(final PlayerCharacter aPC) + public boolean pcQualifiesFor(final PlayerCharacter aPC) { if ("".equals(saSource) || saSource.endsWith("|0")) { Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2006-11-06 19:31:55 UTC (rev 1604) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2006-11-08 02:14:21 UTC (rev 1605) @@ -69,6 +69,11 @@ if (lstLine.startsWith("SUBCLASS:")) { + if (lstLine.indexOf("\t") == -1) { + Logging.errorPrint("Expected SUBCLASS to have " + + "additional Tags in " + source.getFile() + + " (e.g. COST is a required Tag in a SUBCLASS)"); + } final String n = lstLine.substring(9, lstLine.indexOf("\t")); subClass = pcClass.getSubClassKeyed(n); Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java 2006-11-06 19:31:55 UTC (rev 1604) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/ClassToken.java 2006-11-08 02:14:21 UTC (rev 1605) @@ -28,10 +28,13 @@ import pcgen.core.Constants; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; +import pcgen.core.SpecialAbility; import pcgen.core.utils.CoreUtility; +import pcgen.core.utils.ListKey; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; +import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; @@ -153,13 +156,103 @@ if (pc.getClassList().size() > classNumber) { PCClass pcClass = pc.getClassList().get(classNumber); - List<String> saList = pcClass.getClassSpecialAbilityList(pc); + List<String> saList = getClassSpecialAbilityList(pcClass, pc); return CoreUtility.join(saList, ", "); } return ""; } + + public static List<String> getClassSpecialAbilityList(PCClass pcclass, + final PlayerCharacter aPC) { + final List<String> aList = new ArrayList<String>(); + final List<String> formattedList = new ArrayList<String>(); + final List<SpecialAbility> abilityList = pcclass.getListFor(ListKey.SPECIAL_ABILITY); + + // + // Determine the list of abilities from this class + // that the character is eligable for + // + if (abilityList == null || abilityList.isEmpty()) { + return aList; + } + + for (SpecialAbility saAbility : abilityList) { + final String aString = saAbility.toString(); + + if (aList.contains(aString)) { + break; + } + + if (saAbility.pcQualifiesFor(aPC)) { + aList.add(aString); + } + } + + // From the list of allowed SAs, format the output strings + // to include all of the variables + for (String str : aList) { + StringTokenizer varTok = new StringTokenizer(str, Constants.PIPE); + final String aString = varTok.nextToken(); + + int[] varValue = null; + int varCount = varTok.countTokens(); + + if (varCount != 0) { + varValue = new int[varCount]; + + for (int j = 0; j < varCount; ++j) { + // Get the value for each variable + final String vString = varTok.nextToken(); + varValue[j] = aPC.getVariable(vString, true, true, "", "", + 0).intValue(); + } + } + + final StringBuffer newAbility = new StringBuffer(); + varTok = new StringTokenizer(aString, "%", true); + varCount = 0; + + boolean isZero = false; + + // Fill in each % with the value of the appropriate token + while (varTok.hasMoreTokens()) { + final String nextTok = varTok.nextToken(); + + if ("%".equals(nextTok)) { + if (varCount == 0) { + // If this is the first token, then set the count of + // successfull token replacements to 0 + isZero = true; + } + + if ((varValue != null) && (varCount < varValue.length)) { + final int thisVar = varValue[varCount++]; + + // Update isZero if this token has a value of anything + // other than 0 + isZero &= (thisVar == 0); + newAbility.append(thisVar); + } else { + newAbility.append('%'); + } + } else { + newAbility.append(nextTok); + } + } + + if (!isZero) { + // If all of the tokens for this ability were 0 then we do not + // show it, + // otherwise we add it to the return list. + formattedList.add(newAbility.toString()); + } + } + + return formattedList; + } + /** * @param pc * @param classNumber This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2006-12-07 07:34:22
|
Revision: 1732 http://svn.sourceforge.net/pcgen/?rev=1732&view=rev Author: jdempsey Date: 2006-12-06 23:34:21 -0800 (Wed, 06 Dec 2006) Log Message: ----------- FReq #1363431 - FACE, HANDS, LEGS and REACH should be valid Template tags - Activate HANDS tag in templates Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreHandsTester.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-12-07 04:07:20 UTC (rev 1731) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-12-07 07:34:21 UTC (rev 1732) @@ -14217,15 +14217,8 @@ public List<String> getEquippableLocations(EquipSet eqSet, Equipment eqI, List<String> containers) { // Some Equipment locations are based on the number of hands - int hands = 0; + int hands = getHands(); - final Race aRace = getRace(); - - if (aRace != null) - { - hands = aRace.getHands(); - } - List<String> aList = new ArrayList<String>(); if (eqI.isWeapon()) @@ -16628,6 +16621,32 @@ } } + /** + * Determine the number of hands the character has. This + * is based on their race and any applied templates. + * + * @return The number of hands. + */ + public int getHands() + { + final Race aRace = getRace(); + int hands = 0; + if (aRace != null) + { + hands = aRace.getHands(); + } + + // Scan templates for any overrides + for ( PCTemplate template : getTemplateList() ) + { + if (template.getHands() != null) + { + hands = template.getHands(); + } + } + return hands; + } + // public double getBonusValue(final String aBonusType, final String aBonusName ) // { // return TypedBonus.totalBonuses(getBonusesTo(aBonusType, aBonusName)); Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java 2006-12-07 04:07:20 UTC (rev 1731) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java 2006-12-07 07:34:21 UTC (rev 1732) @@ -103,7 +103,6 @@ import pcgen.core.Globals; import pcgen.core.PObject; import pcgen.core.PlayerCharacter; -import pcgen.core.Race; import pcgen.core.SettingsHandler; import pcgen.core.SystemCollections; import pcgen.core.bonus.BonusObj; @@ -3454,12 +3453,7 @@ if (pc != null) { - final Race race = pc.getRace(); - - if (race != null) - { - hands = race.getHands(); - } + hands = pc.getHands(); } List<String> aList = new ArrayList<String>(); Modified: Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java 2006-12-07 04:07:20 UTC (rev 1731) +++ Trunk/pcgen/code/src/java/plugin/encounter/EncounterPlugin.java 2006-12-07 07:34:21 UTC (rev 1732) @@ -851,11 +851,9 @@ { // Some Equipment locations are based on the number of hands int hands = 0; - final Race race = pc.getRace(); - - if (race != null) + if (pc != null) { - hands = race.getHands(); + hands = pc.getHands(); } List<String> aList = new ArrayList<String>(); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreHandsTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreHandsTester.java 2006-12-07 04:07:20 UTC (rev 1731) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreHandsTester.java 2006-12-07 07:34:21 UTC (rev 1732) @@ -48,7 +48,7 @@ { final int targetHands = Integer.parseInt(prereq.getOperand()); - runningTotal = prereq.getOperator().compare(character.getRace().getHands(), targetHands); + runningTotal = prereq.getOperator().compare(character.getHands(), targetHands); } catch (NumberFormatException nfe) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <juj...@us...> - 2006-12-16 12:50:59
|
Revision: 1770 http://svn.sourceforge.net/pcgen/?rev=1770&view=rev Author: jujutsunerd Date: 2006-12-16 04:50:55 -0800 (Sat, 16 Dec 2006) Log Message: ----------- Removing unused imports and unnecessary semicolons. (Basically, checking if commit works...) Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java Trunk/pcgen/code/src/java/pcgen/core/PObjectUtilities.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/PointBuyMethod.java Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java Trunk/pcgen/code/src/java/pcgen/core/npcgen/ClassData.java Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java Trunk/pcgen/code/src/java/pcgen/gui/LstConverter.java Trunk/pcgen/code/src/java/pcgen/gui/LstEditorMain.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java Trunk/pcgen/code/src/java/pcgen/gui/utils/JTreeTable.java Trunk/pcgen/code/src/java/pcgen/io/PCGIOHandler.java Trunk/pcgen/code/src/java/plugin/exporttokens/DescToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/FeatautoToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/core/AbilityUtilities.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -25,16 +25,11 @@ import pcgen.core.pclevelinfo.PCLevelInfo; import pcgen.core.utils.ListKey; -import pcgen.core.prereq.PrereqHandler; -import pcgen.core.prereq.Prerequisite; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.prereq.PreParserFactory; import pcgen.util.Logging; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; Modified: Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -27,7 +27,6 @@ import pcgen.core.bonus.Bonus; import pcgen.core.bonus.BonusObj; -import pcgen.core.prereq.PrereqHandler; import pcgen.core.prereq.Prerequisite; import pcgen.core.spell.Spell; import pcgen.core.utils.CoreUtility; Modified: Trunk/pcgen/code/src/java/pcgen/core/PObjectUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObjectUtilities.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/core/PObjectUtilities.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -26,29 +26,6 @@ */ package pcgen.core; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; -import pcgen.core.character.CharacterSpell; -import pcgen.core.chooser.ChooserUtilities; -import pcgen.core.prereq.PrereqHandler; -import pcgen.core.spell.Spell; -import pcgen.core.utils.ListKey; -import pcgen.core.utils.MessageType; -import pcgen.core.utils.ShowMessageDelegate; -import pcgen.io.PCGIOHandler; -import pcgen.util.InputFactory; -import pcgen.util.InputInterface; -import pcgen.util.Logging; -import pcgen.util.chooser.ChooserFactory; -import pcgen.util.chooser.ChooserInterface; - /** * Modify an Ability object for a given PC (or remove an Ability * Object from a given PC) Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -11527,7 +11527,7 @@ } } - ; + Ability anAbility = AbilityUtilities.getAbilityFromList(aFeatList, "FEAT", featKey, Ability.Nature.ANY); if (anAbility != null) @@ -14030,7 +14030,7 @@ aClone.languages.addAll(languages); if (theWeaponProfs != null) { - aClone.theWeaponProfs = new TreeSet<WeaponProf>();; + aClone.theWeaponProfs = new TreeSet<WeaponProf>(); aClone.theWeaponProfs.addAll(theWeaponProfs); } aClone.autoKnownSpells = autoKnownSpells; Modified: Trunk/pcgen/code/src/java/pcgen/core/PointBuyMethod.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PointBuyMethod.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/core/PointBuyMethod.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -24,8 +24,6 @@ import pcgen.core.bonus.BonusObj; import pcgen.core.bonus.BonusUtilities; -import pcgen.core.prereq.PrereqHandler; - import java.util.ArrayList; import java.util.Iterator; import java.util.List; Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -75,7 +75,7 @@ * with bonuses of other types. */ REPLACE - }; + } private StackType theStackingFlag = StackType.NORMAL; /** %LIST - Replace one value selected into this spot */ Modified: Trunk/pcgen/code/src/java/pcgen/core/npcgen/ClassData.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/npcgen/ClassData.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/core/npcgen/ClassData.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -28,7 +28,6 @@ import pcgen.core.Ability; import pcgen.core.AbilityCategory; -import pcgen.core.Categorisable; import pcgen.core.Constants; import pcgen.core.Deity; import pcgen.core.Domain; @@ -36,11 +35,9 @@ import pcgen.core.PCClass; import pcgen.core.PCStat; import pcgen.core.SettingsHandler; -import pcgen.core.Skill; import pcgen.core.SubClass; import pcgen.core.spell.Spell; import pcgen.util.WeightedList; -import pcgen.util.enumeration.Visibility; /** * Stores information about how to randomly generate selections for a class. Modified: Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -52,7 +52,6 @@ import pcgen.core.spell.Spell; import pcgen.core.system.GameModeRollMethod; import pcgen.gui.NameElement; -import pcgen.util.Delta; import pcgen.util.Logging; import pcgen.util.WeightedList; import pcgen.util.chooser.ChooserFactory; Modified: Trunk/pcgen/code/src/java/pcgen/gui/LstConverter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/LstConverter.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/gui/LstConverter.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -25,7 +25,6 @@ */ package pcgen.gui; -import pcgen.core.PCStat; import pcgen.core.SettingsHandler; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; Modified: Trunk/pcgen/code/src/java/pcgen/gui/LstEditorMain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/LstEditorMain.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/gui/LstEditorMain.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -40,7 +40,6 @@ import java.awt.event.*; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; /** Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -46,7 +46,6 @@ import javax.swing.BorderFactory; import javax.swing.DefaultListSelectionModel; import javax.swing.JButton; -import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JOptionPane; @@ -69,7 +68,6 @@ import javax.swing.tree.TreePath; import pcgen.core.Constants; -import pcgen.core.GameMode; import pcgen.core.Globals; import pcgen.core.PCTemplate; import pcgen.core.PlayerCharacter; @@ -78,12 +76,10 @@ import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; import pcgen.gui.CharacterInfo; -import pcgen.gui.CharacterInfoTab; import pcgen.gui.GuiConstants; import pcgen.gui.PCGen_Frame1; import pcgen.gui.TableColumnManager; import pcgen.gui.TableColumnManagerModel; -import pcgen.gui.filter.FilterAdapterPanel; import pcgen.gui.filter.FilterConstants; import pcgen.gui.filter.FilterFactory; import pcgen.gui.panes.FlippingSplitPane; Modified: Trunk/pcgen/code/src/java/pcgen/gui/utils/JTreeTable.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/utils/JTreeTable.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/gui/utils/JTreeTable.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -35,11 +35,9 @@ import javax.swing.CellRendererPane; import javax.swing.JComponent; -import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JTable; import javax.swing.JTree; -import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import javax.swing.LookAndFeel; import javax.swing.UIManager; Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGIOHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGIOHandler.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGIOHandler.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -399,7 +399,7 @@ } } - ; + for (Ability aFeat : aPC.getRealFeatList()) { Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/DescToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/DescToken.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/DescToken.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -27,11 +27,8 @@ import pcgen.core.PlayerCharacter; import pcgen.io.ExportHandler; -import pcgen.io.FileAccess; import pcgen.io.exporttoken.Token; -import java.util.ArrayList; -import java.util.List; import java.util.StringTokenizer; /** Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/NoteToken.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -28,7 +28,6 @@ import pcgen.core.NoteItem; import pcgen.core.PlayerCharacter; import pcgen.io.ExportHandler; -import pcgen.io.FileAccess; import pcgen.io.exporttoken.Token; import java.util.ArrayList; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/FeatautoToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/FeatautoToken.java 2006-12-16 00:46:18 UTC (rev 1769) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/FeatautoToken.java 2006-12-16 12:50:55 UTC (rev 1770) @@ -1,6 +1,5 @@ package plugin.lsttokens.pcclass; -import java.util.ArrayList; import java.util.StringTokenizer; import pcgen.core.Constants; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2007-01-02 22:24:24
|
Revision: 1862 http://svn.sourceforge.net/pcgen/?rev=1862&view=rev Author: jdempsey Date: 2007-01-02 14:24:25 -0800 (Tue, 02 Jan 2007) Log Message: ----------- Make Ability parsing error messages more specific. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/plugin/lsttokens/AbilityLst.java Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-01-02 21:40:12 UTC (rev 1861) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-01-02 22:24:25 UTC (rev 1862) @@ -3040,6 +3040,12 @@ # 0 - Class name # 1 - Offending text Errors.LstTokens.InvalidTokenFormat={0}: Invalid token format [{1}] + +# 0 - Class name +# 1 - Field name +# 2 - Offending text +Errors.LstTokens.ValueNotFound={0}: Could not find a {1} with the value [{2}] + Errors.TreeTableModel.NoActiveNode=No active node when doing getValueAt in {0} Errors.FollowerModel.UnknownColumn=The column {0} not handled in {1} Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/AbilityLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/AbilityLst.java 2007-01-02 21:40:12 UTC (rev 1861) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/AbilityLst.java 2007-01-02 22:24:25 UTC (rev 1862) @@ -98,65 +98,74 @@ final String cat = tok.nextToken(); final AbilityCategory category = SettingsHandler.getGame().getAbilityCategory(cat); - if (category != null) + if (category == null) { - if (tok.hasMoreTokens()) + throw new PersistenceLayerException(PropertyFactory.getFormattedString( + "Errors.LstTokens.ValueNotFound", //$NON-NLS-1$ + getClass().getName(), "Ability Category", cat)); + } + + if (tok.hasMoreTokens()) + { + final String natureKey = tok.nextToken(); + final Ability.Nature nature = + Ability.Nature.get(natureKey, false); + if (nature == null) { - final String natureKey = tok.nextToken(); - final Ability.Nature nature = - Ability.Nature.get(natureKey, false); - if (nature != null) + throw new PersistenceLayerException(PropertyFactory.getFormattedString( + "Errors.LstTokens.ValueNotFound", //$NON-NLS-1$ + getClass().getName(), "Ability Nature", cat)); + } + + ArrayList<Prerequisite> preReqs = + new ArrayList<Prerequisite>(); + if (anInt > -9) + { + try { - ArrayList<Prerequisite> preReqs = - new ArrayList<Prerequisite>(); - if (anInt > -9) + PreParserFactory factory = + PreParserFactory.getInstance(); + String preLevelString = "PRELEVEL:" + anInt; //$NON-NLS-1$ + if (anObj instanceof PCClass) { - try - { - PreParserFactory factory = - PreParserFactory.getInstance(); - String preLevelString = "PRELEVEL:" + anInt; //$NON-NLS-1$ - if (anObj instanceof PCClass) - { - // Classes handle this differently - preLevelString = - "PRECLASS:1," + anObj.getKeyName() + "=" + anInt; //$NON-NLS-1$ //$NON-NLS-2$ - } - Prerequisite r = factory.parse(preLevelString); - preReqs.add(r); - } - catch (PersistenceLayerException notUsed) - { - return false; - } + // Classes handle this differently + preLevelString = + "PRECLASS:1," + anObj.getKeyName() + "=" + anInt; //$NON-NLS-1$ //$NON-NLS-2$ } - final List<String> abilityList = new ArrayList<String>(); - while (tok.hasMoreTokens()) - { - final String key = tok.nextToken(); - if (key.startsWith("PRE")) //$NON-NLS-1$ - { - final PreParserFactory factory = - PreParserFactory.getInstance(); - final String preString = - key.substring(key.indexOf(':') + 1); - final Prerequisite r = factory.parse(preString); - preReqs.add(r); - } - else - { - abilityList.add(key); - } - } - for (final String ability : abilityList) - { - anObj.addAbility(category, nature, - new QualifiedObject<String>(ability, preReqs)); - } - return true; + Prerequisite r = factory.parse(preLevelString); + preReqs.add(r); } + catch (PersistenceLayerException notUsed) + { + return false; + } } + final List<String> abilityList = new ArrayList<String>(); + while (tok.hasMoreTokens()) + { + final String key = tok.nextToken(); + if (key.startsWith("PRE")) //$NON-NLS-1$ + { + final PreParserFactory factory = + PreParserFactory.getInstance(); + final String preString = + key.substring(key.indexOf(':') + 1); + final Prerequisite r = factory.parse(preString); + preReqs.add(r); + } + else + { + abilityList.add(key); + } + } + for (final String ability : abilityList) + { + anObj.addAbility(category, nature, + new QualifiedObject<String>(ability, preReqs)); + } + return true; } + throw new PersistenceLayerException(PropertyFactory.getFormattedString( "Errors.LstTokens.InvalidTokenFormat", //$NON-NLS-1$ getClass().getName(), aValue)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-01-16 02:26:27
|
Revision: 1954 http://svn.sourceforge.net/pcgen/?rev=1954&view=rev Author: thpr Date: 2007-01-15 18:26:27 -0800 (Mon, 15 Jan 2007) Log Message: ----------- Java 1.5 cleanup as suggested by Jonas Back out [ 1633550 ] Deprecate old PRESPELLTYPE until prettylist can handle it Add comments and JavaDoc to the util classes I created Some other warning cleanup, while I was in the area Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/utils/ListKeyMapToList.java Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java Trunk/pcgen/code/src/java/pcgen/util/DoubleKeyMap.java Trunk/pcgen/code/src/java/pcgen/util/HashMapToList.java Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java Trunk/pcgen/code/src/java/pcgen/util/UnreachableError.java Trunk/pcgen/code/src/java/plugin/lsttokens/AddLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/kit/TemplateToken.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellTypeParser.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAlignTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreApplyTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAttackTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreCSkillTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreClassTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDeityAlignTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDeityDomainTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreFeatTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreHDTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreLevelMaxTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PrePointBuyMethodTester.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/java/plugin/pretokens/test/PreSpellCastMemorizeTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellCastTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellDescriptorTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellSchoolSubTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellSchoolTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSpellTypeTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreStatTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreTypeTester.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreUnarmedAttackTester.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/core/utils/IntegerKeyMap.java Trunk/pcgen/code/src/java/pcgen/core/utils/StringKeyMap.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -74,7 +74,6 @@ import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; import pcgen.core.utils.StringKey; -import pcgen.core.utils.StringKeyMap; import pcgen.gui.GuiConstants; import pcgen.io.PCGFile; import pcgen.io.exporttoken.BonusToken; @@ -185,7 +184,7 @@ private final List<Language> templateAutoLanguages = new ArrayList<Language>(); private final SortedSet<Language> templateLanguages = new TreeSet<Language>(); private final SortedSet<Language> languages = new TreeSet<Language>(); - private StringKeyMap stringChar = new StringKeyMap(); + private Map<StringKey, String> stringChar = new HashMap<StringKey, String>(); private String calcEquipSetId = "0.1"; //$NON-NLS-1$ private String descriptionLst = "EMPTY"; //$NON-NLS-1$ private String tabName = Constants.EMPTY_STRING; @@ -6032,10 +6031,10 @@ cachedWeaponProfs = null; - if (stringChar.hasCharacteristic(StringKey.RACIAL_FAVORED_CLASS)) + if (stringChar.containsKey(StringKey.RACIAL_FAVORED_CLASS)) { favoredClasses.remove(stringChar - .getCharacteristic(StringKey.RACIAL_FAVORED_CLASS)); + .get(StringKey.RACIAL_FAVORED_CLASS)); } removeNaturalWeapons(race); @@ -14865,7 +14864,7 @@ */ public void setStringFor(StringKey key, String s) { - stringChar.setCharacteristic(key, s); + stringChar.put(key, s); setDirty(true); } @@ -14877,7 +14876,7 @@ */ public String removeStringFor(StringKey key) { - return stringChar.removeCharacteristic(key); + return stringChar.remove(key); } private Float getEquippedQty(EquipSet eSet, Equipment eqI) @@ -15452,7 +15451,7 @@ */ public String getStringFor(StringKey key) { - return stringChar.getCharacteristic(key); + return stringChar.get(key); } /** @@ -15463,7 +15462,7 @@ */ public String getSafeStringFor(StringKey key) { - String s = stringChar.getCharacteristic(key); + String s = stringChar.get(key); if (s == null) { s = Constants.EMPTY_STRING; Deleted: Trunk/pcgen/code/src/java/pcgen/core/utils/IntegerKeyMap.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/utils/IntegerKeyMap.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/core/utils/IntegerKeyMap.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -1,104 +0,0 @@ -/* - * 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 June 18, 2005. - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - */ -package pcgen.core.utils; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author Tom Parker <th...@so...> - * - * This encapsulates a Map in a typesafe way (prior to java 1.5 having the - * ability to do that with typed collections) - */ -public class IntegerKeyMap -{ - - private final Map<IntegerKey, Integer> map = new HashMap<IntegerKey, Integer>(); - - /** Constructor */ - public IntegerKeyMap() - { - // Do Nothing - } - - /** - * Get a characteristic - * @param key - * @return a characteristic - */ - public Integer getCharacteristic(IntegerKey key) - { - return map.get(key); - } - - /** - * Set a characteristic - * @param key - * @param value - */ - public void setCharacteristic(IntegerKey key, Integer value) - { - map.put(key, value); - } - - /** - * Set a characteristic - * @param key - * @param value - */ - public void setCharacteristic(IntegerKey key, int value) - { - map.put(key, value); - } - - /** - * return true if it has the characteristic - * @param key - * @return true if map has the characteristic - */ - public boolean hasCharacteristic(IntegerKey key) - { - return map.containsKey(key); - } - - /** - * Add all of the characteristics - * @param scs - */ - public void addAllCharacteristics(IntegerKeyMap scs) - { - map.putAll(scs.map); - } - - /** - * Remove a characteristic from the map - * @param key - * @return the previous charactersitc assocaited with that key or NULL - */ - public Integer removeCharacteristic(IntegerKey key) - { - return map.remove(key); - } -} Modified: Trunk/pcgen/code/src/java/pcgen/core/utils/ListKeyMapToList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/utils/ListKeyMapToList.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/core/utils/ListKeyMapToList.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -1,5 +1,5 @@ /* - * Copyright 2005 (C) Tom Parker <th...@so...> + * Copyright 2005, 2007 (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 @@ -29,24 +29,66 @@ /** * @author Tom Parker <th...@so...> - * - * This encapsulates a MapToList in a typesafe way (prior to java 1.5 having the - * ability to do that with typed Collections) + * + * This encapsulates a MapToList in a typesafe and value-semantic way. + * + * Specifically, when Generics are properly used by a class using a + * ListKeyMapToList, this class ensures that any ListKey will only return a List + * of the same Generic type as the ListKey. Note this relationship is only + * enforced with Generics, and could be violated if Generics are not properly + * used. + * + * This Class also is reference-semantic with respect to the Map and the List. + * In other words, the modification of any Collection returned by a + * ListKeyMapToList will not impact the internal contents of the + * ListKeyMapToList. Also, any Collection used as a parameter to a method is not + * stored directly, the Collection can be modified after the method has returned + * without impacting the internal contents of the ListKeyMapToList. + * + * **NOTE** This class is NOT thread safe. */ public class ListKeyMapToList { + /* + * This must remain generic, as far as I know. The challenge here is that + * this really wants to be HashMapToList<ListKey<T>, T>, but the T needs + * to change for each individual ListKey/List contained within the + * HashMapToList. I don't believe it is possible with Generics in Java. + * Thus, this entire class is filled with Generic warnings. + * + * The advantage of having this class is two-fold: 1) It is value-semantic + * with respect to the Map and the List [but not the contents of the Lists]) + * 2) It hides all of the generic warnings in once place where they can be + * easily analysed as innocent. -- Tom Parker 1/15/07 + */ + /** + * The internal storage of this ListKeyMapToList + */ private final HashMapToList map = new HashMapToList(); - /** Constructor */ + /** + * Creates a new (empty) ListKeyMapToList + */ public ListKeyMapToList() { // Do Nothing } /** - * Add all lists to the map + * Adds all of the Lists in the given ListKeyMapToList to this + * ListKeyMapToList. The resulting lists are independent (protecting the + * internal structure of ListKeyMapToList), however, since ListKeyMapToList + * is reference-semantic, the List keys and values in each list are + * identical. + * + * This method is reference-semantic and this ListKeyMapToList will maintain + * a strong reference to all key objects and objects in each list of the + * given ListKeyMapToList. + * * @param lcs + * The ListKeyMapToList from which all of the Lists should be + * imported */ public void addAllLists(ListKeyMapToList lcs) { @@ -54,8 +96,21 @@ } /** + * Adds all of the Objects in the given list to the (internal) List for the + * given ListKey. The null value cannot be used as a key in a + * ListKeyMapToList. This method will automatically initialize the list for + * the given key if there is not already a List for that key. + * + * This method is reference-semantic and this ListKeyMapToList will maintain + * a strong reference to both the key object and the object in the given + * list. + * * @param key + * The ListKey indicating which List the objects in the given + * List should be added to. * @param list + * A List containing the items to be added to the List for the + * given key. */ public <T> void addAllToListFor(ListKey<T> key, List<T> list) { @@ -63,9 +118,20 @@ } /** - * Add value to a list + * Adds the given value to the List for the given ListKey. The null value + * cannot be used as a key in a ListKeyMapToList. This method will + * automatically initialize the list for the given key if there is not + * already a List for that key. + * + * This method is reference-semantic and this ListKeyMapToList will maintain + * a strong reference to both the key object and the value object given as + * arguments to this method. + * * @param key + * The ListKey indicating which List the given object should be + * added to. * @param value + * The value to be added to the List for the given key. */ public <T> void addToListFor(ListKey<T> key, T value) { @@ -73,9 +139,17 @@ } /** - * Returns true if list contains a value for a key + * Returns true if this ListKeyMapToList contains a List for the given + * ListKey. This method returns false if the given key is not in this + * ListKeyMapToList. + * + * This method is value-semantic in that no changes are made to the object + * passed into the method. + * * @param key - * @return true if list contains a value for a key + * The ListKey being tested. + * @return true if this ListKeyMapToList contains a List for the given key; + * false otherwise. */ public boolean containsListFor(ListKey key) { @@ -83,9 +157,19 @@ } /** - * Get a list for a key + * Returns a copy of the List contained in this ListKeyMapToList for the + * given ListKey. This method returns null if the given key is not in this + * ListKeyMapToList. + * + * This method is value-semantic in that no changes are made to the object + * passed into the method and ownership of the returned List is transferred + * to the class calling this method. + * * @param key - * @return list + * The ListKey for which a copy of the list should be returned. + * @return a copy of the List contained in this ListKeyMapToList for the + * given key; null if the given key is not a key in this + * ListKeyMapToList. */ public <T> List<T> getListFor(ListKey<T> key) { @@ -93,19 +177,34 @@ } /** - * Get an element in the list + * Returns the Object at the given position within the List for the given + * ListKey. If a List for the given ListKey is not present in this + * ListKeyMapToList, null will be returned. + * * @param key + * The ListKey indicating which List the given object should be + * returned from * @param i - * @return element in list + * The location of the Object to be returned within the List + * defined by the given key. + * @return The Object at the given position within the list for the given + * key. */ public <T> T getElementInList(ListKey<T> key, int i) { - return (T)map.getElementInList(key, i); + return (T) map.getElementInList(key, i); } /** - * Initialise the list for a given key + * Initializes a List for the given ListKey. The null value cannot be used + * as a key in a ListKeyMapToList. + * + * This method is reference-semantic and this ListKeyMapToList will maintain + * a strong reference to the key object given as an argument to this method. + * * @param key + * The ListKey for which a List should be initialized in this + * ListKeyMapToList. */ public <T> void initializeListFor(ListKey<T> key) { @@ -113,10 +212,18 @@ } /** - * Remove an item from a list + * Removes the given value from the list for the given ListKey. Returns true + * if the value was successfully removed from the list for the given + * ListKey. Returns false if there is not a list for the given ListKey or if + * the list for the given ListKey did not contain the given value object. + * * @param key + * The ListKey indicating which List the given object should be + * removed from * @param value - * @return true, removal ok + * The value to be removed from the List for the given key + * @return true if the value was successfully removed from the list for the + * given key; false otherwise */ public <T> boolean removeFromListFor(ListKey<T> key, T value) { @@ -124,9 +231,17 @@ } /** - * Remove a list from a map + * Removes the List for the given ListKey. Note there is no requirement that + * the list for the given key be empty before this method is called. + * + * Ownership of the returned List is transferred to the object calling this + * method. + * * @param key - * @return removed list + * The ListKey indicating which List the given object should be + * removed from + * @return The List which this ListKeyMapToList previous mapped the given + * key */ public <T> List<T> removeListFor(ListKey<T> key) { @@ -134,9 +249,16 @@ } /** - * Get size of a list + * Returns the number of objects in the List for the given ListKey. This + * method will throw a NullPointerException if this ListKeyMapToList does + * not contain a List for the given key. + * + * This method is value-semantic in that no changes are made to the object + * passed into the method. + * * @param key - * @return size + * The key being tested. + * @return the number of objects in the List for the given key */ public int sizeOfListFor(ListKey key) { @@ -144,10 +266,19 @@ } /** - * True if value is in a list + * Returns true if this ListKeyMapToList contains a List for the given + * ListKey and that list contains the given value. Note, this method returns + * false if the given ListKey is not in this ListKeyMapToList. + * + * This method is value-semantic in that no changes are made to the objects + * passed into the method. + * * @param key + * The key for the List being tested. * @param value - * @return True if value is in a list + * The value to find in the List for the given key. + * @return true if this ListKeyMapToList contains a List for the given key + * AND that list contains the given value; false otherwise. */ public <T> boolean containsInList(ListKey<T> key, T value) { Deleted: Trunk/pcgen/code/src/java/pcgen/core/utils/StringKeyMap.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/utils/StringKeyMap.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/core/utils/StringKeyMap.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -1,69 +0,0 @@ -/* - * 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 June 18, 2005. - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - */ -package pcgen.core.utils; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author Tom Parker <th...@so...> - * - * This encapsulates a Map in a typesafe way (prior to java 1.5 having the - * ability to do that with typed collections) - */ -public class StringKeyMap -{ - - private final Map<StringKey, String> map = new HashMap<StringKey, String>(); - - public StringKeyMap() - { - // Do Nothing - } - - public String getCharacteristic(StringKey key) - { - return map.get(key); - } - - public void setCharacteristic(StringKey key, String value) - { - map.put(key, value); - } - - public boolean hasCharacteristic(StringKey key) - { - return map.containsKey(key); - } - - public void addAllCharacteristics(StringKeyMap scs) - { - map.putAll(scs.map); - } - - public String removeCharacteristic(StringKey key) - { - return map.remove(key); - } -} Modified: Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -1,5 +1,5 @@ /* - * Copyright 2006 (C) Tom Parker <th...@so...> + * Copyright 2006, 2007 (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 @@ -64,12 +64,31 @@ string = s; } + /** + * Compares two CaseInsensitiveStrings for equality. Returns true if the two + * CaseInsensitiveStrings are equal. + * + * @return true if the given Object is a CaseInsensitiveString that is equal + * to this CaseInsensitiveString. + */ @Override public boolean equals(Object s) { + /* + * DON'T DARE to make this function work for String or anything else... + * The way .equals works is that it casts to the class of the parent + * object - CaseInsensitiveStrings do NOT equals Strings. Please be + * consistent with the .equals interface as generally used in Java. + */ return string.equalsIgnoreCase(((CaseInsensitiveString) s).toString()); } + /** + * Returns a hash code of this CaseInsensitiveString. Provided to ensure + * behavior that is consistent with equals. + * + * @return An integer has code of the CaseInsensitiveString + */ @Override public int hashCode() { @@ -80,6 +99,11 @@ return hashCode; } + /** + * Returns a String representation of this CaseInsensitiveString. + * + * @return A String representation of this CaseInsensitiveString. + */ @Override public String toString() { Modified: Trunk/pcgen/code/src/java/pcgen/util/DoubleKeyMap.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/DoubleKeyMap.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/util/DoubleKeyMap.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -1,5 +1,5 @@ /* - * Copyright 2005 (C) Tom Parker <th...@so...> + * Copyright 2005, 2007 (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 @@ -23,38 +23,91 @@ */ package pcgen.util; -import java.util.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; /** - * A map representation for a dual key entity - * @param <K1> - * @param <K2> - * @param <V> + * @author Thomas Parker + * + * Represents a map where the objects are stored using two keys rather than the + * traditional single key (single key is provided by the Map interface from + * java.util). + * + * This class protects its internal structure from modification, but + * DoubleKeyMap is generally reference-semantic. HashMapToList will not modify + * any of the Objects it is passed; however, it reserves the right to return + * references to Objects it contains to other Objects. + * + * In order to protect its internal structure, any Collection returned by the + * methods of DoubleKeyMap (with the exception of actual keys or values that + * happen to be Collections) is NOT associated with the DoubleKeyMap, and + * modification of the returned Collection will not modify the internal + * structure of DoubleKeyMap. + * + * CAUTION: If you are not looking for the value-semantic protection of this + * class (of preventing accidental modification of underlying parts of a two-key + * Map structure, then this is a convenience method and is not appropriate for + * use in Java 1.5 (Typed Collections are probably more appropriate). */ public class DoubleKeyMap<K1, K2, V> implements Cloneable { + /** + * The underlying map - of primary keys to Maps - for the DoubleKeyMap. This + * class protects its internal structure, so no method should ever return an + * object capable of modifying the maps. All modifications should be done + * through direct calls to the methods of DoubleKeyMap. + */ private Map<K1, Map<K2, V>> map = new HashMap<K1, Map<K2, V>>(); /** - * Constructor + * Constructs a new (empty) DoubleKeyMap */ public DoubleKeyMap() { super(); } + /** + * Constructs a new DoubleKeyMap, with the same contents as the given + * DoubleKeyMap. + * + * The given DoubleKeyMap is not modified and the constructed DoubleKeyMap + * will be independent of the given DoubleKeyMap other than the Objects used + * to represent the keys and values. (In other words, modification of the + * given DoubleKeyMap will not alter the constructed DoubleKeyMap, and vice + * versa) + * + * @param otherMap + * The DoubleKeyMap whose contents should be copied into this + * DoubleKeyMap. + */ public DoubleKeyMap(final DoubleKeyMap<K1, K2, V> otherMap) { - map.putAll(otherMap.map); + for (Entry<K1, Map<K2, V>> me : otherMap.map.entrySet()) + { + map.put(me.getKey(), new HashMap<K2, V>(me.getValue())); + } } /** - * Put an object in a map + * Puts a new object into the DoubleKeyMap. + * * @param key1 + * The primary key used to store the value in this DoubleKeyMap. * @param key2 + * The secondary key used to store the value in this + * DoubleKeyMap. * @param value - * @return Object + * The value to be stored in this DoubleKeyMap. + * @return the Object previously stored in this DoubleKeyMap with the given + * keys. null if this DoubleKeyMap did not previously have an object + * stored with the given keys. */ public V put(K1 key1, K2 key2, V value) { @@ -68,10 +121,17 @@ } /** - * Get an object from the map + * Gets an object from the DoubleKeyMap. + * * @param key1 + * The primary key used to get the value in this DoubleKeyMap. * @param key2 - * @return Object + * The secondary key used to get the value in this DoubleKeyMap. + * @param value + * The value stored in this DoubleKeyMap for the given keys. + * @return the Object stored in this DoubleKeyMap for the given keys. null + * if this DoubleKeyMap does not have an object stored with the + * given keys. */ public V get(K1 key1, K2 key2) { @@ -84,10 +144,17 @@ } /** - * Returns true if an object is in the map given two keys + * Returns true if an object is stored in this DoubleKeyMap for the given + * keys. + * * @param key1 + * The primary key to be tested for containing a value in this + * DoubleKeyMap. * @param key2 - * @return true if an object is in the map given two keys + * The secondary key to be tested for containing a value in this + * DoubleKeyMap. + * @return true if this DoubleKeyMap has an Object stored in this + * DoubleKeyMap for the given keys; false otherwise */ public boolean containsKey(K1 key1, K2 key2) { @@ -100,10 +167,15 @@ } /** - * Remove the object from the map + * Removes an object from the DoubleKeyMap. + * * @param key1 + * The primary key used to remove the value in this DoubleKeyMap. * @param key2 - * @return Object + * The secondary key used to remove the value in this DoubleKeyMap. + * @return the Object stored in this DoubleKeyMap for the given keys. null + * if this DoubleKeyMap does not have an object stored with the + * given keys. */ public V remove(K1 key1, K2 key2) { @@ -113,7 +185,15 @@ return null; } V o = localMap.remove(key2); - //cleanup! + /* + * Clean up the primary map if the secondary map is empty. This is + * required to avoid a false report from get*KeySet. Generally, if an + * object is added with the keys KEY1 and KEY2, then subsequently + * removed (and no other objects were stored with those keys), then + * getKeySet() should never return KEY1 (and there is a corollary for + * KEY2 cleanup, though that is implicit and does not require special + * code) + */ if (localMap.isEmpty()) { map.remove(key1); @@ -122,8 +202,15 @@ } /** - * Get the Set of keys - * @return set of keys + * Returns a Set which contains the primary keys for this DoubleKeyMap. + * Returns an empty Set if this DoubleKeyMap is empty (has no primary keys) + * + * Ownership of the returned Set is transferred to the Object that called + * this method. Modification of the returned Set will not modify this + * DoubleKeyMap, and modification of this DoubleKeyMap will not alter the + * returned Set. + * + * @return A Set containing the primary keys for this DoubleKeyMap. */ public Set<K1> getKeySet() { @@ -131,11 +218,17 @@ } /** - * Gets a <tt>Set</tt> of the secondary keys for the given primary key. + * Returns a Set which contains the secondary keys for the given primary key + * within this DoubleKeyMap. Returns an empty Set if there are no objects + * stored in the DoubleKeyMap with the given primary key. * - * @param aPrimaryKey The primary key to retrieve keys for. + * Ownership of the returned Set is transferred to the Object that called + * this method. Modification of the returned Set will not modify this + * DoubleKeyMap, and modification of this DoubleKeyMap will not alter the + * returned Set. * - * @return A <tt>Set</tt> of secondary key objects. + * @return A Set containing the secondary keys for the given primary key + * within this DoubleKeyMap. */ public Set<K2> getSecondaryKeySet(final K1 aPrimaryKey) { @@ -148,7 +241,7 @@ } /** - * Clear + * Clears this DoubleKeyMap. */ public void clear() { @@ -156,17 +249,41 @@ } /** - * Returns true if the map is empty - * @return true if the map is empty + * Returns true if the DoubleKeyMap is empty + * + * @return true if the DoubleKeyMap is empty; false otherwise */ public boolean isEmpty() { return map.isEmpty(); } - public Object clone() throws CloneNotSupportedException + /** + * Clones this DoubleKeyMap. The contents of the DoubleKeyMap (the keys and + * values) are not cloned - this is not a truly deep clone. However, the + * internal structure of the DoubleKeyMap is sufficiently cloned in order to + * protect the internal structure of the original or the clone from being + * modified by the other object. + * + * @return A clone of this DoubleKeyMap that contains the same keys and + * values as the original DoubleKeyMap. + */ + @Override + public DoubleKeyMap<K1, K2, V> clone() throws CloneNotSupportedException { + /* + * This cast will cause a Generic type safety warning. This is + * impossible to avoid, given that super.clone() will not return a + * DoubleKeyMap with the proper Generic arguments. - Thomas Parker + * 1/15/07 + */ DoubleKeyMap<K1, K2, V> dkm = (DoubleKeyMap<K1, K2, V>) super.clone(); + /* + * This provides a semi-deep clone of the DoubleKeyMap, in order to + * protect the internal structure of the DoubleKeyMap from modification. + * Note the key and value objects are not cloned, so this is not truly a + * deep clone, but is deep enough to protect the internal structure. + */ dkm.map = new HashMap<K1, Map<K2, V>>(); for (Iterator<K1> it = map.keySet().iterator(); it.hasNext();) { Modified: Trunk/pcgen/code/src/java/pcgen/util/HashMapToList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/HashMapToList.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/util/HashMapToList.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -1,5 +1,5 @@ /* - * Copyright 2004, 2005 (C) Tom Parker <th...@so...> + * Copyright 2004-2007 (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 @@ -24,33 +24,63 @@ */ package pcgen.util; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * @author Thomas Parker - * + * * Represents a Map of objects to Lists. List management is done internally to * this class (while copies are accessible, the lists are kept private to this * class). - * - * This class is reference-semantic. In appropriate cases (such as calling the - * addToListFor method), HashMapToList will maintain a reference to the given - * Object. HashMapToList will not modify any of the Objects it is passed; - * however, it reserves the right to return references to Objects it contains to - * other Objects. - * - * However, when any method in which HashMapToList returns a Collection, - * ownership of the Collection itself is transferred to the calling Object, but - * the contents of the Collection (keys, values, etc.) are references whose - * ownership should be respected. - * - * CAUTION: This is a convenience method for use in Java 1.4 and is not - * appropriate for use in Java 1.5 (Typed Collections are probably more - * appropriate) + * + * This class is both value-semantic and reference-semantic. + * + * In appropriate cases (such as calling the addToListFor method), HashMapToList + * will maintain a reference to the given Object. HashMapToList will not modify + * any of the Objects it is passed; however, it reserves the right to return + * references to Objects it contains to other Objects. + * + * However, HashMapToList also protects its internal structure (the internal + * structure is not exposed) ... when any method in which HashMapToList returns + * a Collection, ownership of the Collection itself is transferred to the + * calling Object, but the contents of the Collection (keys, values, etc.) are + * references whose ownership should be respected. Also, when any method in + * which HashMapToList receives a Collection as a parameter, the ownership of + * the given Collection is not transferred to HashMapToList (in other words, the + * Collection will not be modified, and no references to the Collection will be + * maintain by HashMapToList). HashMapToList will obviously retain references to + * the contents of any Collections it may be passed. + * + * CAUTION: If you are not looking for the value-semantic protection of this + * class (of preventing accidental modification, then this is a convenience + * method and is not appropriate for use in Java 1.5 (Typed Collections are + * probably more appropriate). */ public class HashMapToList<K, V> { + /* + * Comment to programmers on the value-semantic behavior of this class: This + * class protects the collections contained within this Class (the Map and + * the Lists) from modification by anything other than a direct call to this + * object. Therefore, any Collection that is returned by this Class is + * either (A) a copy [thus value-semantic] or (B) no longer stored within + * this HashMapToList. + * + * It is therefore recommended that there never be a .putListFor() method. + * This is ASKING for semantic behavior problems, as it is too easy to store + * the list that is given (which becomes reference semantic). It is not + * painful and not unreasonable to call .removeListFor() and + * .addAllToListFor(), which is all that a putListFor convenience method + * would do. - Thomas Parker 1/15/07 + */ + /** * The actual map containing the map of objects to Lists */ @@ -153,13 +183,14 @@ /** * Adds all of the Lists in the given MapToList to this MapToList. The - * resulting lists are independent, however, since MapToList is - * reference-semantic, the List keys and values in each list are identical. - * + * resulting lists are independent (protecting the internal structure of + * HashMapToList), however, since MapToList is reference-semantic, the List + * keys and values in each list are identical. + * * This method is reference-semantic and this MapToList will maintain a * strong reference to all key objects and objects in each list of the given * MapToList. - * + * * @param mtl * The MapToList from which all of the Lists should be imported */ @@ -267,6 +298,12 @@ public List<V> getListFor(K key) { List<V> list = mapToList.get(key); + /* + * Need to 'clone' the List. This is done to ensure value-sematic + * behavior, in protecting the mapToList (and in this case the contained + * Lists) from being modified by any means other than a direct method + * call on this HashMapToList. + */ return list == null ? null : new ArrayList<V>(list); } @@ -300,10 +337,10 @@ /** * Removes the List for the given key. Note there is no requirement that the * list for the given key be empty before this method is called. - * - * Obviously, ownership of the returned List is transferred to the object - * calling this method. - * + * + * Ownership of the returned List is transferred to the object calling this + * method. + * * @param key * The key indicating which List the given object should be * removed from @@ -311,6 +348,10 @@ */ public List<V> removeListFor(K key) { + /* + * No need to 'protect' this list (can directly return it) because the + * key and List will no longer be in this HashMapToList. + */ return mapToList.remove(key); } @@ -362,18 +403,31 @@ */ public Set<K> getKeySet() { - //Need to 'clone' the Set, since Map returns a set that is still - // associated with the Map + /* + * Need to 'clone' the Set, since Map returns a set that is still + * associated with the Map. This is done to ensure value-sematic + * behavior, in protecting the mapToList from being modified by any + * means other than a direct method call on this HashMapToList. + */ return new HashSet<K>(mapToList.keySet()); } /** + * Returns the Object at the given position within the list for the given + * key. If a list for the given key is not present, null will be returned. + * * @param key + * The key indicating which List the given object should be + * returned from * @param i - * @return Object + * The location of the Object to be returned within the list + * defined by the given key. + * @return The Object at the given position within the list for the given + * key. */ public V getElementInList(K key, int i) { - return mapToList.get(key).get(i); + List<V> list = mapToList.get(key); + return list == null ? null : list.get(i); } } Modified: Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -1,5 +1,5 @@ /* - * Copyright 2006 (C) Tom Parker <th...@so...> + * Copyright 2006, 2007 (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 @@ -23,20 +23,60 @@ */ package pcgen.util; +import java.util.AbstractCollection; import java.util.Collection; -import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; -/* +/** + * @author Thomas Parker * + * A MapCollection is a facade used to convert a Map to a Collection. This is + * useful if one wishes to treat the contents of the Map (both the keys and the + * values) as a single Collection. For example, this could be used to join + * together the contents of a Map. + * + * As this is a facade emulating a simple data structure (with a complex + * underlying data structure), certain functions are ill-defined. Modification + * of the collection is prohibited, and all methods that would normally modify a + * Collection (such as add, remove or clear) will throw an + * UnsupportedOperationException. + * + * This class is reference-semantic. A reference to the Map provided in the + * constructor is kept by the MapCollection. ALL changes to the underlying Map + * are not reflected within this Collection. Beware that an Iterator provided by + * a MapCollection is therefore sensitive to modification of the underlying Map + * and MAY cause a ConcurrentModificationException to occur if the underlying + * Map is modified. + * + * **WARNING** MapCollection is KNOWN to NOT fail fast in the case of a + * Concurrent Modification - such a feature is considered more advanced than + * this Class is trying to provide (the additional cost of memory and CPU of + * monitoring the map is considered an unreasonable burden. */ -public class MapCollection implements Collection<Object> +public class MapCollection extends AbstractCollection<Object> { + /* + * Note that a MapCollection cannot provide a proper Generic operation for + * Collection, due to the potential conflicts between keys and objects in + * the underlying Map. + * + * For example, a Map of <String, Runnable> becomes difficult to have + * Generics work correctly if one is converting a Map to a Collection. + */ + /** + * The map underlying this Collection. + */ private final Map<?, ?> map; + /** + * Builds a new MapCollection, providing a facade to the given Map. The + * given Map must be non-null. + * + * @m The map to be treated as a Collection. + */ public MapCollection(Map<?, ?> m) { if (m == null) @@ -44,29 +84,88 @@ throw new IllegalArgumentException( "Cannot provide null to MapCollection"); } - map = new HashMap<Object, Object>(m); + map = m; } + /** + * Attempts to modify the collection. This is an unsupported operation on a + * MapCollection, and an UnsupportedOperationException() will be thrown. + * + * This should be kept as an override of AbstactCollection (even if it + * replicates function), as it ensures future changes will not provide very + * strange results. + */ + @Override public boolean add(Object arg0) { throw new UnsupportedOperationException(); } + /** + * Attempts to modify the collection. This is an unsupported operation on a + * MapCollection, and an UnsupportedOperationException() will be thrown. + * + * This should be kept as an override of AbstactCollection (even if it + * replicates function), as it ensures future changes will not provide very + * strange results. + */ + @Override public boolean addAll(Collection<?> arg0) { throw new UnsupportedOperationException(); } + /** + * Attempts to modify the collection. This is an unsupported operation on a + * MapCollection, and an UnsupportedOperationException() will be thrown. + * + * This should be kept as an override of AbstactCollection (even if it + * replicates function), as it ensures future changes will not provide very + * strange results. + */ + @Override public void clear() { + /* + * While it is possible to have this actually clear the underlying Map, + * I believe that is a bad design decision. This facade should be + * consistent in the fact that it DOES NOT modify the underlying Map. + * Having clear() as an exception to that is not a good design decision, + * in my opinion - Thomas Parker 1/17/07 + */ throw new UnsupportedOperationException(); } + /** + * Returns true if the underlying Map contains the given Object as either a + * Key or a Value in the Map. + * + * @param arg0 + * The Object to check to see if it is present in the underlying + * Map. + * @return true if the underlying Map contains the given Object; false + * otherwise. + */ + @Override public boolean contains(Object arg0) { return map.containsKey(arg0) || map.containsValue(arg0); } + /** + * Returns true if the underlying Map contains all of the Objects in the + * given Collection, as either a Key or a Value in the Map. The order of the + * Objects in the given Collection is not relevant to the ability to match a + * Key or a Value in the underlying Map. The given Collection must be not be + * null. + * + * @param arg0 + * The Collection of Objects to be tested for presence in the + * underlying Map. + * @return true if all of the Objects in the given Collection are present in + * the underlying Map; false otherwise. + */ + @Override public boolean containsAll(Collection<?> arg0) { for (Object obj : arg0) @@ -79,48 +178,83 @@ return true; } + /** + * Returns true if this MapCollection is empty. (It will be empty if the + * underlying Map is also empty). + * + * @return true if the MapCollection is empty. + */ + @Override public boolean isEmpty() { return map.isEmpty(); } + /** + * Provides a new Iterator for iterating over the contents of this MapCollection. + * + * @return An Iterator over the contents of this MapCollection. + */ + @Override public Iterator<Object> iterator() { return new MapCollectionIterator(map); } + /** + * Attempts to modify the collection. This is an unsupported operation on a + * MapCollection, and an UnsupportedOperationException() will be thrown. + * + * This should be kept as an override of AbstactCollection (even if it + * replicates function), as it ensures future changes will not provide very + * strange results. + */ + @Override public boolean remove(Object arg0) { throw new UnsupportedOperationException(); } + /** + * Attempts to modify the collection. This is an unsupported operation on a + * MapCollection, and an UnsupportedOperationException() will be thrown. + * + * This should be kept as an override of AbstactCollection (even if it + * replicates function), as it ensures future changes will not provide very + * strange results. + */ + @Override public boolean removeAll(Collection<?> arg0) { throw new UnsupportedOperationException(); } + /** + * Attempts to modify the collection. This is an unsupported operation on a + * MapCollection, and an UnsupportedOperationException() will be thrown. + * + * This should be kept as an override of AbstactCollection (even if it + * replicates function), as it ensures future changes will not provide very + * strange results. + */ + @Override public boolean retainAll(Collection<?> arg0) { throw new UnsupportedOperationException(); } + /** + * Returns the size of this MapCollection. Note that the size of a + * MapCollection will be twice the size of the underlying Map. + * + * @return The size of this MapCollection. + */ + @Override public int size() { - return map.size(); + return 2 * map.size(); } - public Object[] toArray() - { - // FIXME Auto-generated method stub - return null; - } - - public Object[] toArray(Object[] arg0) - { - // FIXME Auto-generated method stub - return null; - } - private class MapCollectionIterator implements Iterator<Object> { Entry<?, ?> workingEntry; Modified: Trunk/pcgen/code/src/java/pcgen/util/UnreachableError.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/UnreachableError.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/pcgen/util/UnreachableError.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -1,5 +1,5 @@ /* - * Copyright (c) Thomas Parker, 2005. + * Copyright (c) Thomas Parker, 2005, 2007. * * 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 @@ -28,13 +28,18 @@ * should be reserved for VirtualMachine errors. This error, on the other hand, * indicates that the original developer did not consider certain situations (or * additional features were added to an object or the language that the - * developer did not have available) + * developer did not have available). + * + * The use of an Error rather than an Exception is preferred, due to the (bad) + * habit of certain code catching Exception or RuntimeException. The use of an + * error prevents this from being caught in those situations, ensuring that the + * problem will be exposed. */ public class UnreachableError extends Error { /** - * + * For object serialization */ private static final long serialVersionUID = -5431319083877458886L; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/AddLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/AddLst.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/AddLst.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -6,6 +6,7 @@ import pcgen.core.PObject; import pcgen.persistence.lst.GlobalLstToken; +import pcgen.util.Logging; /** * @author djones4 @@ -21,7 +22,36 @@ public boolean parse(PObject obj, String value, int anInt) { + validate(value); obj.addAddList(anInt, value); return true; } + + private void validate(String value) { + if ("FEAT".equals(value)) { + Logging.errorPrint("ADD:FEAT should not be used with no parameters"); + Logging.errorPrint(" This usage is deprecated"); + Logging.errorPrint(" Please use BONUS:FEAT|POOL|1 instead"); + } else if (value.startsWith("INIT(")) { + Logging.errorPrint("ADD:INIT is deprecated"); + Logging.errorPrint(" Note that the code does not function - " + + "you are not getting what you expect!"); + } else if (value.startsWith("SPECIAL(")) { + Logging.errorPrint("ADD:SPECIAL is deprecated"); + Logging.errorPrint(" Note that the code does not function - " + + "you are not getting what you expect!"); + } + return; + // once * ADD (Global Add) is invalid, we can do another test: +// else if (value.startsWith(".CLEAR") || value.startsWith("CLASSSKILLS(") +// || value.startsWith("EQUIP(") || value.startsWith("FEAT(") +// || value.startsWith("LANGUAGE(") || value.startsWith("SKILL(") +// || value.startsWith("SPELLCASTER(") +// || value.startsWith("SPELLLEVEL(") +// || value.startsWith("VFEAT(")) { +// // OK +// return; +// } + //Logging.errorPrint(value + " is not a valid ADD"); + } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/kit/TemplateToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/kit/TemplateToken.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/kit/TemplateToken.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -31,9 +31,9 @@ import pcgen.core.kit.KitTemplate; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.SystemLoader; +import pcgen.persistence.lst.BaseKitLoader; import pcgen.persistence.lst.KitLstToken; import pcgen.util.Logging; -import pcgen.persistence.lst.BaseKitLoader; /** * This class parses a TEMPLATE line from a Kit file. It handles the TEMPLATE Modified: Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellTypeParser.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellTypeParser.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellTypeParser.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -116,8 +116,10 @@ // // Must be exactly 3 tokens. Old-style did not support multiple options // - Logging.errorPrint("Deprecated use of PRESPELLTYPE found: " + formula); - Logging.errorPrint("The new format is <number of spells required>,<name of spell type>=<minimum spell level>[,<name of spell type>=<minimum spell level>,...]"); + //This is commented out until prettylst can actually do this conversion for the data team + // -- Thomas Parker 1/15/07 + //Logging.errorPrint("Deprecated use of PRESPELLTYPE found: " + formula); + //Logging.errorPrint("The new format is <number of spells required>,<name of spell type>=<minimum spell level>[,<name of spell type>=<minimum spell level>,...]"); if (aTok.countTokens() == 2) { prereq.setKey(aString); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAlignTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAlignTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAlignTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -115,6 +115,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { String alignment = prereq.getKey(); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreApplyTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreApplyTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreApplyTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -143,6 +143,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { return PropertyFactory Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAttackTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAttackTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAttackTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -76,6 +76,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { return PropertyFactory Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreCSkillTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreCSkillTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreCSkillTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -96,6 +96,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { String skillName = prereq.getKey(); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreClassTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreClassTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreClassTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -94,6 +94,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { final String level = prereq.getOperand(); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDeityAlignTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDeityAlignTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDeityAlignTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -94,6 +94,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { return PropertyFactory Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDeityDomainTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDeityDomainTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreDeityDomainTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -69,6 +69,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { return PropertyFactory Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreFeatTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreFeatTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreFeatTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -355,6 +355,7 @@ return returnTotal; } + @Override public String toHtmlString(final Prerequisite prereq) { String aString = prereq.getKey(); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreHDTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreHDTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreHDTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -76,6 +76,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { final String foo = Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreLevelMaxTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreLevelMaxTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreLevelMaxTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -64,6 +64,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.AbstractPrerequisiteTest#toHtmlString() */ + @Override public String toHtmlString(final Prerequisite prereq) { return PropertyFactory.getFormattedString("PreLevelMax.toHtml", Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PrePointBuyMethodTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PrePointBuyMethodTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PrePointBuyMethodTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -71,6 +71,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { final String foo = Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSkillMultTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSkillMultTester.java 2007-01-16 01:54:30 UTC (rev 1953) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreSkillMultTester.java 2007-01-16 02:26:27 UTC (rev 1954) @@ -134,6 +134,7 @@ /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ + @Override public String toHtmlString(final Prerequisite prereq) { String skillName = prereq.getKey(); Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test... [truncated message content] |
From: <th...@us...> - 2007-01-17 03:14:03
|
Revision: 1957 http://svn.sourceforge.net/pcgen/?rev=1957&view=rev Author: thpr Date: 2007-01-16 19:14:03 -0800 (Tue, 16 Jan 2007) Log Message: ----------- FindBugs warning fixes and some clone cleanup to avoid unnecessary copying of Immutable types Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/Ability.java Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java Trunk/pcgen/code/src/java/pcgen/core/ArmorProf.java Trunk/pcgen/code/src/java/pcgen/core/Campaign.java Trunk/pcgen/code/src/java/pcgen/core/ClassType.java Trunk/pcgen/code/src/java/pcgen/core/Deity.java Trunk/pcgen/code/src/java/pcgen/core/Domain.java Trunk/pcgen/code/src/java/pcgen/core/Equipment.java Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java Trunk/pcgen/code/src/java/pcgen/core/Kit.java Trunk/pcgen/code/src/java/pcgen/core/Language.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PCStat.java Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.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/SpellProgressionInfo.java Trunk/pcgen/code/src/java/pcgen/core/SpellSupport.java Trunk/pcgen/code/src/java/pcgen/core/VariableList.java Trunk/pcgen/code/src/java/pcgen/core/Vision.java Trunk/pcgen/code/src/java/pcgen/core/WeaponEquipment.java Trunk/pcgen/code/src/java/pcgen/core/WeaponProf.java Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java Trunk/pcgen/code/src/java/pcgen/core/character/CompanionMod.java Trunk/pcgen/code/src/java/pcgen/core/character/Follower.java Trunk/pcgen/code/src/java/pcgen/core/character/SpellBook.java Trunk/pcgen/code/src/java/pcgen/core/kit/BaseKit.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitAbilities.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitAlignment.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitClass.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitDeity.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitFunds.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitGear.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitKit.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitLevelAbility.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitProf.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitRace.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitSelect.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitStat.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitTemplate.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/npcgen/Configuration.java Trunk/pcgen/code/src/java/pcgen/core/pclevelinfo/PCLevelInfo.java Trunk/pcgen/code/src/java/pcgen/core/prereq/Prerequisite.java Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java Trunk/pcgen/code/src/java/pcgen/gui/utils/PObjectNode.java Trunk/pcgen/code/src/java/pcgen/persistence/PersistenceManager.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/AbilityLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignSourceEntry.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/CompanionModLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/DeityLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/DomainLoader.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/KitLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LanguageLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.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/java/pcgen/persistence/lst/RaceLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/SizeAdjustmentLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/SkillLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/SpellLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/WeaponProfLoader.java Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java Trunk/pcgen/code/src/java/pcgen/util/WeightedList.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellTypeParser.java Modified: Trunk/pcgen/code/src/java/pcgen/core/Ability.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -354,23 +354,15 @@ @Override public Ability clone() { - Ability anAbility = null; - try { - anAbility = (Ability) super.clone(); - anAbility.multiples = multiples; - anAbility.stacks = stacks; + return (Ability) super.clone(); } catch (CloneNotSupportedException e) { - ShowMessageDelegate.showMessageDialog( - e.getMessage(), - Constants.s_APPNAME, - MessageType.ERROR); + ShowMessageDelegate.showMessageDialog(e.getMessage(), Constants.s_APPNAME, MessageType.ERROR); + return null; } - - return anAbility; } /** @@ -905,6 +897,15 @@ { return other instanceof Ability && this.compareTo(other) == 0; } + + /** + * Must be consistent with equals + */ + @Override + public int hashCode() { + //Can't be more complicated because the weird nature of compareTo + return keyName.hashCode(); + } /** * Test whether other is the same base ability as this (ignoring any changes Modified: Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/AbilityInfo.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -154,6 +154,7 @@ * * @see java.lang.Object#toString() */ + @Override public String toString() { return this.keyName; Modified: Trunk/pcgen/code/src/java/pcgen/core/ArmorProf.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/ArmorProf.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/ArmorProf.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -42,6 +42,7 @@ * @return int * @see Comparable#compareTo(Object) */ + @Override public int compareTo(final Object o1) { return keyName.compareToIgnoreCase(((ArmorProf) o1).keyName); @@ -53,9 +54,10 @@ * @param o1 Object * @return boolean */ + @Override public boolean equals(final Object o1) { - return keyName.equals(((ArmorProf) o1).keyName); + return o1 instanceof ArmorProf && keyName.equals(((ArmorProf) o1).keyName); } /** @@ -63,6 +65,7 @@ * * @return int */ + @Override public int hashCode() { return keyName.hashCode(); Modified: Trunk/pcgen/code/src/java/pcgen/core/Campaign.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Campaign.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Campaign.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -1271,6 +1271,7 @@ return ret; } + @Override public Campaign clone() { Campaign newCampaign = null; @@ -1278,11 +1279,6 @@ try { newCampaign = (Campaign) super.clone(); - newCampaign.isLoaded = isLoaded; - newCampaign.showInMenu = showInMenu; - newCampaign.isD20 = isD20; - newCampaign.isOGL = isOGL; - newCampaign.isLicensed = isLicensed; newCampaign.options = (Properties) options.clone(); } catch (CloneNotSupportedException exc) Modified: Trunk/pcgen/code/src/java/pcgen/core/ClassType.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/ClassType.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/ClassType.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -24,8 +24,10 @@ */ package pcgen.core; +import pcgen.util.UnreachableError; + /** * <code>Campaign</code>. * @@ -111,17 +113,16 @@ return xpPenalty; } - public Object clone() - throws CloneNotSupportedException + @Override + public ClassType clone() { - final ClassType newClassType = (ClassType) super.clone(); - - newClassType.theName = new String(theName); - newClassType.isMonster = isMonster; - - newClassType.crFormula = new String(crFormula); - newClassType.xpPenalty = xpPenalty; - - return newClassType; + try + { + return (ClassType) super.clone(); + } + catch (CloneNotSupportedException e) + { + throw new UnreachableError(e); + } } } Modified: Trunk/pcgen/code/src/java/pcgen/core/Deity.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Deity.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Deity.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -134,20 +134,18 @@ * * @return A clone of the Deity object. */ + @Override public Deity clone() { - Deity d = null; - try { - d = (Deity) super.clone(); + return (Deity) super.clone(); } catch (CloneNotSupportedException exc) { ShowMessageDelegate.showMessageDialog(exc.getMessage(), Constants.s_APPNAME, MessageType.ERROR); + return null; } - - return d; } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/Domain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Domain.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Domain.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -187,6 +187,7 @@ return "DOMAIN|" + keyName; } + @Override public Domain clone() { Domain aObj = null; Modified: Trunk/pcgen/code/src/java/pcgen/core/Equipment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -3094,31 +3094,21 @@ * * @return Description of the Return Value */ + @Override public Equipment clone() { Equipment eq = null; try { eq = (Equipment) super.clone(); - // - // These get modified by equipment modifiers so - // DO NOT use the function or we'll get doubled bonuses - // - eq.cost = cost; - eq.size = size; - eq.baseCost = baseCost; - eq.sizeBase = sizeBase; - eq.baseItem = baseItem; - // set DR eq.seteDR(eDR.toString()); eq.setACCheck(acCheck.toString()); eq.setSpellFailure(spellFailure.toString()); - eq.weightInPounds = weightInPounds; eq.setMaxDex(maxDex.toString()); if (theWeaponStats != null) { - eq.theWeaponStats = (WeaponEquipment) theWeaponStats.clone(); + eq.theWeaponStats = theWeaponStats.clone(); eq.theWeaponStats.setOwner(eq); } Modified: Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -816,6 +816,7 @@ * * @return a clone of the EquipmentModifier */ + @Override public EquipmentModifier clone() { EquipmentModifier aObj = null; @@ -828,12 +829,6 @@ aObj.replaces = new ArrayList<String>(replaces); aObj.ignores = new ArrayList<String>(ignores); aObj.armorType = new ArrayList<String>(armorType); - aObj.cost = cost; - aObj.preCost = preCost; - aObj.proficiency = proficiency; - aObj.equipmentVisible = equipmentVisible; - aObj.plus = plus; - aObj.assignToAll = assignToAll; } catch (CloneNotSupportedException exc) { Modified: Trunk/pcgen/code/src/java/pcgen/core/Kit.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Kit.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Kit.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -356,7 +356,7 @@ { continue; } - BaseKit bk = (BaseKit)baseKit.clone(); + BaseKit bk = baseKit.clone(); if (selectValue != -1 && !bk.isOption(tempPC, selectValue)) { continue; Modified: Trunk/pcgen/code/src/java/pcgen/core/Language.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Language.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Language.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -111,6 +111,10 @@ * compared to a String) and get RID of it... explicitly grab the key * name and call .equals() on the strings. -thpr 06/18/05 */ + if (o1 == null) + { + return false; + } if (o1 instanceof String) { return keyName.equals(o1); Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -4073,8 +4073,6 @@ if (hitPointMap != null) { aClass.hitPointMap = new HashMap<Integer, Integer>(hitPointMap); } - aClass.hasSubClass = hasSubClass; - aClass.hasSubstitutionClass = hasSubstitutionClass; aClass.substitutionClassList = substitutionClassList; if (naturalWeapons != null) { Modified: Trunk/pcgen/code/src/java/pcgen/core/PCStat.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCStat.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/PCStat.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -124,25 +124,21 @@ return rolled; } + @Override public PCStat clone() { - PCStat newObj = null; - try { - newObj = (PCStat) super.clone(); - newObj.setAbb(abbreviation); - newObj.setStatMod(statMod); - newObj.setRolled(rolled); + return (PCStat) super.clone(); } catch (CloneNotSupportedException exc) { ShowMessageDelegate.showMessageDialog(exc.getMessage(), Constants.s_APPNAME, MessageType.ERROR); + return null; } - - return newObj; } + @Override public String toString() { final StringBuffer sb = new StringBuffer(30); Modified: Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -1357,6 +1357,7 @@ * * @throws CloneNotSupportedException */ + @Override public PCTemplate clone() throws CloneNotSupportedException { final PCTemplate aTemp = (PCTemplate) super.clone(); Modified: Trunk/pcgen/code/src/java/pcgen/core/Race.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Race.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Race.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -841,6 +841,7 @@ startingAC = anInt; } + @Override public Race clone() { Race aRace = null; Modified: Trunk/pcgen/code/src/java/pcgen/core/Skill.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Skill.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Skill.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -865,6 +865,7 @@ return skillReadOnly; } + @Override public Skill clone() { Skill newSkill = null; Modified: Trunk/pcgen/code/src/java/pcgen/core/SpellProgressionInfo.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpellProgressionInfo.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/SpellProgressionInfo.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -1045,6 +1045,7 @@ * @return A semi-shallow Clone of this Progression object. * @throws CloneNotSupportedException */ + @Override public Progression clone() throws CloneNotSupportedException { Progression p = (Progression) super.clone(); if (progressionMap != null) { Modified: Trunk/pcgen/code/src/java/pcgen/core/SpellSupport.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpellSupport.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/SpellSupport.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -34,6 +34,7 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import java.util.Map.Entry; import pcgen.core.character.CharacterSpell; import pcgen.core.character.SpellInfo; @@ -565,9 +566,10 @@ return new ArrayList<CharacterSpell>(characterSpellList); } - public Object clone() throws CloneNotSupportedException { + @Override + public SpellSupport clone() throws CloneNotSupportedException { SpellSupport ss = (SpellSupport) super.clone(); - ss.spellInfoMap = (DoubleKeyMap<String, String, Info>) spellInfoMap.clone(); + ss.spellInfoMap = spellInfoMap.clone(); ss.spellMap = new HashMapToList<Integer, PCSpell>(); ss.spellMap.addAllLists(spellMap); if (characterSpellList != null) { @@ -628,15 +630,15 @@ } // Iterate through the spellOutputMap outputing the spells - for (String key : spellOutputMap.keySet()) + for (Entry<String, StringBuffer> me : spellOutputMap.entrySet()) { if (txt.length() >0) { txt.append('\t'); } - txt.append("SPELLLEVEL:").append(key); + txt.append("SPELLLEVEL:").append(me.getKey()); txt.append("|"); - txt.append(spellOutputMap.get(key).toString()); + txt.append(me.getValue()); } return txt.toString(); Modified: Trunk/pcgen/code/src/java/pcgen/core/VariableList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/VariableList.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/VariableList.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -111,6 +111,7 @@ /** * @see java.lang.Object#clone() */ + @Override public Object clone() throws CloneNotSupportedException { final VariableList retVal = (VariableList) super.clone(); Modified: Trunk/pcgen/code/src/java/pcgen/core/Vision.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Vision.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/Vision.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -46,6 +46,7 @@ return visionType; } + @Override public String toString() { try { return toString(Integer.parseInt(distance)); @@ -54,18 +55,24 @@ } } - private String toString(int distance) { - String vision = visionType + " (" + distance + "')"; - if(distance <= 0) { + private String toString(int dist) { + String vision = visionType + " (" + dist + "')"; + if(dist <= 0) { vision = visionType.toString(); } return vision; } - public boolean equals(Vision v) { - return distance.equals(v.distance) && visionType.equals(v.visionType); + @Override + public boolean equals(Object obj) { + if (obj instanceof Vision) { + Vision v = (Vision) obj; + return distance.equals(v.distance) && visionType.equals(v.visionType); + } + return false; } + @Override public int hashCode() { return distance.hashCode() ^ visionType.hashCode(); } Modified: Trunk/pcgen/code/src/java/pcgen/core/WeaponEquipment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/WeaponEquipment.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/WeaponEquipment.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -374,26 +374,14 @@ return theRange; } - public Object clone() + @Override + public WeaponEquipment clone() { WeaponEquipment weapon = null; try { weapon = (WeaponEquipment) super.clone(); - weapon.theDamage = new String(theDamage); - weapon.theDamageMod = new String(theDamageMod); - weapon.theRange = Integer.valueOf(theRange); - weapon.theCritRange = new String(theCritRange); - weapon.theCritMult = theCritMult; - weapon.theRateOfFire = new String(theRateOfFire); - weapon.theWieldString = new String(theWieldString); - weapon.hasWield = hasWield; - weapon.theReach = theReach; - - weapon.theAltDamage = new String(theAltDamage); - weapon.theAltCritRange = new String(theAltCritRange); - weapon.theAltCritMult = theAltCritMult; } catch (CloneNotSupportedException e) { Modified: Trunk/pcgen/code/src/java/pcgen/core/WeaponProf.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/WeaponProf.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/WeaponProf.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -54,6 +54,7 @@ * @return a negative integer, zero, or a positive integer as WeaponProf * is less than, equal to, or greater than the specified WeaponProf. */ + @Override public int compareTo(final Object o1) { return keyName.compareToIgnoreCase(((WeaponProf) o1).keyName); @@ -65,15 +66,17 @@ * @return <code>true</code> if this WeaponProf is the same as the obj * argument; <code>false</code> otherwise. */ + @Override public boolean equals(final Object obj) { - return keyName.equals(((WeaponProf) obj).keyName); + return obj instanceof WeaponProf && keyName.equals(((WeaponProf) obj).keyName); } /** * Hashcode of the keyName. * @return Hashcode of the keyName. */ + @Override public int hashCode() { return keyName.hashCode(); Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -173,7 +173,6 @@ tempList2.add(bonus); } } - listToSort = tempList2; return tempList2; } Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -837,7 +837,7 @@ /** * @see java.lang.Object#clone() */ - public Object clone() throws CloneNotSupportedException + public BonusObj clone() throws CloneNotSupportedException { final BonusObj bonusObj = (BonusObj)super.clone(); Modified: Trunk/pcgen/code/src/java/pcgen/core/character/CompanionMod.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/character/CompanionMod.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/character/CompanionMod.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -57,6 +57,7 @@ * * @return a copy of this Ability */ + @Override public CompanionMod clone() { CompanionMod cmpMod = null; @@ -111,6 +112,7 @@ * @param obj * @return true if equal */ + @Override public boolean equals(final Object obj) { boolean result = false; @@ -239,6 +241,7 @@ * Hashcode of the keyname * @return hash code */ + @Override public int hashCode() { return classMap.hashCode(); Modified: Trunk/pcgen/code/src/java/pcgen/core/character/Follower.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/character/Follower.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/character/Follower.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -28,8 +28,7 @@ import pcgen.core.Constants; import pcgen.core.SettingsHandler; -import pcgen.core.utils.MessageType; -import pcgen.core.utils.ShowMessageDelegate; +import pcgen.util.UnreachableError; /** * <code>Follower.java</code> @@ -210,22 +209,22 @@ return fileName.compareTo(aF.fileName); } + @Override public String toString() { return name; } - public Object clone() + @Override + public Follower clone() { - Follower aClone = null; try { - aClone = (Follower)super.clone(); + return (Follower) super.clone(); } catch (CloneNotSupportedException exc) { - ShowMessageDelegate.showMessageDialog(exc.getMessage(), Constants.s_APPNAME, MessageType.ERROR); + throw new UnreachableError(exc); } - return aClone; } } Modified: Trunk/pcgen/code/src/java/pcgen/core/character/SpellBook.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/character/SpellBook.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/character/SpellBook.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -77,6 +77,7 @@ /** * @see java.lang.Object#toString() */ + @Override public String toString() { final StringBuffer result = new StringBuffer(name); @@ -263,6 +264,7 @@ /* (non-Javadoc) * @see java.lang.Object#clone() */ + @Override public Object clone() { SpellBook aClone = null; Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/BaseKit.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/BaseKit.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/BaseKit.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -115,7 +115,8 @@ * Clone this Base Kit * @return cloned Base Kit */ - public Object clone() + @Override + public BaseKit clone() { BaseKit aClone = null; try Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitAbilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitAbilities.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitAbilities.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -133,6 +133,7 @@ * * @see Object#toString() */ + @Override public String toString() { return stringRep; @@ -281,14 +282,10 @@ } } - public Object clone() + @Override + public KitAbilities clone() { - KitAbilities aClone = null; - aClone = (KitAbilities)super.clone(); - aClone.abilityStore = abilityStore; - aClone.free = free; - aClone.stringRep = stringRep; - return aClone; + return (KitAbilities) super.clone(); } public String getObjectName() Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitAlignment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitAlignment.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitAlignment.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -159,11 +159,10 @@ return true; } - public Object clone() + @Override + public KitAlignment clone() { - KitAlignment aClone = (KitAlignment)super.clone(); - aClone.alignmentStr = alignmentStr; - return aClone; + return (KitAlignment) super.clone(); } public String getObjectName() @@ -171,6 +170,7 @@ return "Alignment"; } + @Override public String toString() { if (alignmentStr == null || Constants.s_NONESELECTED.equals(alignmentStr)) Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitClass.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitClass.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -103,6 +103,7 @@ return theSubClass; } + @Override public String toString() { StringBuffer ret = new StringBuffer(100); @@ -151,13 +152,10 @@ theClass = null; } - public Object clone() + @Override + public KitClass clone() { - KitClass aClone = (KitClass)super.clone(); - aClone.theClassName = theClassName; - aClone.theSubClass = theSubClass; - aClone.theLevelString = theLevelString; - return aClone; + return (KitClass) super.clone(); } private void addLevel(final PlayerCharacter pc, final int numLevels, final PCClass aClass, final boolean doLevelAbilitiesIn) Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitDeity.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitDeity.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitDeity.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -112,6 +112,7 @@ return countFormula; } + @Override public String toString() { StringBuffer buf = new StringBuffer(); @@ -317,15 +318,10 @@ domainsToAdd = null; } - public Object clone() + @Override + public KitDeity clone() { - KitDeity aClone = (KitDeity)super.clone(); - - aClone.theDeityKey = theDeityKey; - aClone.countFormula = countFormula; - aClone.theDomains = theDomains; - - return aClone; + return (KitDeity) super.clone(); } public String getObjectName() Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitFunds.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitFunds.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitFunds.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -73,6 +73,7 @@ return qty; } + @Override public String toString() { return qty + ' ' + name; @@ -94,14 +95,10 @@ aPC.adjustGold(theQty); } - public Object clone() + @Override + public KitFunds clone() { - KitFunds aClone = (KitFunds)super.clone(); - - aClone.name = name; - aClone.qty = qty; - - return aClone; + return (KitFunds) super.clone(); } public String getObjectName() Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitGear.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitGear.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitGear.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -171,6 +171,7 @@ return theLocationStr; } + @Override public String toString() { int maxSize = 0; @@ -481,17 +482,10 @@ aPC.setGold(aPC.getGold().subtract(theCost).toString()); } - public Object clone() + @Override + public KitGear clone() { - KitGear aClone = (KitGear)super.clone(); - aClone.eqMods = eqMods; - aClone.name = name; - aClone.maxCost = maxCost; - aClone.qty = qty; - aClone.size = size; - aClone.theLocationStr = theLocationStr; - - return aClone; + return (KitGear) super.clone(); } public String getObjectName() Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitKit.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitKit.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitKit.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -88,11 +88,10 @@ return true; } - public Object clone() + @Override + public KitKit clone() { - KitKit aClone = (KitKit)super.clone(); - aClone.kitStr = kitStr; - return aClone; + return (KitKit) super.clone(); } public String getObjectName() @@ -100,6 +99,7 @@ return "Kit"; } + @Override public String toString() { return kitStr; Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitLevelAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitLevelAbility.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitLevelAbility.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -114,6 +114,7 @@ theAbilities.add(new AbilityChoice(anAbility, choices)); } + @Override public String toString() { StringBuffer buf = new StringBuffer(); @@ -188,15 +189,9 @@ } } - public Object clone() + public KitLevelAbility clone() { - KitLevelAbility aClone = (KitLevelAbility)super.clone(); - -// aClone.theClassName = theClassName; -// aClone.theLevel = theLevel; -// aClone.theAbilities.addAll(theAbilities); - - return aClone; + return (KitLevelAbility) super.clone(); } public String getObjectName() Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitProf.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitProf.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitProf.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -98,6 +98,7 @@ racialProf = argRacial; } + @Override public String toString() { final int maxSize = profList.size(); @@ -271,7 +272,8 @@ } } - public Object clone() + @Override + public KitProf clone() { KitProf aClone = (KitProf)super.clone(); aClone.profList.addAll(profList); Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitRace.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitRace.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitRace.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -92,11 +92,10 @@ return true; } - public Object clone() + @Override + public KitRace clone() { - KitRace aClone = (KitRace)super.clone(); - aClone.raceStr = raceStr; - return aClone; + return (KitRace) super.clone(); } public String getObjectName() @@ -104,6 +103,7 @@ return "Race"; } + @Override public String toString() { return raceStr; Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitSelect.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitSelect.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitSelect.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -68,6 +68,7 @@ theFormula = aFormula; } + @Override public String toString() { return theFormula; @@ -84,13 +85,10 @@ // Nothing to do. } - public Object clone() + @Override + public KitSelect clone() { - KitSelect aClone = (KitSelect)super.clone(); - - aClone.theFormula = theFormula; - - return aClone; + return (KitSelect) super.clone(); } public String getObjectName() Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitSpells.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -155,6 +155,7 @@ spellBook.addSpell(argSpell, metamagicFeats, countStr); } + @Override public String toString() { final StringBuffer info = new StringBuffer(); @@ -328,7 +329,8 @@ } } - public Object clone() + @Override + public KitSpells clone() { KitSpells aClone = (KitSpells)super.clone(); aClone.spellMap = spellMap; Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitStat.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitStat.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitStat.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -151,12 +151,9 @@ final int spMod = pcClass.recalcSkillPointMod(aPC, j + 1); - if (pcl != null) - { - pcl.setSkillPointsGained(spMod); - pcl.setSkillPointsRemaining(pcl. - getSkillPointsGained()); - } + pcl.setSkillPointsGained(spMod); + pcl.setSkillPointsRemaining(pcl + .getSkillPointsGained()); pcClass.setSkillPool(pcClass.skillPool() + spMod); aPC.setSkillPoints(spMod + aPC.getSkillPoints()); Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitTemplate.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitTemplate.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitTemplate.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -159,11 +159,10 @@ return false; } - public Object clone() + @Override + public KitTemplate clone() { - KitTemplate aClone = (KitTemplate)super.clone(); - aClone.templateStr = templateStr; - return aClone; + return (KitTemplate) super.clone(); } public String getObjectName() @@ -171,6 +170,7 @@ return "Templates"; } + @Override public String toString() { return templateStr.replaceAll("\\|", ", "); Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityAbility.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -651,13 +651,11 @@ final List<String> aBonusList = new ArrayList<String>(); boolean spellLevelProcess = false; - final String choiceString = ab.getChoiceString(); - - if ((ab != null) && choiceString.startsWith("SPELLLEVEL")) + if ((ab != null) && ab.getChoiceString().startsWith("SPELLLEVEL")) { spellLevelProcess = true; //TODO - This split [] needs to be reviewed?? - final List<String> bonuses = Arrays.asList(choiceString.split("[]")); + final List<String> bonuses = Arrays.asList(ab.getChoiceString().split("[]")); Iterator<String> bonusIt = bonuses.iterator(); bonusIt.next(); Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityFeat.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityFeat.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityFeat.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -531,7 +531,6 @@ */ private String adjustNames(String aFeatKey, Ability anAbility) { String subKey = aFeatKey.substring(anAbility.getKeyName().length()); - aFeatKey = anAbility.getKeyName(); final int i = subKey.indexOf('('); Modified: Trunk/pcgen/code/src/java/pcgen/core/npcgen/Configuration.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/npcgen/Configuration.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/npcgen/Configuration.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -53,8 +53,6 @@ private GameMode theMode = null; - private String theSkillStatWeight = "((STAT*STAT)*(TOTALWT/100))"; - private List<GeneratorOption> theGeneratorOptions = new ArrayList<GeneratorOption>(); private Map<String, ClassData> theClassData = new HashMap<String, ClassData>(); Modified: Trunk/pcgen/code/src/java/pcgen/core/pclevelinfo/PCLevelInfo.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/pclevelinfo/PCLevelInfo.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/pclevelinfo/PCLevelInfo.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -330,12 +330,10 @@ return objects; } + @Override public Object clone() { PCLevelInfo clone = new PCLevelInfo(aPC, classKeyName); - clone.level = level; - clone.skillPointsGained = skillPointsGained; - clone.skillPointsRemaining = skillPointsRemaining; for (Iterator<? extends PObject> i = objects.iterator(); i.hasNext(); ) { clone.objects.add(i.next()); Modified: Trunk/pcgen/code/src/java/pcgen/core/prereq/Prerequisite.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/prereq/Prerequisite.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/prereq/Prerequisite.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -213,6 +213,7 @@ * * @see java.lang.Object#toString() */ + @Override public String toString() { final StringBuffer buf = new StringBuffer(); @@ -312,6 +313,7 @@ * * @see java.lang.Object#clone() */ + @Override public Prerequisite clone() throws CloneNotSupportedException { final Prerequisite copy = (Prerequisite) super.clone(); Modified: Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -948,6 +948,7 @@ //////////////////////////////////////////////////////////// // Public method(s) //////////////////////////////////////////////////////////// + @Override public Spell clone() { Spell aSpell = null; @@ -1251,4 +1252,13 @@ } return false; } + + /** + * Need something consistent with equals - this causes conflicts with the same name + * but that's ok, it's only a hashcode. + */ + @Override + public int hashCode() { + return getKeyName().hashCode(); + } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/utils/PObjectNode.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/utils/PObjectNode.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/gui/utils/PObjectNode.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -520,7 +520,8 @@ aPC = currentPC; } - public Object clone() + @Override + public PObjectNode clone() { PObjectNode retVal = null; @@ -536,7 +537,7 @@ for (PObjectNode n : children) { - PObjectNode node = (PObjectNode) (n.clone()); + PObjectNode node = (n.clone()); d.add(node); } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/PersistenceManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/PersistenceManager.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/PersistenceManager.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -24,7 +24,6 @@ import pcgen.core.Campaign; import pcgen.core.Globals; -import pcgen.core.PObject; import pcgen.persistence.lst.LstSystemLoader; import java.util.List; Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/AbilityLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/AbilityLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/AbilityLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -155,10 +155,10 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(PObject objToForget) + protected void performForget(Ability objToForget) { - String aCat = ((Ability) objToForget).getCategory(); - String aKey = ((Ability) objToForget).getKeyName(); + String aCat = objToForget.getCategory(); + String aKey = objToForget.getKeyName(); Globals.removeAbilityKeyed(aCat, aKey); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignSourceEntry.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignSourceEntry.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignSourceEntry.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -35,7 +35,7 @@ * This class is used to match a source file to the campaign that * loaded it. */ -public class CampaignSourceEntry implements Comparable<CampaignSourceEntry> +public class CampaignSourceEntry { private Campaign campaign = null; private List<String> excludeItems = new ArrayList<String>(); @@ -133,14 +133,15 @@ * @return true if equals * @see java.lang.Object#equals(java.lang.Object) */ - public boolean equals(CampaignSourceEntry arg0) + @Override + public boolean equals(Object arg0) { - if (arg0 == null) + if (! (arg0 instanceof CampaignSourceEntry)) { return false; } - return file.equals(arg0.file); + return file.equals(((CampaignSourceEntry)arg0).file); } /** Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/CompanionModLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/CompanionModLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/CompanionModLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -123,7 +123,7 @@ } @Override - protected void performForget(PObject objToForget) { - Globals.removeCompanionMod((CompanionMod) objToForget); + protected void performForget(CompanionMod objToForget) { + Globals.removeCompanionMod(objToForget); } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/DeityLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/DeityLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/DeityLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -136,7 +136,7 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(PObject objToForget) + protected void performForget(Deity objToForget) { Globals.getDeityList().remove(objToForget); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/DomainLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/DomainLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/DomainLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -156,7 +156,7 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(PObject objToForget) + protected void performForget(Domain objToForget) { Globals.getDomainList().remove(objToForget); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -77,7 +77,6 @@ EquipmentLstToken.class); while (colToken.hasMoreTokens()) { final String colString = colToken.nextToken().trim(); - colString.length(); final int idxColon = colString.indexOf(':'); String key = ""; @@ -131,7 +130,7 @@ } @Override - protected void performForget(PObject objToForget) { - EquipmentList.remove((Equipment) objToForget); + protected void performForget(Equipment objToForget) { + EquipmentList.remove(objToForget); } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentModifierLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentModifierLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/EquipmentModifierLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -111,7 +111,7 @@ } @Override - protected void performForget(PObject objToForget) { + protected void performForget(EquipmentModifier objToForget) { throw new java.lang.UnsupportedOperationException( "Cannot FORGET an EquipmentModifier"); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/KitLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/KitLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/KitLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -104,14 +104,14 @@ } @Override - protected void performForget(PObject objToForget) { + protected void performForget(Kit objToForget) { // FIXME Auto-generated method stub } - public static List<String> globalTokens = null; + static List<String> globalTokens = null; - public static Prerequisite kitPrereq = null; + static Prerequisite kitPrereq = null; public static void addGlobalToken(String string) { if (globalTokens == null) { Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LanguageLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LanguageLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LanguageLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -129,7 +129,7 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(final PObject objToForget) + protected void performForget(final Language objToForget) { Globals.getLanguageList().remove(objToForget); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -502,7 +502,7 @@ * * @param objToForget containing the object to forget */ - protected abstract void performForget(PObject objToForget); + protected abstract void performForget(T objToForget); /** * This method will sort the list of files into an order such that Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -422,7 +422,7 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(final PObject objToForget) + protected void performForget(final PCClass objToForget) { Globals.getClassList().remove(objToForget); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCTemplateLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -110,7 +110,7 @@ } @Override - protected void performForget(PObject objToForget) { + protected void performForget(PCTemplate objToForget) { Globals.getTemplateList().remove(objToForget); } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/RaceLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/RaceLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/RaceLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -152,7 +152,7 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(final PObject objToForget) + protected void performForget(final Race objToForget) { Globals.removeRaceKeyed(objToForget.getKeyName()); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SizeAdjustmentLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SizeAdjustmentLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SizeAdjustmentLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -63,9 +63,8 @@ { SizeAdjustment sa = new SizeAdjustment(); - lstLine.trim(); final StringTokenizer colToken = - new StringTokenizer(lstLine, SystemLoader.TAB_DELIM); + new StringTokenizer(lstLine.trim(), SystemLoader.TAB_DELIM); Map<String, LstToken> tokenMap = TokenStore.inst().getTokenMap(SizeAdjustmentLstToken.class); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SkillLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SkillLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SkillLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -131,7 +131,7 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(final PObject objToForget) + protected void performForget(final Skill objToForget) { Globals.getSkillList().remove(objToForget); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SpellLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SpellLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SpellLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -201,7 +201,7 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(final PObject objToForget) + protected void performForget(final Spell objToForget) { Globals.removeFromSpellMap(objToForget.getKeyName()); } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/WeaponProfLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/WeaponProfLoader.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/WeaponProfLoader.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -136,7 +136,7 @@ * @see pcgen.persistence.lst.LstObjectFileLoader#performForget(pcgen.core.PObject) */ @Override - protected void performForget(final PObject objToForget) + protected void performForget(final WeaponProf objToForget) { Globals.removeWeaponProfKeyed(objToForget.getKeyName()); } Modified: Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/util/CaseInsensitiveString.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -80,7 +80,8 @@ * object - CaseInsensitiveStrings do NOT equals Strings. Please be * consistent with the .equals interface as generally used in Java. */ - return string.equalsIgnoreCase(((CaseInsensitiveString) s).toString()); + return s instanceof CaseInsensitiveString && + string.equalsIgnoreCase(((CaseInsensitiveString) s).toString()); } /** Modified: Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/util/MapCollection.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -255,7 +255,7 @@ return 2 * map.size(); } - private class MapCollectionIterator implements Iterator<Object> + private static class MapCollectionIterator implements Iterator<Object> { Entry<?, ?> workingEntry; Modified: Trunk/pcgen/code/src/java/pcgen/util/WeightedList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/WeightedList.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/pcgen/util/WeightedList.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -689,6 +689,14 @@ { return theElement.equals(o); } + + /** + * Must be consistent with equals + */ + @Override + public int hashCode() { + return theElement.hashCode(); + } /** * Returns a String representation of this object.<p> Modified: Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellTypeParser.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellTypeParser.java 2007-01-16 18:40:13 UTC (rev 1956) +++ Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreSpellTypeParser.java 2007-01-17 03:14:03 UTC (rev 1957) @@ -33,7 +33,6 @@ import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.prereq.AbstractPrerequisiteParser; import pcgen.persistence.lst.prereq.PrerequisiteParserInterface; -import pcgen.util.Logging; import java.util.StringTokenizer; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-01-18 04:45:12
|
Revision: 1973 http://svn.sourceforge.net/pcgen/?rev=1973&view=rev Author: thpr Date: 2007-01-17 20:45:13 -0800 (Wed, 17 Jan 2007) Log Message: ----------- Plugin and PCC File Loading Performance Improvements Modified Paths: -------------- Trunk/pcgen/code/src/java/gmgen/pluginmgr/JARClassLoader.java Trunk/pcgen/code/src/java/gmgen/pluginmgr/Plugin.java Trunk/pcgen/code/src/java/gmgen/pluginmgr/PluginLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Modified: Trunk/pcgen/code/src/java/gmgen/pluginmgr/JARClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/pluginmgr/JARClassLoader.java 2007-01-18 02:30:01 UTC (rev 1972) +++ Trunk/pcgen/code/src/java/gmgen/pluginmgr/JARClassLoader.java 2007-01-18 04:45:13 UTC (rev 1973) @@ -427,11 +427,9 @@ private Plugin loadPluginClass(String name, String system) throws Exception { // Check if a plugin with the same name is already loaded - Plugin[] plugins = PluginLoader.getPlugins(); - - for (int i = 0; i < plugins.length; i++) + for (Plugin plugin : PluginLoader.getPlugins()) { - if (plugins[i].getClass().getName().equals(name)) + if (plugin.getClass().getName().equals(name)) { PluginLoader.pluginError(jar.getPath(), "plugin-error.already-loaded", null); Modified: Trunk/pcgen/code/src/java/gmgen/pluginmgr/Plugin.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/pluginmgr/Plugin.java 2007-01-18 02:30:01 UTC (rev 1972) +++ Trunk/pcgen/code/src/java/gmgen/pluginmgr/Plugin.java 2007-01-18 04:45:13 UTC (rev 1973) @@ -211,17 +211,6 @@ } /** - * Gets all the plugins of the JAR - * - *@return The plugins - *@since GMGen 3.3 - */ - public Plugin[] getPlugins() - { - return plugins.toArray(new Plugin[plugins.size()]); - } - - /** * Adds all the plugins in this jar to a vector * *@param list Vector to add all the plugins to. Modified: Trunk/pcgen/code/src/java/gmgen/pluginmgr/PluginLoader.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/pluginmgr/PluginLoader.java 2007-01-18 02:30:01 UTC (rev 1972) +++ Trunk/pcgen/code/src/java/gmgen/pluginmgr/PluginLoader.java 2007-01-18 04:45:13 UTC (rev 1973) @@ -42,6 +42,7 @@ public class PluginLoader { private static List<Plugin.JAR> jars = new ArrayList<Plugin.JAR>(); + private static List<Plugin> pluginCache = null; private static List<ErrorListDialog.ErrorEntry> pluginErrors; private static PluginLoader inst; @@ -112,16 +113,18 @@ * *@return The plugins */ - public static Plugin[] getPlugins() + public static List<Plugin> getPlugins() { - List<Plugin> vector = new ArrayList<Plugin>(); + if (pluginCache == null) { + pluginCache = new ArrayList<Plugin>(500); - for ( Plugin.JAR jar : jars ) - { - jar.getPlugins(vector); + for ( Plugin.JAR jar : jars ) + { + jar.getPlugins(pluginCache); + } } - return vector.toArray(new Plugin[vector.size()]); + return pluginCache; } /** @@ -132,6 +135,7 @@ public static void addPluginJAR(Plugin.JAR plugin) { jars.add(plugin); + pluginCache = null; } static void pluginError(final String path, String messageProp, Object[] args) Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2007-01-18 02:30:01 UTC (rev 1972) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2007-01-18 04:45:13 UTC (rev 1973) @@ -68,7 +68,6 @@ import pcgen.core.spell.Spell; import pcgen.core.utils.CoreUtility; import pcgen.gui.pcGenGUI; -import pcgen.io.PCGFile; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.SystemLoader; import pcgen.util.Logging; @@ -148,7 +147,7 @@ { try { - if (PCGFile.isPCGenCampaignFile(new File(fileName))) + if (".pcc".regionMatches(true, 0, fileName, fileName.length() - 4, 4)) { final String path = new File(parentDir, fileName).getPath(); @@ -161,8 +160,16 @@ } else if (parentDir.isDirectory()) { - loadPCCFilesInDirectory(parentDir.getPath() - + File.separator + fileName); + /* + * This is a specific "hack" in order to speed loading when + * in a development (Subversion-based) environment - Tom + * Parker 1/17/07 + */ + if (!".svn".equals(fileName)) + { + loadPCCFilesInDirectory(parentDir.getPath() + + File.separator + fileName); + } } } catch (PersistenceLayerException e) @@ -1680,53 +1687,53 @@ final String gameModeDirectory = systemPrefix + "gameModes" + File.separator; - for (int i = 0; i < gameFiles.length; ++i) + for (String gameFile : gameFiles) { - SystemCollections.setEmptyUnitSetList(gameFiles[i]); + SystemCollections.setEmptyUnitSetList(gameFile); final GameMode gm = - loadGameModeMiscInfo(gameFiles[i], new File( - gameModeDirectory + gameFiles[i] + File.separator + loadGameModeMiscInfo(gameFile, new File( + gameModeDirectory + gameFile + File.separator + "miscinfo.lst")); - SettingsHandler.setGame(gameFiles[i]); + SettingsHandler.setGame(gameFile); if (gm != null) { loadGameModeInfoFile(gm, new File(gameModeDirectory - + gameFiles[i] + File.separator + "level.lst"), "level"); + + gameFile + File.separator + "level.lst"), "level"); loadGameModeInfoFile(gm, new File(gameModeDirectory - + gameFiles[i] + File.separator + "rules.lst"), "rules"); + + gameFile + File.separator + "rules.lst"), "rules"); // Load equipmentslot.lst - loadGameModeLstFile(eqSlotLoader, gameFiles[i], + loadGameModeLstFile(eqSlotLoader, gameFile, "equipmentslots.lst"); // Load paperInfo.lst - loadGameModeLstFile(paperLoader, gameFiles[i], "paperInfo.lst"); + loadGameModeLstFile(paperLoader, gameFile, "paperInfo.lst"); // Load bio files - loadGameModeLstFile(traitLoader, gameFiles[i], "bio" + loadGameModeLstFile(traitLoader, gameFile, "bio" + File.separator + "traits.lst"); - loadGameModeLstFile(locationLoader, gameFiles[i], "bio" + loadGameModeLstFile(locationLoader, gameFile, "bio" + File.separator + "locations.lst"); - loadGameModeLstFile(bioLoader, gameFiles[i], "bio" + loadGameModeLstFile(bioLoader, gameFile, "bio" + File.separator + "biosettings.lst"); // Load load.lst and check for completeness - loadGameModeLstFile(loadInfoLoader, gameFiles[i], "load.lst"); + loadGameModeLstFile(loadInfoLoader, gameFile, "load.lst"); // Load unitset.lst - loadGameModeLstFile(unitSetLoader, gameFiles[i], "unitset.lst", + loadGameModeLstFile(unitSetLoader, gameFile, "unitset.lst", false); // Load pointbuymethods.lst - loadGameModeLstFile(pointBuyLoader, gameFiles[i], + loadGameModeLstFile(pointBuyLoader, gameFile, "pointbuymethods.lst", false); // Load sizeAdjustment.lst - loadGameModeLstFile(sizeLoader, gameFiles[i], + loadGameModeLstFile(sizeLoader, gameFile, "sizeAdjustment.lst"); // Load statsandchecks.lst - loadGameModeLstFile(statCheckLoader, gameFiles[i], + loadGameModeLstFile(statCheckLoader, gameFile, "statsandchecks.lst"); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pe...@us...> - 2007-01-21 18:24:23
|
Revision: 2001 http://svn.sourceforge.net/pcgen/?rev=2001&view=rev Author: perchrh Date: 2007-01-21 10:24:21 -0800 (Sun, 21 Jan 2007) Log Message: ----------- Add support for strings in preageset tags, like preageset:old. Also clean up code a bit. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreAgeSetParser.java Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAgeSetTester.java Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-01-21 17:22:19 UTC (rev 2000) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-01-21 18:24:21 UTC (rev 2001) @@ -2651,6 +2651,8 @@ Prerequisite.total-values=total-values\u003D"true" +PreAgeSet.error.badly_formed_attribute=Badly formed PREAGESET attribute {0} + PreAlign.toHtml=Alignment {0} {1} PreApply.cannot_find_test=PREAPPLY\u003A Can not find test\u003A {0} Modified: Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreAgeSetParser.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreAgeSetParser.java 2007-01-21 17:22:19 UTC (rev 2000) +++ Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreAgeSetParser.java 2007-01-21 18:24:21 UTC (rev 2001) @@ -24,6 +24,9 @@ */ package plugin.pretokens.parser; +import pcgen.core.Globals; +import pcgen.core.prereq.Prerequisite; +import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.prereq.AbstractPrerequisiteListParser; import pcgen.persistence.lst.prereq.PrerequisiteParserInterface; @@ -32,13 +35,36 @@ * */ public class PreAgeSetParser extends AbstractPrerequisiteListParser - implements PrerequisiteParserInterface - { +implements PrerequisiteParserInterface +{ public String[] kindsHandled() { return new String[]{"AGESET", "AGESETEQ", "AGESETGT", "AGESETGTEQ", "AGESETLT", "AGESETLTEQ", "AGESETNEQ"}; //$NON-NLS-1$ } + + /* (non-Javadoc) + * @see pcgen.persistence.lst.prereq.PrereqParserInterface#parse(java.lang.String) + */ + @Override + public Prerequisite parse(String kind, String formula, + boolean invertResult, boolean overrideQualify) + throws PersistenceLayerException + { + + Prerequisite prereq = + super.parse(kind, formula, invertResult, overrideQualify); + + //Operand should be either an integer or a recognizable String + try{ + Integer.parseInt(formula); + } + catch (NumberFormatException exc){ + prereq.setOperand(formula); //assume recognizable String for now + } + + return prereq; + } } \ No newline at end of file Modified: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAgeSetTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAgeSetTester.java 2007-01-21 17:22:19 UTC (rev 2000) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreAgeSetTester.java 2007-01-21 18:24:21 UTC (rev 2001) @@ -37,7 +37,7 @@ * */ public class PreAgeSetTester extends AbstractPrerequisiteTest implements - PrerequisiteTest +PrerequisiteTest { /* (non-Javadoc) @@ -48,7 +48,7 @@ { final int ageset = Globals.getBioSet().getPCAgeSet(character); - int runningTotal; + int runningTotal=-1; int anInt; try @@ -58,21 +58,24 @@ catch (NumberFormatException exc) { anInt = Globals.getBioSet().getAgeSetNamed(prereq.getOperand()); + if (anInt == -1){ //String not recognized + throw new PrerequisiteException(); + } } catch (Exception e){ throw new PrerequisiteException(PropertyFactory.getFormattedString("PreAgeSet.error.badly_formed_attribute", prereq.getOperand())); //$NON-NLS-1$ } runningTotal = prereq.getOperator().compare(ageset, anInt); + return countedTotal(prereq, runningTotal); } /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#kindsHandled() */ - public String kindHandled() - { - return "AGESET"; //$NON-NLS-1$ + public String kindHandled() { + return "AGESET";//$NON-NLS-1$ } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tob...@us...> - 2007-01-26 09:50:38
|
Revision: 2039 http://svn.sourceforge.net/pcgen/?rev=2039&view=rev Author: tobias-w Date: 2007-01-26 01:50:38 -0800 (Fri, 26 Jan 2007) Log Message: ----------- Internationalization: use getFormattedString in NotesPanel and InfoDescription reorganize in_delNote1, in_delNote2 and in_delNote3 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_es.properties Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_fr.properties Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_it.properties Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_pt.properties Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDescription.java Trunk/pcgen/code/src/java/plugin/charactersheet/gui/NotesPanel.java Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-01-26 09:16:14 UTC (rev 2038) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2007-01-26 09:50:38 UTC (rev 2039) @@ -1151,13 +1151,12 @@ in_newValue=New Value in_addChild=Add an item as a child of the currently selected item +#0 note +#1 number of children +in_delNote1=Are you sure you wish to delete the note {0} and its {1} children? +#0 note +in_delNote2=Are you sure you wish to delete the note {0}? -in_delNote1=Are you sure you wish to delete the note - -in_delNote2=and its - -in_delNote3=children - in_delNote4=Delete Note in_delSelIt=Delete the selected item Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_es.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_es.properties 2007-01-26 09:16:14 UTC (rev 2038) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_es.properties 2007-01-26 09:50:38 UTC (rev 2039) @@ -1063,12 +1063,10 @@ in_addChild=A\u00F1adir un objeto como hijo el objeto seleccionado -in_delNote1=\u00BFEst\u00E1s seguro de querer borrar la nota +in_delNote1=\u00BFEst\u00E1s seguro de querer borrar la nota {0} y sus {1} hijos? -in_delNote2=y sus +in_delNote2=\u00BFEst\u00E1s seguro de querer borrar la nota {0}? -in_delNote3=hijos? - in_delNote4=Borrar nota in_delSelIt=Borrar el objeto seleccionado Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_fr.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_fr.properties 2007-01-26 09:16:14 UTC (rev 2038) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_fr.properties 2007-01-26 09:50:38 UTC (rev 2039) @@ -875,12 +875,10 @@ in_addChild=Ajouter une sous-note \u00E0 l'\u00E9l\u00E9ment s\u00E9lectionn\u00E9 -in_delNote1=\u00CAtes-vous certains de d\u00E9sirer effacer cette note +in_delNote1=\u00CAtes-vous certains de d\u00E9sirer effacer cette note {0} et ses {1} sous-notes? -in_delNote2=et ses +in_delNote2=\u00CAtes-vous certains de d\u00E9sirer effacer cette note {0}? -in_delNote3=sous-notes - in_delNote4=Effacer note in_delSelIt=Effacer l'\u00E9l\u00E9ment s\u00E9lectionn\u00E9 Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_it.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_it.properties 2007-01-26 09:16:14 UTC (rev 2038) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_it.properties 2007-01-26 09:50:38 UTC (rev 2039) @@ -1063,12 +1063,10 @@ in_addChild=Aggiungi un oggetto come figlio dell''oggetto attualemnte selezionato -in_delNote1=Sei sicuro di voler cancellare la nota +in_delNote1=Sei sicuro di voler cancellare la nota {0} e i suoi {1} figli? -in_delNote2=e i suoi +in_delNote2=Sei sicuro di voler cancellare la nota {0}? -in_delNote3=figli - in_delNote4=Cancella Nota in_delSelIt=Cancella l'oggetto selezionato Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_pt.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_pt.properties 2007-01-26 09:16:14 UTC (rev 2038) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle_pt.properties 2007-01-26 09:50:38 UTC (rev 2039) @@ -993,12 +993,10 @@ in_addChild=Adicionar um item como filho do item atualmente selecionado -in_delNote1=Voc\u00EA tem certeza que deseja apagar a nota +in_delNote1=Voc\u00EA tem certeza que deseja apagar a nota {0} e seus {1} filhos? -in_delNote2=e seus +in_delNote2=Voc\u00EA tem certeza que deseja apagar a nota {0}? -in_delNote3=filhos - in_delNote4=Deletar Nota in_delSelIt=Deletar o item selecionado Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDescription.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDescription.java 2007-01-26 09:16:14 UTC (rev 2038) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDescription.java 2007-01-26 09:50:38 UTC (rev 2039) @@ -1408,16 +1408,23 @@ } } + String message; + if(numChildren > 0) + { + message = PropertyFactory + .getFormattedString("in_delNote1", + aNode.toString(),String.valueOf(numChildren)); + } + else + { + message = PropertyFactory + .getFormattedString("in_delNote2", + aNode.toString()); + } + //The following line should be taken out and shot! reallyDelete = - JOptionPane.showConfirmDialog(null, PropertyFactory - .getString("in_delNote1") - + " " - + aNode.toString() - + ((numChildren > 0) ? (" " - + PropertyFactory.getString("in_delNote2") - + " " + (numChildren) + " " + PropertyFactory - .getString("in_delNote3")) : " ") + "?", + JOptionPane.showConfirmDialog(null, message, PropertyFactory.getString("in_delNote4"), JOptionPane.OK_CANCEL_OPTION); Modified: Trunk/pcgen/code/src/java/plugin/charactersheet/gui/NotesPanel.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/charactersheet/gui/NotesPanel.java 2007-01-26 09:16:14 UTC (rev 2038) +++ Trunk/pcgen/code/src/java/plugin/charactersheet/gui/NotesPanel.java 2007-01-26 09:50:38 UTC (rev 2039) @@ -631,16 +631,23 @@ } } + String message; + if(numChildren > 0) + { + message = PropertyFactory + .getFormattedString("in_delNote1", + toString(),String.valueOf(numChildren)); + } + else + { + message = PropertyFactory + .getFormattedString("in_delNote2", + toString()); + } + //The following line should be taken out and shot! reallyDelete = - JOptionPane.showConfirmDialog(null, PropertyFactory - .getString("in_delNote1") - + " " - + toString() - + ((numChildren > 0) ? (" " - + PropertyFactory.getString("in_delNote2") + " " - + (numChildren) + " " + PropertyFactory - .getString("in_delNote3")) : " ") + "?", + JOptionPane.showConfirmDialog(null, message, PropertyFactory.getString("in_delNote4"), JOptionPane.OK_CANCEL_OPTION); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2007-02-06 10:14:36
|
Revision: 2121 http://svn.sourceforge.net/pcgen/?rev=2121&view=rev Author: jdempsey Date: 2007-02-06 02:14:36 -0800 (Tue, 06 Feb 2007) Log Message: ----------- Fix bug#1649398 - !PRE not recognised as a prereq in SA - Moved all prereq identification into a single place in PreParserFactory Modified Paths: -------------- 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/SpecialProperty.java Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java Trunk/pcgen/code/src/java/pcgen/io/exporttoken/BonusToken.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseKitLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/BioSetLoader.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/persistence/lst/prereq/PreParserFactory.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java Trunk/pcgen/code/src/java/plugin/lsttokens/AbilityLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/DescLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/SaLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/SpelllevelLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/SpellsLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SpellLst.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -951,8 +951,7 @@ while (breakOnPipes.hasMoreTokens()) { final String bString = breakOnPipes.nextToken(); - if (bString.startsWith("PRE") - || bString.startsWith("!PRE")) { + if (PreParserFactory.isPreReqString(bString)) { Logging .debugPrint("Why is this prerequisite '" + bString + "' parsed in '" + getClass().getName() + ".getBonusTo(String,String,int)' rather than in the persistence layer?"); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ try { Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -12610,8 +12610,7 @@ { final String bString = aTok.nextToken(); - if ((bString.startsWith("PRE") || bString.startsWith("!PRE")) - && (bString.indexOf(':') >= 0)) + if (PreParserFactory.isPreReqString(bString)) { try { Modified: Trunk/pcgen/code/src/java/pcgen/core/SpecialProperty.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpecialProperty.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/core/SpecialProperty.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -70,7 +70,7 @@ final String cString = tok.nextToken(); // Check to see if it's a PRExxx: tag - if (cString.startsWith("PRE") && (cString.indexOf(":") > 0)) + if (PreParserFactory.isPreReqString(cString)) { try { Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -268,7 +268,7 @@ { final String aString = aTok.nextToken().toUpperCase(); - if (aString.startsWith("!PRE") || aString.startsWith("PRE")) + if (PreParserFactory.isPreReqString(aString)) { //Logging.errorPrint("Why is this not parsed in loading: " + aString + " rather than in Bonus.newBonus()"); Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -602,7 +602,7 @@ if ( (len > 0) && - (pString.startsWith("PRE") || pString.startsWith("!PRE"))) + (PreParserFactory.isPreReqString(pString))) { preReqArray.add(pString); } Modified: Trunk/pcgen/code/src/java/pcgen/io/exporttoken/BonusToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/exporttoken/BonusToken.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/io/exporttoken/BonusToken.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -102,8 +102,7 @@ { return pc.listBonusesFor(aType + "." + aName); } - if ((bucket.startsWith("PRE") || bucket.startsWith("!PRE")) - && bucket.indexOf(':') >= 0) + if (PreParserFactory.isPreReqString(bucket)) { Logging.debugPrint("Why is this not parsed in loading: " + bucket + " rather than in BonusToken.getBonusToken()"); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseKitLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseKitLoader.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseKitLoader.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -51,7 +51,7 @@ + ':' + tag + "\""); } } - else if (key.startsWith("PRE") || key.startsWith("!PRE")) + else if (PreParserFactory.isPreReqString(key)) { final PreParserFactory factory = PreParserFactory.getInstance(); Prerequisite prereq = factory.parse(tag); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/BioSetLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/BioSetLoader.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/BioSetLoader.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -27,6 +27,7 @@ import pcgen.core.Globals; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.SystemLoader; +import pcgen.persistence.lst.prereq.PreParserFactory; import java.net.URI; import java.util.ArrayList; @@ -105,8 +106,7 @@ { regionName = colString.substring(7); } - else if (colString.startsWith("PRE") - || colString.startsWith("!PRE")) + else if (PreParserFactory.isPreReqString(colString)) { if (preReqList == null) { Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PObjectLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PObjectLoader.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PObjectLoader.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -127,7 +127,7 @@ { // blank intentionally } - else if (aTag.startsWith("PRE") || aTag.startsWith("!PRE") + else if (PreParserFactory.isPreReqString(aTag) || aTag.startsWith("RESTRICT:")) { if (aTag.toUpperCase().equals("PRE:.CLEAR")) Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLoader.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLoader.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -145,8 +145,7 @@ + gameMode.getName() + ':' + colString + "\""); } } - else if (colString.startsWith("PRE") - || colString.startsWith("!PRE") + else if (PreParserFactory.isPreReqString(colString) || colString.startsWith("RESTRICT:")) { if (colString.toUpperCase().equals("PRE:.CLEAR")) Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/prereq/PreParserFactory.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -184,4 +184,15 @@ } } + /** + * Identify if the token passed in defines a prerequisite. + * + * @param token The token to be checked. + * @return True if the string is a prereq string. + */ + public static boolean isPreReqString(String token) + { + return (token.startsWith("PRE") || token.startsWith("!PRE")) + && (token.indexOf(":") > 0); + } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -69,8 +69,7 @@ continue; } - if ((aPart.startsWith("PRE") || aPart.startsWith("!PRE")) - && (aPart.indexOf(":") > 0)) + if (PreParserFactory.isPreReqString(aPart)) { // We have a PRExxx tag! preString = aPart; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/AbilityLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/AbilityLst.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/AbilityLst.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -143,7 +143,7 @@ while (tok.hasMoreTokens()) { final String key = tok.nextToken(); - if (key.startsWith("PRE")) //$NON-NLS-1$ + if (PreParserFactory.isPreReqString(key)) { final PreParserFactory factory = PreParserFactory.getInstance(); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/DescLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/DescLst.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/DescLst.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -13,6 +13,7 @@ import pcgen.core.PObject; import pcgen.io.EntityEncoder; import pcgen.persistence.lst.GlobalLstToken; +import pcgen.persistence.lst.prereq.PreParserFactory; /** * Handles DESC token processing @@ -67,7 +68,7 @@ while (tok.hasMoreTokens()) { final String token = tok.nextToken(); - if (token.startsWith("PRE")) //$NON-NLS-1$ + if (PreParserFactory.isPreReqString(token)) //$NON-NLS-1$ { desc.addPrerequisites(token, '|'); } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/SaLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/SaLst.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/SaLst.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -65,7 +65,7 @@ String cString = aTok.nextToken(); // Check to see if it's a PRExxx: tag - if (cString.startsWith("PRE") && (cString.indexOf(":") > 0)) + if (PreParserFactory.isPreReqString(cString)) { try { Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/SpelllevelLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/SpelllevelLst.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/SpelllevelLst.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -53,7 +53,7 @@ { final String nameList = tok.nextToken(); - if (nameList.startsWith("PRE") || nameList.startsWith("!PRE")) + if (PreParserFactory.isPreReqString(nameList)) { preList.add(nameList); break; @@ -82,7 +82,7 @@ { final String nameList = tok.nextToken(); - if (nameList.startsWith("PRE") || nameList.startsWith("!PRE")) + if (PreParserFactory.isPreReqString(nameList)) { preList.add(nameList); } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/SpellsLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/SpellsLst.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/SpellsLst.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -71,7 +71,7 @@ { times = token.substring(6); } - else if (token.startsWith("PRE") || token.startsWith("!PRE")) + else if (PreParserFactory.isPreReqString(token)) { try { Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SpellLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SpellLst.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SpellLst.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -60,7 +60,7 @@ { String token = st.nextToken(); - if (token.startsWith("PRE") || token.startsWith("!PRE")) + if (PreParserFactory.isPreReqString(token)) { // check as mixed case. Wouldn't want to // mistake Prestidigitation as a PRE tag. Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java 2007-02-06 04:45:43 UTC (rev 2120) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java 2007-02-06 10:14:36 UTC (rev 2121) @@ -31,7 +31,7 @@ { final String aString = aTok.nextToken().toUpperCase(); - if (aString.startsWith("!PRE") || aString.startsWith("PRE")) + if (PreParserFactory.isPreReqString(aString)) { try { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-02-10 15:58:07
|
Revision: 2134 http://svn.sourceforge.net/pcgen/?rev=2134&view=rev Author: thpr Date: 2007-02-10 07:58:05 -0800 (Sat, 10 Feb 2007) Log Message: ----------- Some simple performance items and cleanup [ 1656814 ] Improve Launch Performance Modified Paths: -------------- Trunk/pcgen/code/src/java/gmgen/pluginmgr/JARClassLoader.java Trunk/pcgen/code/src/java/gmgen/pluginmgr/PluginLoader.java Trunk/pcgen/code/src/java/pcgen/core/Ability.java Modified: Trunk/pcgen/code/src/java/gmgen/pluginmgr/JARClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/pluginmgr/JARClassLoader.java 2007-02-10 07:07:43 UTC (rev 2133) +++ Trunk/pcgen/code/src/java/gmgen/pluginmgr/JARClassLoader.java 2007-02-10 15:58:05 UTC (rev 2134) @@ -55,6 +55,7 @@ import pcgen.util.Logging; import pcgen.util.PCGenCommand; import pcgen.util.PJEP; +import pcgen.util.UnreachableError; /** * A class loader implementation that loads classes from JAR files. @@ -98,16 +99,10 @@ while (entries.hasMoreElements()) { - ZipEntry entry = entries.nextElement(); - String name = entry.getName(); - String lname = name.toLowerCase(); + String name = entries.nextElement().getName(); - if (lname.endsWith(".props") || lname.endsWith(".properties")) + if (name.endsWith(".class")) { - //MiscUtilities.loadProps(zipFile.getInputStream(entry)); - } - else if (name.endsWith(".class")) - { classHash.put(MiscUtilities.fileToClass(name), this); pluginClasses.add(name); @@ -160,6 +155,7 @@ *@exception ClassNotFoundException Didn't find the class we were looking for *@since GMGen 3.3 */ + @Override public Class<?> loadClass(String clazz, boolean resolveIt) throws ClassNotFoundException { @@ -244,8 +240,11 @@ Collections.sort(plugins, new Plugin.PluginComperator()); for ( Plugin pl : plugins ) { - Logging.debugPrint("Starting " + system + " plugin " + pl.getName() + " (version " - + MiscUtilities.buildToVersion(pl.getVersion()) + ")"); + if (Logging.isDebugMode()) + { + Logging.debugPrint("Starting " + system + " plugin " + pl.getName() + " (version " + + MiscUtilities.buildToVersion(pl.getVersion()) + ")"); + } jar.addPlugin(pl); } } @@ -542,15 +541,27 @@ boolean load = true; try { Field f = clazz.getField("LOG_NAME"); - String logName = (String)f.get(pl); + String logName = (String) f.get(pl); String plName = pl.getName(); String plSystem = pl.getPluginSystem(); PreferencesPluginsPanel.addPanel(logName, plName, plSystem); load = SettingsHandler.getGMGenOption(logName + ".Load", true); + } catch (SecurityException e) { + throw new UnreachableError("Access to Class " + clazz + + " should not be prohibited", e); + } catch (IllegalAccessException e) { + throw new UnreachableError("Access to Method LOG_NAME in Class " + + clazz + " should not be prohibited", e); + } catch (NoSuchFieldException e) { + Logging.errorPrint(clazz.getName() + + " does not have LOG_NAME defined, " + + "Plugin class implemented improperly"); + } catch (IllegalArgumentException e) { + Logging.errorPrint(clazz.getName() + + " does not have LOG_NAME defined to " + + "take a Plugin as the argument, " + + "Plugin class implemented improperly"); } - catch(Exception e) { - System.out.println(clazz.getName() + " does not have LOG_NAME defined, Plugin class implemented improperly"); - } return load; } } Modified: Trunk/pcgen/code/src/java/gmgen/pluginmgr/PluginLoader.java =================================================================== --- Trunk/pcgen/code/src/java/gmgen/pluginmgr/PluginLoader.java 2007-02-10 07:07:43 UTC (rev 2133) +++ Trunk/pcgen/code/src/java/gmgen/pluginmgr/PluginLoader.java 2007-02-10 15:58:05 UTC (rev 2134) @@ -181,7 +181,7 @@ loadPlugins(pluginFile); } - if (!plugin.toLowerCase().endsWith(".jar")) + if (!plugin.regionMatches(true, plugin.length() - 4, ".jar", 0, 4)) { continue; } Modified: Trunk/pcgen/code/src/java/pcgen/core/Ability.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2007-02-10 07:07:43 UTC (rev 2133) +++ Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2007-02-10 15:58:05 UTC (rev 2134) @@ -288,7 +288,15 @@ */ public void setMultiples(final String aString) { - multiples = (aString.length() > 0) && (aString.toUpperCase().charAt(0) == 'Y'); + if (aString.length() == 0) + { + multiples = false; + } + else + { + char firstChar = aString.charAt(0); + multiples = firstChar == 'y' || firstChar == 'Y'; + } } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-02-17 03:19:50
|
Revision: 2155 http://svn.sourceforge.net/pcgen/?rev=2155&view=rev Author: thpr Date: 2007-02-16 19:19:47 -0800 (Fri, 16 Feb 2007) Log Message: ----------- [ 1654039 ] UNENCUMBEREDMOVE not working on properly on CLASS line Issue#: 1654039 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-02-17 03:18:59 UTC (rev 2154) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2007-02-17 03:19:47 UTC (rev 2155) @@ -56,6 +56,7 @@ import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.AttackType; import pcgen.util.enumeration.DefaultTriState; +import pcgen.util.enumeration.Load; import pcgen.util.enumeration.Visibility; import pcgen.util.enumeration.VisionType; @@ -146,6 +147,18 @@ private List<LevelProperty<String>> SR = null; /* + * FINALALLCLASSLEVELS The encumberedLoadMove List is level dependent - + * heck, it's in a LevelProperty, so that should be pretty obvious :) + */ + private List<LevelProperty<Load>> encumberedLoadMove = null; + + /* + * FINALALLCLASSLEVELS The encumberedArmorMove List is level dependent - + * heck, it's in a LevelProperty, so that should be pretty obvious :) + */ + private List<LevelProperty<Load>> encumberedArmorMove = null; + + /* * FINALALLCLASSLEVELS Since this seems to allow for class dependent additions of * Domains, this needs to occur in each class level as appropriate. */ @@ -6636,6 +6649,62 @@ public int getKnownSpellsFromSpecialty() { return castInfo == null ? 0 : castInfo.getKnownSpellsFromSpecialty(); } + + @Override + public Load getEncumberedArmorMove() { + LevelProperty<Load> activeLP = null; + + if (encumberedArmorMove != null) { + for (LevelProperty<Load> lp : encumberedArmorMove) { + if (lp.getLevel() > level) { + continue; + } + if (activeLP == null || activeLP.getLevel() < lp.getLevel()) { + activeLP = lp; + continue; + } + } + } + + return activeLP == null ? super.getEncumberedArmorMove() : activeLP + .getObject(); + } + + @Override + public Load getEncumberedLoadMove() { + LevelProperty<Load> activeLP = null; + + if (encumberedLoadMove != null) { + for (LevelProperty<Load> lp : encumberedLoadMove) { + if (lp.getLevel() > level) { + continue; + } + if (activeLP == null || activeLP.getLevel() < lp.getLevel()) { + activeLP = lp; + continue; + } + } + } + + return activeLP == null ? super.getEncumberedLoadMove() : activeLP + .getObject(); + } + + @Override + public void setEncumberedArmorMove(Load load, int lvl) { + if (encumberedArmorMove == null) { + encumberedArmorMove = new ArrayList<LevelProperty<Load>>(); + } + encumberedArmorMove.add(LevelProperty.getLevelProperty(lvl, load)); + } + + @Override + public void setEncumberedLoadMove(Load load, int lvl) { + if (encumberedLoadMove == null) { + encumberedLoadMove = new ArrayList<LevelProperty<Load>>(); + } + encumberedLoadMove.add(LevelProperty.getLevelProperty(lvl, load)); + } // public void removeAutoAbilities(final AbilityCategory aCategory, final int aLevel) // { @@ -6651,4 +6720,6 @@ // } // theAutoAbilities.put(aCategory, aLevel, null); // } + + } Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2007-02-17 03:18:59 UTC (rev 2154) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2007-02-17 03:19:47 UTC (rev 2155) @@ -97,7 +97,7 @@ /** List of associated items for the object */ // TODO Contains strings or FeatMultipleObjects - protected ArrayList<AssociatedChoice<String>> associatedList = null; + private ArrayList<AssociatedChoice<String>> associatedList = null; /** List of Level Abilities for the object */ private List<LevelAbility> levelAbilityList = null; @@ -694,8 +694,9 @@ /** * Set the encumberance due to armor * @param encumberedArmorMove + * @param level FIXME */ - public void setEncumberedArmorMove(Load encumberedArmorMove) + public void setEncumberedArmorMove(Load encumberedArmorMove, int level) { this.encumberedArmorMove = encumberedArmorMove; } @@ -703,8 +704,9 @@ /** * Set the encumberance due to load * @param encumberedLoadMove + * @param level FIXME */ - public void setEncumberedLoadMove(Load encumberedLoadMove) + public void setEncumberedLoadMove(Load encumberedLoadMove, int level) { this.encumberedLoadMove = encumberedLoadMove; } @@ -757,53 +759,6 @@ } /** - * Used to ignore Encumbrance for specified load types - * @param aString - */ - public void setUnencumberedMove(final String aString) - { - this.setEncumberedLoadMove(Load.LIGHT); - this.setEncumberedArmorMove(Load.LIGHT); - - final StringTokenizer st = new StringTokenizer(aString, "|"); - - while (st.hasMoreTokens()) - { - final String loadString = st.nextToken(); - - if (loadString.equalsIgnoreCase("MediumLoad")) - { - this.setEncumberedLoadMove(Load.MEDIUM); - } - else if (loadString.equalsIgnoreCase("HeavyLoad")) - { - this.setEncumberedLoadMove(Load.HEAVY); - } - else if (loadString.equalsIgnoreCase("Overload")) - { - this.setEncumberedLoadMove(Load.OVERLOAD); - } - else if (loadString.equalsIgnoreCase("MediumArmor")) - { - this.setEncumberedArmorMove(Load.MEDIUM); - } - else if (loadString.equalsIgnoreCase("HeavyArmor")) - { - this.setEncumberedArmorMove(Load.OVERLOAD); - } - else if (loadString.equalsIgnoreCase("LightLoad") || loadString.equalsIgnoreCase("LightArmor")) - { - //do nothing, but accept values as valid - } - else - { - ShowMessageDelegate.showMessageDialog("Invalid value of \"" + loadString + "\" for UNENCUMBEREDMOVE in \"" + getDisplayName() + "\".", - "PCGen", MessageType.ERROR); - } - } - } - - /** * Get the count of variables on this object * @return the count of variables on this object */ Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java 2007-02-17 03:18:59 UTC (rev 2154) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java 2007-02-17 03:19:47 UTC (rev 2155) @@ -4,8 +4,13 @@ */ package plugin.lsttokens; +import java.util.StringTokenizer; + import pcgen.core.PObject; +import pcgen.core.utils.MessageType; +import pcgen.core.utils.ShowMessageDelegate; import pcgen.persistence.lst.GlobalLstToken; +import pcgen.util.enumeration.Load; /** * @author djones4 @@ -20,7 +25,45 @@ public boolean parse(PObject obj, String value, int anInt) { - obj.setUnencumberedMove(value); + obj.setEncumberedLoadMove(Load.LIGHT, anInt); + obj.setEncumberedArmorMove(Load.LIGHT, anInt); + + final StringTokenizer st = new StringTokenizer(value, "|"); + + while (st.hasMoreTokens()) + { + final String loadString = st.nextToken(); + + if (loadString.equalsIgnoreCase("MediumLoad")) + { + obj.setEncumberedLoadMove(Load.MEDIUM, anInt); + } + else if (loadString.equalsIgnoreCase("HeavyLoad")) + { + obj.setEncumberedLoadMove(Load.HEAVY, anInt); + } + else if (loadString.equalsIgnoreCase("Overload")) + { + obj.setEncumberedLoadMove(Load.OVERLOAD, anInt); + } + else if (loadString.equalsIgnoreCase("MediumArmor")) + { + obj.setEncumberedArmorMove(Load.MEDIUM, anInt); + } + else if (loadString.equalsIgnoreCase("HeavyArmor")) + { + obj.setEncumberedArmorMove(Load.OVERLOAD, anInt); + } + else if (loadString.equalsIgnoreCase("LightLoad") || loadString.equalsIgnoreCase("LightArmor")) + { + //do nothing, but accept values as valid + } + else + { + ShowMessageDelegate.showMessageDialog("Invalid value of \"" + loadString + "\" for UNENCUMBEREDMOVE in \"" + obj.getDisplayName() + "\".", + "PCGen", MessageType.ERROR); + } + } return true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2007-02-17 03:20:29
|
Revision: 2156 http://svn.sourceforge.net/pcgen/?rev=2156&view=rev Author: thpr Date: 2007-02-16 19:20:29 -0800 (Fri, 16 Feb 2007) Log Message: ----------- [ 1638162 ] Have PROHIBITSPELL allow a direct list of spells Plus some new warning messages for bad tokens Issue#: 1638162 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java Trunk/pcgen/code/src/java/pcgen/core/SpellProhibitor.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/SpellLoader.java Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreHDParser.java Modified: Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2007-02-17 03:19:47 UTC (rev 2155) +++ Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2007-02-17 03:20:29 UTC (rev 2156) @@ -37,6 +37,7 @@ import pcgen.util.Logging; import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; +import pcgen.util.enumeration.Visibility; import java.math.BigDecimal; import java.util.*; @@ -716,14 +717,26 @@ { if ((aString.length() > 0) && (aString.charAt(0) == 'Y')) { + if (!aString.equals("YES")) { + Logging.errorPrint("Warning: Abbreviation " + aString + " will not be valid after 5.12"); + Logging.errorPrint(" Please spell out YES in upper case"); + } equipmentVisible = VISIBLE_YES; } else if ((aString.length() > 0) && (aString.charAt(0) == 'Q')) { + if (!aString.equals("QUALIFY")) { + Logging.errorPrint("Warning: Abbreviation " + aString + " will not be valid after 5.12"); + Logging.errorPrint(" Please spell out QUALIFY in upper case"); + } equipmentVisible = VISIBLE_QUALIFIED; } else { + if (!aString.equals("NO")) { + Logging.errorPrint("Warning: Visibility " + aString + " will not be valid after 5.12"); + Logging.errorPrint(" Please spell out NO in upper case"); + } equipmentVisible = VISIBLE_NO; } } @@ -969,7 +982,7 @@ if ("%CHOICE".equals(getSRFormula()) && (getAssociatedCount() > 0)) { - return Delta.parseInt(associatedList.get(0).toString()); + return Delta.parseInt(getAssociatedObject(0).toString()); } return super.getSR(aPC); Modified: Trunk/pcgen/code/src/java/pcgen/core/SpellProhibitor.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SpellProhibitor.java 2007-02-17 03:19:47 UTC (rev 2155) +++ Trunk/pcgen/code/src/java/pcgen/core/SpellProhibitor.java 2007-02-17 03:20:29 UTC (rev 2156) @@ -102,6 +102,6 @@ } } - return hits == valueList.size(); + return hits == type.getRequiredCount(valueList); } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SpellLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SpellLoader.java 2007-02-17 03:19:47 UTC (rev 2155) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SpellLoader.java 2007-02-17 03:20:29 UTC (rev 2156) @@ -230,12 +230,16 @@ if (j < i) { + Logging.errorPrint("Warning: Close Bracket before Open Bracket in Level List: " + listString); j = listString.length(); } if (i >= 0) { preReqTag = listString.substring(i + 1, j); + if (preReqTag.length() == 0) { + Logging.errorPrint("Warning: Empty Prerequisite in Level List: " + listString); + } listString = listString.substring(0, i); } Modified: Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java 2007-02-17 03:19:47 UTC (rev 2155) +++ Trunk/pcgen/code/src/java/pcgen/util/enumeration/ProhibitedSpellType.java 2007-02-17 03:20:29 UTC (rev 2156) @@ -1,6 +1,9 @@ package pcgen.util.enumeration; import java.util.Collection; +import java.util.Collections; +import java.util.List; + import pcgen.core.spell.Spell; public enum ProhibitedSpellType @@ -12,6 +15,11 @@ { return s.getDescriptorList(); } + @Override + public int getRequiredCount(List<String> l) + { + return l.size(); + } }, DESCRIPTOR("Descriptor") { @@ -20,6 +28,11 @@ { return s.getDescriptorList(); } + @Override + public int getRequiredCount(List<String> l) + { + return l.size(); + } }, SCHOOL("School") { @@ -28,6 +41,11 @@ { return s.getSchools(); } + @Override + public int getRequiredCount(List<String> l) + { + return l.size(); + } }, SUBSCHOOL("SubSchool") { @@ -36,6 +54,24 @@ { return s.getSubschools(); } + @Override + public int getRequiredCount(List<String> l) + { + return l.size(); + } + }, + + SPELL("Spell") { + @Override + public Collection<String> getCheckList(Spell s) + { + return Collections.singletonList(s.getKeyName()); + } + @Override + public int getRequiredCount(List<String> l) + { + return 1; + } }; private final String text; @@ -47,6 +83,8 @@ public abstract Collection<String> getCheckList(Spell s); + public abstract int getRequiredCount(List<String> l); + @Override public String toString() { Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java 2007-02-17 03:19:47 UTC (rev 2155) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/ProhibitspellToken.java 2007-02-17 03:20:29 UTC (rev 2156) @@ -70,7 +70,17 @@ } else { - spellProb.addValue(aValue); + if (type.equals(ProhibitedSpellType.SPELL)) + { + for (String spell : aValue.split(",")) + { + spellProb.addValue(spell); + } + } + else + { + spellProb.addValue(aValue); + } } } } Modified: Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreHDParser.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreHDParser.java 2007-02-17 03:19:47 UTC (rev 2155) +++ Trunk/pcgen/code/src/java/plugin/pretokens/parser/PreHDParser.java 2007-02-17 03:20:29 UTC (rev 2156) @@ -68,6 +68,12 @@ if ((tokens.length == 1) || ((tokens.length == 2) && tokens[1].equals(""))) { + char firstChar = formula.charAt(0); + if (firstChar == '-' || firstChar == '+') { + throw new PersistenceLayerException( + "PREHD must be either 'x+' or 'x-y' where 'x' and 'y' are integers. '" + + formula + "' is not valid "); + } int min = Integer.parseInt(tokens[0]); prereq.setOperand(Integer.toString(min)); @@ -75,6 +81,11 @@ } else if (tokens.length == 2) { + if (formula.indexOf('+') != -1) { + throw new PersistenceLayerException( + "PREHD must be either 'x+' or 'x-y' where 'x' and 'y' are integers. '" + + formula + "' is not valid "); + } int min = Integer.parseInt(tokens[0]); int max = Integer.parseInt(tokens[1]); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <za...@us...> - 2007-02-22 23:02:09
|
Revision: 2192 http://svn.sourceforge.net/pcgen/?rev=2192&view=rev Author: zaister Date: 2007-02-22 15:02:07 -0800 (Thu, 22 Feb 2007) Log Message: ----------- [ 1025212 ] OS tokens for Temporary Bonus Tab items For now, just expanding the TEMPBONUS token to have a DESC subtoken to go along beside NAME. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/plugin/exporttokens/TempBonusToken.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-02-22 22:49:37 UTC (rev 2191) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2007-02-22 23:02:07 UTC (rev 2192) @@ -2471,6 +2471,46 @@ } /** + * Takes all the Temporary Bonuses and Merges them into just the unique + * named bonuses. + * + * @return List of Strings + */ + public List<String> getNamedTempBonusDescList() + { + final List<String> aList = new ArrayList<String>(); + + for (BonusObj aBonus : getTempBonusList()) + { + if (aBonus == null) + { + continue; + } + + if (!aBonus.isApplied()) + { + continue; + } + + final PObject aCreator = (PObject) aBonus.getCreatorObject(); + + if (aCreator == null) + { + continue; + } + + final String aDesc = aCreator.getDescription(); + + if (!aList.contains(aDesc)) + { + aList.add(aDesc); + } + } + + return aList; + } + + /** * @return nonProficiencyPenalty. Searches templates first. */ public int getNonProficiencyPenalty() Modified: Trunk/pcgen/code/src/java/plugin/exporttokens/TempBonusToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/TempBonusToken.java 2007-02-22 22:49:37 UTC (rev 2191) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/TempBonusToken.java 2007-02-22 23:02:07 UTC (rev 2192) @@ -77,6 +77,10 @@ { retString = getNameToken(pc, tempIndex); } + else if ("DESC".equals(subToken)) + { + retString = getDescToken(pc, tempIndex); + } } return retString; @@ -96,4 +100,13 @@ } return pc.getNamedTempBonusList().get(tempIndex); } + + public static String getDescToken(PlayerCharacter pc, int tempIndex) + { + if (tempIndex > pc.getNamedTempBonusDescList().size()) + { + return ""; + } + return pc.getNamedTempBonusDescList().get(tempIndex) + ""; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |