From: <th...@us...> - 2008-06-16 03:04:54
|
Revision: 6673 http://pcgen.svn.sourceforge.net/pcgen/?rev=6673&view=rev Author: thpr Date: 2008-06-15 20:05:01 -0700 (Sun, 15 Jun 2008) Log Message: ----------- More simplification & cleanup of ConcretePrereqObject & PrereqObject Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/cdom/base/CDOMObject.java Trunk/pcgen/code/src/java/pcgen/cdom/base/ConcretePrereqObject.java Trunk/pcgen/code/src/java/pcgen/cdom/base/PrereqObject.java Trunk/pcgen/code/src/java/pcgen/core/Ability.java Trunk/pcgen/code/src/java/pcgen/core/DamageReduction.java Trunk/pcgen/code/src/java/pcgen/core/Description.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/FollowerOption.java Trunk/pcgen/code/src/java/pcgen/core/Kit.java Trunk/pcgen/code/src/java/pcgen/core/KitUtilities.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PCSpell.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/QualifiedObject.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/SpecialAbility.java Trunk/pcgen/code/src/java/pcgen/core/TextProperty.java Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillLanguage.java Trunk/pcgen/code/src/java/pcgen/core/analysis/TemplateSelect.java Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java Trunk/pcgen/code/src/java/pcgen/core/chooser/DomainChoiceManager.java Trunk/pcgen/code/src/java/pcgen/core/chooser/FeatAddChoiceManager.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/levelability/LevelAbilityAbility.java Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityEquipment.java Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilityFeat.java Trunk/pcgen/code/src/java/pcgen/core/npcgen/NPCGenerator.java Trunk/pcgen/code/src/java/pcgen/gui/EqBuilder.java Trunk/pcgen/code/src/java/pcgen/gui/KitSelector.java Trunk/pcgen/code/src/java/pcgen/gui/MainSource.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/filter/FilterFactory.java Trunk/pcgen/code/src/java/pcgen/gui/filter/QualifyFilter.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoAbility.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoClasses.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoDomain.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoEquipping.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoGear.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRaces.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoResources.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSkills.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSpecialAbilities.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTemplates.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityInfoPanel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityModel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/resources/AvailableFollowerModel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/spells/InfoSpellsSubTab.java Trunk/pcgen/code/src/java/pcgen/gui/utils/PObjectNode.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/output/prereq/PrerequisiteWriter.java Trunk/pcgen/code/src/java/pcgen/rules/context/LoadContext.java Trunk/pcgen/code/src/java/plugin/exporttokens/TemplateToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/deity/DomainsToken.java Trunk/pcgen/code/src/test/pcgen/core/EquipmentModifierTest.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/PObjectLoaderTest.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/utils/FeatParserTest.java Modified: Trunk/pcgen/code/src/java/pcgen/cdom/base/CDOMObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/base/CDOMObject.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/cdom/base/CDOMObject.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -444,7 +444,7 @@ } @Override - public Object clone() throws CloneNotSupportedException + public CDOMObject clone() throws CloneNotSupportedException { CDOMObject clone = (CDOMObject) super.clone(); clone.integerChar = new HashMap<IntegerKey, Integer>(integerChar); Modified: Trunk/pcgen/code/src/java/pcgen/cdom/base/ConcretePrereqObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/base/ConcretePrereqObject.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/cdom/base/ConcretePrereqObject.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -23,7 +23,6 @@ */ package pcgen.cdom.base; -import java.io.StringWriter; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -31,20 +30,18 @@ import java.util.Set; import pcgen.base.util.ListSet; -import pcgen.core.PObject; import pcgen.core.PlayerCharacter; import pcgen.core.prereq.PrereqHandler; import pcgen.core.prereq.Prerequisite; import pcgen.core.prereq.PrerequisiteUtilities; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.output.prereq.PrerequisiteWriter; /** - * This class implements support for prerequisites for an object. + * A ConcretePrereqObject is an object that contains a list of Prerequisites. + * This list of Prerequisites is designed to serve as a list of conditions that + * must be met before the PrereqObject can be "used" * - * @author boomer70 <boo...@ya...> - * - * @since 5.11.1 + * ConcretePrereqObject is intended to provide a quick foundation class that + * implements PrereqObject. */ public class ConcretePrereqObject implements Cloneable, PrereqObject { @@ -54,11 +51,12 @@ /** * Tests if the specified PlayerCharacter passes all the prerequisites. * - * @param aPC The <tt>PlayerCharacter</tt> to test. + * @param aPC + * The <tt>PlayerCharacter</tt> to test. * * @return <tt>true</tt> if the PC passes all the prerequisites. */ - public boolean qualifies( final PlayerCharacter aPC ) + public boolean qualifies(final PlayerCharacter aPC) { if (thePrereqs == null) { @@ -69,23 +67,12 @@ } /** - * Get the list of <tt>Prerequesite</tt>s. + * Returns a List of the Prerequisite objects contained in the PrereqObject. + * If the PrereqObject contains no Prerequisites, the return value may be + * null or an empty list, it is implementation-specific. * - * @return An unmodifiable <tt>List</tt> of <tt>Prerequesite</tt>s or <tt> - * null</tt> if no prerequisites have been set. + * @return A List of Prerequesite objects contained in the PrereqObject. */ - public List<Prerequisite> getPreReqList() - { - return getPrerequisiteList(); - } - - /** - * Get the list of <tt>Prerequesite</tt>s. - * - * @return An unmodifiable <tt>List</tt> of <tt>Prerequesite</tt>s or - * <tt> - * null</tt> if no prerequisites have been set. - */ public List<Prerequisite> getPrerequisiteList() { if (thePrereqs == null) @@ -97,23 +84,28 @@ * 5.14 - to be changed once 5.14 code is gone and this can be changed * to return Collection or Set (or perhaps ListSet?) */ - return Collections.unmodifiableList(new ArrayList<Prerequisite>(thePrereqs)); + return Collections.unmodifiableList(new ArrayList<Prerequisite>( + thePrereqs)); } /** * Add a <tt>Prerequesite</tt> to the prereq list with a level qualifier. * - * <p>If the Prerequisite kind is "clear" all the prerequisites - * will be cleared from the list. + * <p> + * If the Prerequisite kind is "clear" all the prerequisites will + * be cleared from the list. * - * @param preReq The <tt>Prerequisite</tt> to add. - * @param levelQualifier A level qualifier. + * @param preReq + * The <tt>Prerequisite</tt> to add. + * @param levelQualifier + * A level qualifier. * * @see pcgen.core.prereq.Prerequisite#setLevelQualifier(int) */ - public final void addPreReq(final Prerequisite preReq, final int levelQualifier) + public final void addPreReq(final Prerequisite preReq, + final int levelQualifier) { - if ( preReq == null ) + if (preReq == null) { return; } @@ -136,14 +128,15 @@ } /** - * Returns true if this object has any prerequisites of the kind that - * is passed in. - * - * @param matchType The kind of Prerequisite to test for. + * Returns true if this object has any prerequisites of the kind that is + * passed in. * - * @return <tt>true</tt> if this object has a prerequisite of the kind that - * is passed in + * @param matchType + * The kind of Prerequisite to test for. * + * @return <tt>true</tt> if this object has a prerequisite of the kind + * that is passed in + * * @see pcgen.core.prereq.Prerequisite#getKind() */ public final boolean hasPreReqTypeOf(final String matchType) @@ -153,7 +146,7 @@ return false; } - for (Prerequisite prereq : getPreReqList()) + for (Prerequisite prereq : getPrerequisiteList()) { if (PrerequisiteUtilities.hasPreReqKindOf(prereq, matchType)) { @@ -165,75 +158,18 @@ } /** - * Returns the pre requesites as an HTML String - * @param aPC - * @return the pre requesites as an HTML String - */ - public final String preReqHTMLStrings(final PlayerCharacter aPC) - { - return PrerequisiteUtilities.preReqHTMLStringsForList(aPC, null, thePrereqs, true); - } - - /** - * Returns the pre requesites as an HTML String with a header - * @param aPC - * @param includeHeader - * @return the pre requesites as an HTML String - */ - public String preReqHTMLStrings(final PlayerCharacter aPC, final boolean includeHeader) - { - return PrerequisiteUtilities.preReqHTMLStringsForList(aPC, null, thePrereqs, includeHeader); - } - - /** - * Returns the pre requesites as an HTML String given an object - * @param aPC - * @param p - * @return the pre requesites as an HTML String given an object - */ - public final String preReqHTMLStrings(final PlayerCharacter aPC, final PObject p) - { - return PrerequisiteUtilities.preReqHTMLStringsForList(aPC, p, thePrereqs, true); - } - - /** - * Returns the prerequisites in "PCC" format. + * Clones this ConcretePrereqObject. This is not a "deep" clone, in that the + * List of Prerequisites is cloned (to allow Prerequisites to be + * added/removed without altering the original or the clone), but the + * Prerequisites contained within the ConcretePrereqObject are not cloned. * - * @return A string in "PCC" format or an empty string. - */ - public String getPCCText() - { - if ( thePrereqs == null ) - { - return Constants.EMPTY_STRING; - } - - final StringWriter writer = new StringWriter(); - for ( final Prerequisite prereq : thePrereqs ) - { - final PrerequisiteWriter prereqWriter = new PrerequisiteWriter(); - writer.write(Constants.PIPE); - try - { - prereqWriter.write(writer, prereq); - } - catch (PersistenceLayerException e) - { - e.printStackTrace(); - } - } - return writer.toString(); - } - - /** * @see java.lang.Object#clone() */ @Override - public Object clone() - throws CloneNotSupportedException + public ConcretePrereqObject clone() throws CloneNotSupportedException { - final ConcretePrereqObject obj = (ConcretePrereqObject)super.clone(); - if ( thePrereqs != null ) + final ConcretePrereqObject obj = (ConcretePrereqObject) super.clone(); + if (thePrereqs != null) { obj.thePrereqs = new ListSet<Prerequisite>(); obj.thePrereqs.addAll(thePrereqs); @@ -242,9 +178,11 @@ } /** - * Adds a <tt>Collection</tt> of <tt>Prerequisite</tt> objects. + * Adds a Collection of Prerequisite objects to the ConcretePrereqObject. * - * @param prereqs A <tt>Collection</tt> of <tt>Prerequisite</tt> objects. + * @param prereqs + * A Collection of Prerequisite objects to added to the + * ConcretePrereqObject. */ public void addAllPrerequisites(final Collection<Prerequisite> prereqs) { @@ -263,44 +201,34 @@ } /** - * Adds an <tt>Array</tt> of <tt>Prerequisite</tt> objects. + * Add a Prerequisite to the ConcretePrereqObject. * - * @param prereqs An <tt>Array</tt> of <tt>Prerequisite</tt> objects. - */ - public void addAllPrerequisites(Prerequisite... prereqs) - { - if (prereqs == null || prereqs.length == 0) - { - return; - } - if (thePrereqs == null) - { - thePrereqs = new ListSet<Prerequisite>(prereqs.length); - } - for (final Prerequisite pre : prereqs) - { - addPrerequisite(pre); - } - } - - /** - * Add a <tt>Prerequesite</tt> to the prereq list with a level qualifier. + * If the Prerequisite kind is CLEAR all the prerequisites will be cleared + * from the list. * - * <p>If the Prerequisite kind is "clear" all the prerequisites - * will be cleared from the list. - * - * @param preReq The <tt>Prerequisite</tt> to add. + * @param prereq + * The Prerequisite to add to the ConcretePrereqObject. */ public void addPrerequisite(Prerequisite preReq) { this.addPreReq(preReq, -1); } + /** + * Remove All Prerequisites contained in the ConcretePrereqObject. + */ public void clearPrerequisiteList() { thePrereqs = null; } + /** + * Returns the number of Prerequisites contained in the + * ConcretePrereqObject. + * + * @return the number of Prerequisites contained in the + * ConcretePrereqObject. + */ public int getPrerequisiteCount() { if (thePrereqs == null) @@ -310,16 +238,31 @@ return thePrereqs.size(); } - public Class<? extends PrereqObject> getReferenceClass() - { - return getClass(); - } - + /** + * Returns true if this ConcretePrereqObject contains any Prerequisites; + * false otherwise. + * + * @return true if this ConcretePrereqObject contains any Prerequisites; + * false otherwise. + */ public boolean hasPrerequisites() { return thePrereqs != null; } + /** + * Returns true if the given PrereqObject contains Prerequisites that are + * equal to the Prerequisites contained within this ConcretePrereqObject. If + * the number of Prerequisites does not match, or if the Prerequisites are + * not equal, this will return false. + * + * @param other + * The PrereqObject for which the Prerequisites will be compared + * to the Prerequisites in this ConcretePrereqObject. + * @return true if the given PrereqObject contains Prerequisites that are + * equal to the Prerequisites contained within this + * ConcretePrereqObject; false otherwise + */ public boolean equalsPrereqObject(PrereqObject other) { if (this == other) Modified: Trunk/pcgen/code/src/java/pcgen/cdom/base/PrereqObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/base/PrereqObject.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/cdom/base/PrereqObject.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -1,5 +1,6 @@ /* * PrereqObject.java Copyright 2006 Aaron Divinsky <boo...@ya...> + * Copyright 2008 Tom Parker <th...@us...> * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free @@ -27,67 +28,60 @@ import pcgen.core.prereq.Prerequisite; /** - * This class implements support for prerequisites for an object. - * - * @author boomer70 <boo...@ya...> - * - * @since 5.11.1 + * A PrereqObject is an object that contains a list of Prerequisites. This list + * of Prerequisites is designed to serve as a list of conditions that must be + * met before the PrereqObject can be "used" */ public interface PrereqObject { - + /** - * Add a <tt>Prerequesite</tt> to the prereq list with a level qualifier. + * Add a Prerequisite to the PrereqObject. * - * <p>If the Prerequisite kind is "clear" all the prerequisites - * will be cleared from the list. + * If the Prerequisite kind is CLEAR all the prerequisites will be cleared + * from the list. * - * @param preReq The <tt>Prerequisite</tt> to add. + * @param prereq + * The Prerequisite to add to the PrereqObject. */ - public void addPrerequisite(Prerequisite preReq); + public void addPrerequisite(Prerequisite prereq); /** - * Adds an <tt>Array</tt> of <tt>Prerequisite</tt> objects. + * Adds a Collection of Prerequisite objects to the PrereqObject. * - * @param prereqs An <tt>Array</tt> of <tt>Prerequisite</tt> objects. + * @param prereqs + * A Collection of Prerequisite objects to added to the + * PrereqObject. */ - public void addAllPrerequisites(Prerequisite... prereqs); + public void addAllPrerequisites(Collection<Prerequisite> prereqs); /** - * Adds a <tt>Collection</tt> of <tt>Prerequisite</tt> objects. + * Returns true if this PrereqObject contains any Prerequisites; false + * otherwise. * - * @param prereqs A <tt>Collection</tt> of <tt>Prerequisite</tt> objects. + * @return true if this PrereqObject contains any Prerequisites; false + * otherwise. */ - public void addAllPrerequisites(Collection<Prerequisite> prereqs); - + public boolean hasPrerequisites(); + /** - * Get the list of <tt>Prerequesite</tt>s. + * Returns a List of the Prerequisite objects contained in the PrereqObject. + * If the PrereqObject contains no Prerequisites, the return value may be + * null or an empty list, it is implementation-specific. * - * @return An unmodifiable <tt>List</tt> of <tt>Prerequesite</tt>s or - * <tt> - * null</tt> if no prerequisites have been set. + * @return A List of Prerequesite objects contained in the PrereqObject. */ public List<Prerequisite> getPrerequisiteList(); /** - * Clear the prerequisite list. + * Remove All Prerequisites contained in the PrereqObject. */ public void clearPrerequisiteList(); /** - * Tests to see if this object has any prerequisites associated with it. + * Returns the number of Prerequisites contained in the PrereqObject. * - * @return <tt>true</tt> if it has prereqs + * @return the number of Prerequisites contained in the PrereqObject. */ - public boolean hasPrerequisites(); - - /** - * Gets the number of prerequisites currently associated. - * - * @return the number of prerequesites - */ public int getPrerequisiteCount(); - - public Class<? extends PrereqObject> getReferenceClass(); - } Modified: Trunk/pcgen/code/src/java/pcgen/core/Ability.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/Ability.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -355,7 +355,7 @@ boolean canBeSelectedBy(final PlayerCharacter pc) { - return PrereqHandler.passesAll(getPreReqList(), pc, this); + return PrereqHandler.passesAll(getPrerequisiteList(), pc, this); } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/DamageReduction.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/DamageReduction.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/DamageReduction.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -689,7 +689,7 @@ //Have to do deep clone of Prereqs to match previous behavior :/ if (hasPrerequisites()) { clone.clearPrerequisiteList(); - for (Prerequisite prereq : getPreReqList()) + for (Prerequisite prereq : getPrerequisiteList()) { clone.addPrerequisite(prereq.clone()); } @@ -711,7 +711,7 @@ result.append(theBypass); final StringWriter writer = new StringWriter(); - for (Prerequisite prereq : getPreReqList()) + for (Prerequisite prereq : getPrerequisiteList()) { if (!includeLevel && "class".equals(prereq.getKind())) { @@ -742,7 +742,7 @@ */ public boolean isForClassLevel(String keyName) { - for (Prerequisite prereq : getPreReqList()) + for (Prerequisite prereq : getPrerequisiteList()) { if (DamageReduction.isPrereqForClassLevel(prereq, keyName)) { Modified: Trunk/pcgen/code/src/java/pcgen/core/Description.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Description.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/Description.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -27,6 +27,8 @@ import pcgen.cdom.base.ConcretePrereqObject; import pcgen.cdom.base.Constants; +import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.output.prereq.PrerequisiteWriter; import pcgen.util.Logging; /** @@ -265,7 +267,6 @@ * * @see pcgen.cdom.base.PrereqObject#getPCCText() */ - @Override public String getPCCText() { final StringBuffer buf = new StringBuffer(); @@ -291,7 +292,20 @@ } } - buf.append(super.getPCCText()); + PrerequisiteWriter prereqWriter = new PrerequisiteWriter(); + try + { + String prerequisiteString = prereqWriter + .getPrerequisiteString(getPrerequisiteList()); + if (prerequisiteString != null) + { + buf.append(prerequisiteString); + } + } + catch (PersistenceLayerException e) + { + Logging.errorPrint("Error writing Prerequisite: " + e); + } return buf.toString(); } Modified: Trunk/pcgen/code/src/java/pcgen/core/Domain.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Domain.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/Domain.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -127,7 +127,7 @@ final String book = pcSpell.getSpellbook(); - if (PrereqHandler.passesAll(pcSpell.getPreReqList(), aPC, this)) + if (PrereqHandler.passesAll(pcSpell.getPrerequisiteList(), aPC, this)) { final List<CharacterSpell> aList = aClass.getSpellSupport() .getCharacterSpell(aSpell, book, -1); Modified: Trunk/pcgen/code/src/java/pcgen/core/Equipment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -3086,7 +3086,7 @@ * @return Description of the Return Value */ public boolean meetsPreReqs(PlayerCharacter currentPC) { - return PrereqHandler.passesAll(this.getPreReqList(), this, currentPC); + return PrereqHandler.passesAll(getPrerequisiteList(), this, currentPC); } /** @@ -3383,7 +3383,7 @@ // if (hasPrerequisites()) { - for (Prerequisite aBonus : getPreReqList()) { + for (Prerequisite aBonus : getPrerequisiteList()) { if ("SIZE".equalsIgnoreCase(aBonus.getKind())) { final int iOldPre = Globals.sizeInt(aBonus.getOperand()); iNewSize += (iOldPre - iOldSize); Modified: Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -128,7 +128,7 @@ if (aBonus.hasPrerequisites()) { newBonus.clearPrerequisiteList(); - for (Prerequisite prereq : aBonus.getPreReqList()) + for (Prerequisite prereq : aBonus.getPrerequisiteList()) { try { @@ -872,7 +872,7 @@ return true; } - for (Prerequisite preReq : getPreReqList()) + for (Prerequisite preReq : getPrerequisiteList()) { if ( "TYPE".equalsIgnoreCase(preReq.getKind()) && Modified: Trunk/pcgen/code/src/java/pcgen/core/FollowerOption.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/FollowerOption.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/FollowerOption.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -131,7 +131,7 @@ { final FollowerOption opt = new FollowerOption( r ); opt.setAdjustment( getAdjustment() ); - opt.addAllPrerequisites(getPreReqList()); + opt.addAllPrerequisites(getPrerequisiteList()); options.add( opt ); } } Modified: Trunk/pcgen/code/src/java/pcgen/core/Kit.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Kit.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/Kit.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -299,7 +299,7 @@ { if (kitVisible == VISIBLE_QUALIFIED) { - final List<Prerequisite> prereqList = getPreReqList(); + final List<Prerequisite> prereqList = getPrerequisiteList(); if (PrereqHandler.passesAll(prereqList, aPC, this)) { @@ -431,7 +431,7 @@ private String getPreReqHTMLStrings(PlayerCharacter aPC) { - return PrerequisiteUtilities.preReqHTMLStringsForList(aPC, this, getPreReqList(), false); + return PrerequisiteUtilities.preReqHTMLStringsForList(aPC, this, getPrerequisiteList(), false); } /** Modified: Trunk/pcgen/code/src/java/pcgen/core/KitUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/KitUtilities.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/KitUtilities.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -99,7 +99,7 @@ Logging.errorPrint("Nonexistant kit: " + kitKey); return; } - if (PrereqHandler.passesAll(aKit.getPreReqList(), aPC, aKit)) + if (PrereqHandler.passesAll(aKit.getPrerequisiteList(), aPC, aKit)) { aList.add(aKit); } Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -542,7 +542,7 @@ new ArrayList<Prerequisite>(); if (bonus.hasPrerequisites()) { - localPreReqList.addAll(bonus.getPreReqList()); + localPreReqList.addAll(bonus.getPrerequisiteList()); } // TODO: This code should be removed after the 5.8 release @@ -2243,7 +2243,7 @@ return false; } - if (!PrereqHandler.passesAll(getPreReqList(), aPC, this)) + if (!PrereqHandler.passesAll(getPrerequisiteList(), aPC, this)) { return false; } @@ -2440,7 +2440,7 @@ // Output the level based DR only for (DamageReduction reduction : getDRList()) { - for (Prerequisite prereq : reduction.getPreReqList()) + for (Prerequisite prereq : reduction.getPrerequisiteList()) { if (DamageReduction.isPrereqForClassLevel(prereq, getKeyName())) { @@ -3743,7 +3743,7 @@ */ public boolean isProhibited(final Spell aSpell, final PlayerCharacter aPC) { - if (!PrereqHandler.passesAll(aSpell.getPreReqList(), aPC, aSpell)) + if (!PrereqHandler.passesAll(aSpell.getPrerequisiteList(), aPC, aSpell)) { return true; } @@ -3946,7 +3946,7 @@ // When loading a character, classes are added before feats, so // this test would always fail on loading if feats are required boolean doReturn = false; - if (!PrereqHandler.passesAll(getPreReqList(), aPC, this)) + if (!PrereqHandler.passesAll(getPrerequisiteList(), aPC, this)) { doReturn = true; if (!bSilent) @@ -4465,7 +4465,7 @@ // for (DamageReduction reduction : getDRList()) { - for (Prerequisite prereq : reduction.getPreReqList()) + for (Prerequisite prereq : reduction.getPrerequisiteList()) { if (DamageReduction.isPrereqForClassLevel(prereq, oldClass)) { @@ -5131,7 +5131,7 @@ for (SubstitutionClass sc : substitutionClassList) { - if (!PrereqHandler.passesAll(sc.getPreReqList(), aPC, this)) + if (!PrereqHandler.passesAll(sc.getPrerequisiteList(), aPC, this)) { continue; } @@ -5249,7 +5249,7 @@ * * STOP THE MAGIC, I want to delete MULTIPREREQs */ - if (!PrereqHandler.passesAll(sc.getPreReqList(), aPC, this)) + if (!PrereqHandler.passesAll(sc.getPrerequisiteList(), aPC, this)) { continue; } @@ -5378,7 +5378,7 @@ * * STOP THE MAGIC, I want to delete MULTIPREREQs */ - if (!PrereqHandler.passesAll(sub.getPreReqList(), aPC, this)) + if (!PrereqHandler.passesAll(sub.getPrerequisiteList(), aPC, this)) { continue; } @@ -6089,7 +6089,7 @@ List<DamageReduction> newDR = new ArrayList<DamageReduction>(); for (DamageReduction reduction : getDRList()) { - for (Prerequisite prereq : reduction.getPreReqList()) + for (Prerequisite prereq : reduction.getPrerequisiteList()) { if (!DamageReduction.isPrereqForClassLevel(prereq, getKeyName()) && !prereq.getOperand().equals(Integer.toString(level)) Modified: Trunk/pcgen/code/src/java/pcgen/core/PCSpell.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCSpell.java 2008-06-16 02:51:10 UTC (rev 6672) +++ Trunk/pcgen/code/src/java/pcgen/core/PCSpell.java 2008-06-16 03:05:01 UTC (rev 6673) @@ -53,7 +53,7 @@ sBuff.append(dcFormula); } - final List<Prerequisite> ... [truncated message content] |
From: <th...@us...> - 2008-06-21 21:41:22
|
Revision: 6784 http://pcgen.svn.sourceforge.net/pcgen/?rev=6784&view=rev Author: thpr Date: 2008-06-21 14:32:33 -0700 (Sat, 21 Jun 2008) Log Message: ----------- UnencumberedMove to new format Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ObjectKey.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/plugin/lsttokens/UnencumberedmoveLst.java Added Paths: ----------- Trunk/pcgen/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ObjectKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ObjectKey.java 2008-06-21 20:13:44 UTC (rev 6783) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ObjectKey.java 2008-06-21 21:32:33 UTC (rev 6784) @@ -49,6 +49,7 @@ import pcgen.core.WeaponProf; import pcgen.core.character.WieldCategory; import pcgen.core.spell.Spell; +import pcgen.util.enumeration.Load; import pcgen.util.enumeration.Visibility; /** @@ -185,6 +186,10 @@ public static final ObjectKey<Category<Ability>> ABILITY_CAT = new ObjectKey<Category<Ability>>(null); + public static final ObjectKey<Load> UNENCUMBERED_LOAD = new ObjectKey<Load>(Load.LIGHT); + + public static final ObjectKey<Load> UNENCUMBERED_ARMOR = new ObjectKey<Load>(Load.LIGHT); + private static CaseInsensitiveMap<ObjectKey<?>> map = null; private final T defaultValue; Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-21 20:13:44 UTC (rev 6783) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-21 21:32:33 UTC (rev 6784) @@ -85,7 +85,6 @@ import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.AttackType; -import pcgen.util.enumeration.Load; /** * <code>PCClass</code>. @@ -126,18 +125,6 @@ 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 This is pretty obvious, as these are already in a * LevelProperty... these go into the PCClassLevel */ @@ -5847,76 +5834,6 @@ } @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)); - } - - @Override public void setMovement(Movement m, int level) { if (movementList == null) Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-21 20:13:44 UTC (rev 6783) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-21 21:32:33 UTC (rev 6784) @@ -74,7 +74,6 @@ import pcgen.util.StringPClassUtil; import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; -import pcgen.util.enumeration.Load; /** * <code>PObject</code><br> @@ -130,11 +129,6 @@ private boolean isNewItem = true; - /** Holds the level of encumberance due to armor for the object */ - private Load encumberedArmorMove = Load.LIGHT; - /** Holds the level of encumberance due to load for the object */ - private Load encumberedLoadMove = Load.LIGHT; - private List<DamageReduction> drList = new ArrayList<DamageReduction>(); private String chooseLanguageAutos = Constants.EMPTY_STRING; @@ -629,44 +623,6 @@ } /** - * Get the encumberance due to armor - * @return the encumberance due to armor - */ - public Load getEncumberedArmorMove() - { - return encumberedArmorMove; - } - - /** - * Get the encumberance due to load - * @return the encumberance due to load - */ - public Load getEncumberedLoadMove() - { - return encumberedLoadMove; - } - - /** - * Set the encumberance due to armor - * @param encumberedArmorMove - * @param level FIXME - */ - public void setEncumberedArmorMove(Load encumberedArmorMove, int level) - { - this.encumberedArmorMove = encumberedArmorMove; - } - - /** - * Set the encumberance due to load - * @param encumberedLoadMove - * @param level FIXME - */ - public void setEncumberedLoadMove(Load encumberedLoadMove, int level) - { - this.encumberedLoadMove = encumberedLoadMove; - } - - /** * Sets the natural weapon equipment items list for this object * @param aList */ Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-06-21 20:13:44 UTC (rev 6783) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-06-21 21:32:33 UTC (rev 6784) @@ -9718,19 +9718,7 @@ */ public boolean ignoreEncumberedArmorMove(final Load armor) { - // Try all possible POBjects - for (PObject pObj : getPObjectList()) - { - if (pObj != null) - { - if (armor.checkLtEq(pObj.getEncumberedArmorMove())) - { - return true; - } - } - } - - return false; + return compareLoad(armor, ObjectKey.UNENCUMBERED_ARMOR); } /** @@ -9743,19 +9731,54 @@ */ public boolean ignoreEncumberedLoadMove(final Load load) { - // Try all possible POBjects - for (PObject pObj : getPObjectList()) + return compareLoad(load, ObjectKey.UNENCUMBERED_LOAD); + } + + private boolean compareLoad(final Load load, ObjectKey<Load> loadKey) + { + Load pcload = cache.get(loadKey); + if (pcload == null) { - if (pObj != null) + pcload = Load.LIGHT; + for (PObject po : getPObjectList()) { - if (load.checkLtEq(pObj.getEncumberedLoadMove())) + if (po != null && !(po instanceof PCClass)) { - return true; + Load poLoad = po.get(loadKey); + if (poLoad != null && pcload.compareTo(poLoad) < 0) + { + pcload = poLoad; + } } } + for (CDOMObject po : getConditionalTemplateObjects()) + { + Load poLoad = po.get(loadKey); + if (poLoad != null && pcload.compareTo(poLoad) < 0) + { + pcload = poLoad; + } + } + for (PCClass cl : classList) + { + Load active = cl.getSafe(loadKey); + for (int i = 0; i < cl.getLevel(); i++) + { + PCClassLevel classLevel = cl.getClassLevel(i); + Load override = classLevel.get(loadKey); + if (override != null) + { + active = override; + } + } + if (pcload.compareTo(active) < 0) + { + pcload = active; + } + } + cache.put(loadKey, pcload); } - - return false; + return pcload.compareTo(load) >= 0; } /** @@ -12679,6 +12702,13 @@ list.add(classLevel); } } + list.addAll(getConditionalTemplateObjects()); + return list; + } + + private List<CDOMObject> getConditionalTemplateObjects() + { + List<CDOMObject> list = new ArrayList<CDOMObject>(); int totalLevels = getTotalLevels(); int totalHitDice = totalHitDice(); for (PCTemplate templ : getTemplateList()) @@ -12713,7 +12743,7 @@ } return list; } - + private List<? extends PObject> getPObjectList() { // Possible object types include: Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java 2008-06-21 20:13:44 UTC (rev 6783) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java 2008-06-21 21:32:33 UTC (rev 6784) @@ -6,69 +6,215 @@ import java.util.StringTokenizer; -import pcgen.core.PObject; +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.base.Constants; +import pcgen.cdom.enumeration.ObjectKey; import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; -import pcgen.persistence.lst.GlobalLstToken; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.AbstractToken; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.util.Logging; import pcgen.util.enumeration.Load; /** * @author djones4 */ -public class UnencumberedmoveLst implements GlobalLstToken +public class UnencumberedmoveLst extends AbstractToken implements + CDOMPrimaryToken<CDOMObject> { - /* - * FIXME Template's LevelToken needs adjustment before this can be converted - * to the new syntax, since this is level-dependent - */ - + @Override public String getTokenName() { return "UNENCUMBEREDMOVE"; } - public boolean parse(PObject obj, String value, int anInt) + public boolean parse(LoadContext context, CDOMObject obj, String value) { - obj.setEncumberedLoadMove(Load.LIGHT, anInt); - obj.setEncumberedArmorMove(Load.LIGHT, anInt); - - final StringTokenizer st = new StringTokenizer(value, "|"); - - while (st.hasMoreTokens()) + if (isEmpty(value) || hasIllegalSeparator('|', value)) { - final String loadString = st.nextToken(); - + return false; + } + + StringTokenizer tok = new StringTokenizer(value, Constants.PIPE); + + boolean hasArmor = false; + boolean hasMove = false; + + Load loadMove = Load.LIGHT; + Load loadArmor = Load.LIGHT; + + while (tok.hasMoreTokens()) + { + String loadString = tok.nextToken(); if (loadString.equalsIgnoreCase("MediumLoad")) { - obj.setEncumberedLoadMove(Load.MEDIUM, anInt); + if (!validateOnlyMove(hasMove)) + { + return false; + } + loadMove = Load.MEDIUM; + hasMove = true; } else if (loadString.equalsIgnoreCase("HeavyLoad")) { - obj.setEncumberedLoadMove(Load.HEAVY, anInt); + if (!validateOnlyMove(hasMove)) + { + return false; + } + loadMove = Load.HEAVY; + hasMove = true; } else if (loadString.equalsIgnoreCase("Overload")) { - obj.setEncumberedLoadMove(Load.OVERLOAD, anInt); + if (!validateOnlyMove(hasMove)) + { + return false; + } + loadMove = Load.OVERLOAD; + hasMove = true; } else if (loadString.equalsIgnoreCase("MediumArmor")) { - obj.setEncumberedArmorMove(Load.MEDIUM, anInt); + if (!validateOnlyArmor(hasArmor)) + { + return false; + } + loadArmor = Load.MEDIUM; + hasArmor = true; } else if (loadString.equalsIgnoreCase("HeavyArmor")) { - obj.setEncumberedArmorMove(Load.OVERLOAD, anInt); + if (!validateOnlyArmor(hasArmor)) + { + return false; + } + loadArmor = Load.OVERLOAD; + hasArmor = true; } - else if (loadString.equalsIgnoreCase("LightLoad") || loadString.equalsIgnoreCase("LightArmor")) + else if (loadString.equalsIgnoreCase("LightLoad")) { - //do nothing, but accept values as valid + if (!validateOnlyMove(hasMove)) + { + return false; + } + // do nothing, but accept values as valid } + else if (loadString.equalsIgnoreCase("LightArmor")) + { + if (!validateOnlyMove(hasMove)) + { + return false; + } + // do nothing, but accept values as valid + } else { - ShowMessageDelegate.showMessageDialog("Invalid value of \"" + loadString + "\" for UNENCUMBEREDMOVE in \"" + obj.getDisplayName() + "\".", - "PCGen", MessageType.ERROR); + ShowMessageDelegate.showMessageDialog("Invalid value of \"" + + loadString + "\" for UNENCUMBEREDMOVE in \"" + + obj.getDisplayName() + "\".", "PCGen", + MessageType.ERROR); + return false; } } + context.getObjectContext().put(obj, ObjectKey.UNENCUMBERED_LOAD, + loadMove); + context.getObjectContext().put(obj, ObjectKey.UNENCUMBERED_ARMOR, + loadArmor); return true; } + + private boolean validateOnlyArmor(boolean hasArmor) + { + if (hasArmor) + { + Logging.errorPrint("Encountered Second Armor Load Type in " + + getTokenName() + " this is not valid."); + } + return !hasArmor; + } + + private boolean validateOnlyMove(boolean hasMove) + { + if (hasMove) + { + Logging.errorPrint("Encountered Second Move Load Type in " + + getTokenName() + " this is not valid."); + } + return !hasMove; + } + + public String[] unparse(LoadContext context, CDOMObject obj) + { + Load load = context.getObjectContext().getObject(obj, + ObjectKey.UNENCUMBERED_LOAD); + Load at = context.getObjectContext().getObject(obj, + ObjectKey.UNENCUMBERED_ARMOR); + if (load == null && at == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + boolean needsLight = false; + if (load != null) + { + if (Load.OVERLOAD.equals(load)) + { + sb.append("Overload"); + } + else if (Load.HEAVY.equals(load)) + { + sb.append("HeavyLoad"); + } + else if (Load.MEDIUM.equals(load)) + { + sb.append("MediumLoad"); + } + else if (Load.LIGHT.equals(load)) + { + needsLight = true; + } + else + { + context.addWriteMessage(getTokenName() + + " encountered unknown Movement Load: " + load); + return null; + } + } + if (at == null || Load.LIGHT.equals(at)) + { + if (needsLight) + { + sb.append("LightLoad"); + } + } + else + { + if (sb.length() != 0) + { + sb.append(Constants.PIPE); + } + if (Load.OVERLOAD.equals(at)) + { + sb.append("HeavyArmor"); + } + else if (Load.MEDIUM.equals(at)) + { + sb.append("MediumArmor"); + } + else + { + context.addWriteMessage(getTokenName() + + " encountered invalid Armor Load: " + load); + return null; + } + } + return new String[] { sb.toString() }; + } + + public Class<CDOMObject> getTokenClass() + { + return CDOMObject.class; + } } Added: Trunk/pcgen/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java (rev 0) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java 2008-06-21 21:32:33 UTC (rev 6784) @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2007 Tom Parker <th...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package plugin.lsttokens; + +import org.junit.Test; + +import pcgen.cdom.base.CDOMObject; +import pcgen.core.PCTemplate; +import pcgen.persistence.PersistenceLayerException; +import pcgen.rules.persistence.CDOMLoader; +import pcgen.rules.persistence.CDOMTokenLoader; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import plugin.lsttokens.testsupport.AbstractGlobalTokenTestCase; + +public class UnencumberedmoveLstTest extends AbstractGlobalTokenTestCase +{ + + static CDOMPrimaryToken<CDOMObject> token = new UnencumberedmoveLst(); + static CDOMTokenLoader<PCTemplate> loader = new CDOMTokenLoader<PCTemplate>( + PCTemplate.class); + + @Override + public CDOMLoader<PCTemplate> getLoader() + { + return loader; + } + + @Override + public Class<PCTemplate> getCDOMClass() + { + return PCTemplate.class; + } + + @Override + public CDOMPrimaryToken<CDOMObject> getToken() + { + return token; + } + + @Test + public void testInvalidInputPipeOnly() throws PersistenceLayerException + { + assertFalse(parse("|")); + assertNoSideEffects(); + } + + @Test + public void testInvalidInputRandomString() throws PersistenceLayerException + { + assertFalse(parse("String")); + assertNoSideEffects(); + } + + @Test + public void testInvalidInputEndPipe() throws PersistenceLayerException + { + assertFalse(parse("HeavyLoad|")); + assertNoSideEffects(); + } + + @Test + public void testInvalidInputStartPipe() throws PersistenceLayerException + { + assertFalse(parse("|HeavyLoad")); + assertNoSideEffects(); + } + + @Test + public void testInvalidInputDoublePipe() throws PersistenceLayerException + { + assertFalse(parse("HeavyLoad||HeavyArmor")); + assertNoSideEffects(); + } + + @Test + public void testInvalidInputDoubleLoad() throws PersistenceLayerException + { + assertFalse(parse("HeavyLoad|MediumLoad")); + assertNoSideEffects(); + } + + @Test + public void testInvalidInputDoubleArmor() throws PersistenceLayerException + { + assertFalse(parse("MediumArmor|HeavyArmor")); + assertNoSideEffects(); + } + + @Test + public void testValidInputDoubleArmor() throws PersistenceLayerException + { + assertTrue(parse("LightArmor")); + } + + @Test + public void testRoundRobinLightLoad() throws PersistenceLayerException + { + runRoundRobin("LightLoad"); + } + + @Test + public void testRoundRobinArmor() throws PersistenceLayerException + { + runRoundRobin("HeavyArmor"); + } + + @Test + public void testRoundRobinMediumLoad() throws PersistenceLayerException + { + runRoundRobin("MediumLoad"); + } + + @Test + public void testRoundRobinOverload() throws PersistenceLayerException + { + runRoundRobin("Overload"); + } + + @Test + public void testRoundRobinHeavyLoad() throws PersistenceLayerException + { + runRoundRobin("HeavyLoad"); + } + + @Test + public void testRoundRobinLoadArmor() throws PersistenceLayerException + { + runRoundRobin("HeavyLoad|MediumArmor"); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-06-22 10:35:28
|
Revision: 6783 http://pcgen.svn.sourceforge.net/pcgen/?rev=6783&view=rev Author: thpr Date: 2008-06-21 13:13:44 -0700 (Sat, 21 Jun 2008) Log Message: ----------- This is the first Global level-based token conversion (VisionLst) This sets up a reusable caching infrastructure in PlayerCharacter (ObjectCache) Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/Race.java Trunk/pcgen/code/src/java/pcgen/core/Vision.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/plugin/lsttokens/VisionLst.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreVisionTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/cdom/inst/ObjectCache.java Trunk/pcgen/code/src/java/pcgen/cdom/list/VisionList.java Trunk/pcgen/code/src/utest/plugin/lsttokens/VisionLstTest.java Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -47,6 +47,7 @@ import pcgen.core.SpecialAbility; import pcgen.core.SpecialProperty; import pcgen.core.SpellProhibitor; +import pcgen.core.Vision; import pcgen.core.WeaponProf; import pcgen.core.bonus.BonusObj; import pcgen.persistence.lst.CampaignSourceEntry; @@ -192,6 +193,7 @@ public static final ListKey<CDOMReference<PCTemplate>> TEMPLATE_ADDCHOICE = new ListKey<CDOMReference<PCTemplate>>(); public static final ListKey<CDOMReference<PCTemplate>> TEMPLATE = new ListKey<CDOMReference<PCTemplate>>(); public static final ListKey<CDOMReference<PCTemplate>> REMOVE_TEMPLATES = new ListKey<CDOMReference<PCTemplate>>(); + public static final ListKey<Vision> VISION_CACHE = new ListKey<Vision>(); /** Private constructor to prevent instantiation of this class */ private ListKey() { Added: Trunk/pcgen/code/src/java/pcgen/cdom/inst/ObjectCache.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/inst/ObjectCache.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/cdom/inst/ObjectCache.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -0,0 +1,20 @@ +package pcgen.cdom.inst; + +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.enumeration.ListKey; + +public class ObjectCache extends CDOMObject +{ + + @Override + public boolean isType(String str) + { + return false; + } + + public void initializeListFor(ListKey<?> lk) + { + listChar.initializeListFor(lk); + } + +} Added: Trunk/pcgen/code/src/java/pcgen/cdom/list/VisionList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/list/VisionList.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/cdom/list/VisionList.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -0,0 +1,22 @@ +package pcgen.cdom.list; + +import pcgen.cdom.base.CDOMListObject; +import pcgen.core.Vision; + +public class VisionList extends CDOMListObject<Vision> +{ + + public Class<Vision> getListClass() + { + return Vision.class; + } + + @Override + public boolean isType(String str) + { + return false; + } + + // No additional Functionality :) + +} Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -38,6 +38,7 @@ import pcgen.base.formula.Formula; import pcgen.base.lang.StringUtil; import pcgen.base.util.DoubleKeyMap; +import pcgen.cdom.base.AssociatedPrereqObject; import pcgen.cdom.base.CDOMListObject; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.base.ChoiceSet; @@ -85,7 +86,6 @@ import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.AttackType; import pcgen.util.enumeration.Load; -import pcgen.util.enumeration.VisionType; /** * <code>PCClass</code>. @@ -240,12 +240,6 @@ // really working properly /* - * 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; - - /* * 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 @@ -1767,61 +1761,7 @@ } } - /** - * we over ride the PObject setVision() function to keep track of what - * levels this VISION: tag should take effect - * - * @param aString - * @param aPC - */ /* - * 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) - { - if (visionList == null) - { - visionList = new ArrayList<LevelProperty<Vision>>(); - } - visionList.add(LevelProperty.getLevelProperty(aLevel, vis)); - } - - /* - * FINALPCCLASSONLY This is an editor and loader requirement, therefore - * PCClass only - */ - @Override - public void clearVisionList() - { - if (visionList != null) - { - visionList.clear(); - } - } - - /* - * FINALPCCLASSONLY This is an editor and loader requirement, therefore - * PCClass only - */ - @Override - public boolean removeVisionType(VisionType type) - { - if (visionList == null) - { - return false; - } - for (LevelProperty<Vision> lp : visionList) - { - if (lp.getObject().getType().equals(type)) - { - return visionList.remove(lp); - } - } - return false; - } - - /* * PCCLASSLEVELONLY This calculation is dependent upon the class level * and is therefore appropriate only for PCClassLevel */ @@ -2598,47 +2538,6 @@ } /** - * 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 - */ - /* - * 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(); - if (visionList != null) - { - if (returnList == null) - { - returnList = new ArrayList<Vision>(); - } - for (LevelProperty<Vision> vis : visionList) - { - if (vis.getLevel() <= level) - { - returnList.add(vis.getObject()); - } - } - } - - return returnList; - } - - /** * Sets qualified BonusObj's to "active" * * @param aPC @@ -5699,9 +5598,14 @@ SR = new ArrayList<LevelProperty<String>>(otherClass.SR); } - if (otherClass.vision != null) + for (CDOMReference<Vision> ref : otherClass + .getSafeListMods(Vision.VISIONLIST)) { - vision = otherClass.vision; + for (AssociatedPrereqObject apo : otherClass.getListAssociations( + Vision.VISIONLIST, ref)) + { + putToList(Vision.VISIONLIST, ref, apo); + } } if (otherClass instanceof SubClass) Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -75,7 +75,6 @@ import pcgen.util.chooser.ChooserFactory; import pcgen.util.chooser.ChooserInterface; import pcgen.util.enumeration.Load; -import pcgen.util.enumeration.VisionType; /** * <code>PObject</code><br> @@ -109,11 +108,6 @@ private SourceEntry theSource = new SourceEntry(); - /** - * A map of vision types associated with the object, - * Key: vision type, Value: vision range. - */ - protected List<Vision> vision = null; private HashMap<String, String> pluginDataMap = new HashMap<String, String>(); /** The Non-internationalized name to use to refer to this object. */ @@ -1108,52 +1102,6 @@ } /** - * Takes a string of the form: - * Darkvision (60')|Low-light - * and builds a hashMap for this object. - * It also adds the type (such as Darkvision) to a Global hashMap - * @param aString - * @param aPC - */ - public void addVision(Vision v) - { - //CONSIDER Need null check? - if (vision == null) { - vision = new ArrayList<Vision>(); - } - vision.add(v); - } - - public void clearVisionList() { - if (vision != null) - { - vision.clear(); - } - } - - public boolean removeVisionType(VisionType type) { - if (vision == null) { - return false; - } - for (Vision vis : vision) { - if (vis.getType().equals(type)) { - return vision.remove(vis); - } - } - return false; - } - - /** - * Retrieve the vision types associated with the object. - * - * @return List of Vision objects associated with the object. - */ - public List<Vision> getVision() - { - return vision; - } - - /** * Adds Weapons/Armor/Shield names/types to new Proficiency mapping * * @param aString is a list of equipment and new Profs @@ -1297,8 +1245,6 @@ retVal.bonusMap = new HashMap<String, String>(bonusMap); } - retVal.vision = vision; - if ((levelAbilityList != null) && !levelAbilityList.isEmpty()) { retVal.levelAbilityList = new ArrayList<LevelAbility>(); @@ -2839,28 +2785,6 @@ txt.append("\tSR:").append(SR); } - if ((vision != null) && (vision.size() != 0)) - { - final StringBuffer sb = new StringBuffer(); - - for (Vision vis : vision) - { - if (!"0".equals(vis.getDistance())) - { - if (sb.length() > 0) - { - sb.append('|'); - } - sb.append(vis); - } - } - - if (sb.length() > 0) - { - txt.append("\tVISION:").append(sb.toString()); - } - } - if (getMyTypeCount() != 0) { txt.append('\t').append(Constants.s_TAG_TYPE).append(getType()); Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -77,6 +77,8 @@ import pcgen.cdom.enumeration.SkillCost; import pcgen.cdom.enumeration.StringKey; import pcgen.cdom.inst.EquipmentHead; +import pcgen.cdom.inst.ObjectCache; +import pcgen.cdom.inst.PCClassLevel; import pcgen.cdom.reference.CDOMSingleRef; import pcgen.core.Ability.Nature; import pcgen.core.analysis.SkillCostCalc; @@ -135,6 +137,8 @@ public static final int MONKBONUS = 4; private static String lastVariable = null; + private ObjectCache cache = new ObjectCache(); + // List of Armor Proficiencies private final List<String> armorProfList = new ArrayList<String>(); @@ -1269,6 +1273,7 @@ { cachedWeaponProfs = null; serial++; + cache = new ObjectCache(); getVariableProcessor().setSerial(serial); setAggregateAbilitiesStable(null, false); } @@ -7634,41 +7639,67 @@ public List<Vision> getVisionList() { - List<Vision> visionList = new ArrayList<Vision>(); - - for (PObject pObj : getPObjectList()) + if (!cache.containsListFor(ListKey.VISION_CACHE)) { - if (pObj != null) + cache.initializeListFor(ListKey.VISION_CACHE); + Map<VisionType, Integer> map = new HashMap<VisionType, Integer>(); + for (CDOMObject cdo : getCDOMObjectList()) { - visionList = - addStringToVisionList(visionList, pObj.getVision()); + Collection<CDOMReference<Vision>> mods = cdo + .getListMods(Vision.VISIONLIST); + if (mods == null) + { + continue; + } + for (CDOMReference<Vision> ref : mods) + { + Collection<AssociatedPrereqObject> assoc = cdo + .getListAssociations(Vision.VISIONLIST, ref); + for (AssociatedPrereqObject apo : assoc) + { + if (PrereqHandler.passesAll(apo.getPrerequisiteList(), + this, null)) + { + for (Vision v : ref.getContainedObjects()) + { + VisionType visType = v.getType(); + int a = getVariableValue(v.getDistance(), "") + .intValue(); + Integer current = map.get(visType); + if (current == null || current < a) + { + map.put(visType, a); + } + } + } + } + } } - } - // parse through the global list of vision tags and see - // if this PC has any BONUS:VISION tags which will create - // a new visionMap entry - for (VisionType vType : VisionType.getAllVisionTypes()) - { - final int aVal = (int) getTotalBonusTo("VISION", vType.toString()); + /* + * parse through the global list of vision tags and see if this PC + * has any BONUS:VISION tags which will create a new visionMap + * entry, and add any BONUS to existing entries in the map + */ + for (VisionType vType : VisionType.getAllVisionTypes()) + { + final int aVal = (int) getTotalBonusTo("VISION", vType + .toString()); - if (aVal > 0) + if (aVal > 0) + { + Integer current = map.get(vType); + map.put(vType, aVal + (current == null ? 0 : current)); + } + } + TreeSet<Vision> set = new TreeSet<Vision>(); + for (Map.Entry<VisionType, Integer> me : map.entrySet()) { - // add a 0 value, as the bonus is added - // in the addStringToVisionMap() routine - final List<Vision> newList = new ArrayList<Vision>(); - newList.add(new Vision(vType, "0")); - visionList = addStringToVisionList(visionList, newList); + set.add(new Vision(me.getKey(), me.getValue().toString())); } + cache.addAllToListFor(ListKey.VISION_CACHE, set); } - - // CONSIDER Is this sort really necessary? - if (visionList.size() > 1) - { - Collections.sort(visionList); - } - - return visionList; + return cache.getListFor(ListKey.VISION_CACHE); } public String getVision() @@ -12373,59 +12404,6 @@ setDirty(true); } - /** - * create a map of key (vision-type string) and values (int) - * - * @param visionList - * @param addList - * @return Map - */ - private List<Vision> addStringToVisionList(final List<Vision> visionList, - final List<Vision> addList) - { - if ((addList == null) || (addList.size() == 0)) - { - return visionList; - } - - for (Vision vis : addList) - { - final VisionType visType = vis.getType(); - if (!vis.qualifies(this)) - { - continue; - } - Vision foundVision = null; - for (Vision baseVis : visionList) - { - if (baseVis.getType() == visType) - { - foundVision = baseVis; - break; - } - } - - int a = getVariableValue(vis.getDistance(), "").intValue(); - // Add any bonuses to new value - a += (int) getTotalBonusTo("VISION", visType.toString()); - - if (foundVision == null) - { - visionList.add(new Vision(visType, String.valueOf(a))); - } - else - { - if (a > Integer.parseInt(foundVision.getDistance())) - { - visionList.remove(foundVision); - visionList.add(new Vision(visType, String.valueOf(a))); - } - } - } - - return visionList; - } - private void setStableAggregateFeatList(final List<Ability> aFeatList) { stableAggregateFeatList = aFeatList; @@ -12683,6 +12661,59 @@ return lvl; } + private List<? extends CDOMObject> getCDOMObjectList() + { + List<CDOMObject> list = new ArrayList<CDOMObject>(); + for (PObject po : getPObjectList()) + { + if (po != null) + { + list.add(po); + } + } + for (PCClass cl : classList) + { + for (int i = 0; i < cl.getLevel(); i++) + { + PCClassLevel classLevel = cl.getClassLevel(i); + list.add(classLevel); + } + } + int totalLevels = getTotalLevels(); + int totalHitDice = totalHitDice(); + for (PCTemplate templ : getTemplateList()) + { + for (PCTemplate rlt : templ.getSafeListFor(ListKey.REPEATLEVEL_TEMPLATES)) + { + for (PCTemplate lt : rlt.getSafeListFor(ListKey.LEVEL_TEMPLATES)) + { + if (lt.get(IntegerKey.LEVEL) <= totalLevels) + { + list.add(lt); + } + } + } + + for (PCTemplate lt : templ.getSafeListFor(ListKey.LEVEL_TEMPLATES)) + { + if (lt.get(IntegerKey.LEVEL) <= totalLevels) + { + list.add(lt); + } + } + + for (PCTemplate lt : templ.getSafeListFor(ListKey.HD_TEMPLATES)) + { + if (lt.get(IntegerKey.HD_MAX) <= totalHitDice + && lt.get(IntegerKey.HD_MIN) >= totalHitDice) + { + list.add(lt); + } + } + } + return list; + } + private List<? extends PObject> getPObjectList() { // Possible object types include: Modified: Trunk/pcgen/code/src/java/pcgen/core/Race.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Race.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/java/pcgen/core/Race.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -93,26 +93,27 @@ public String getDisplayVision(final PlayerCharacter aPC) { - if (vision == null) + if (aPC == null) { return ""; } - - if (aPC == null) + Collection<CDOMReference<Vision>> mods = getListMods(Vision.VISIONLIST); + if (mods == null) { return ""; } - final StringBuffer visionString = new StringBuffer(25); - - for (Vision vis : vision) + StringBuilder visionString = new StringBuilder(25); + for (CDOMReference<Vision> ref : mods) { - if (visionString.length() > 0) + for (Vision v : ref.getContainedObjects()) { - visionString.append(';'); + if (visionString.length() > 0) + { + visionString.append(';'); + } + visionString.append(v.toString(aPC)); } - - visionString.append(vis.toString(aPC)); } return visionString.toString(); Modified: Trunk/pcgen/code/src/java/pcgen/core/Vision.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Vision.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/java/pcgen/core/Vision.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -22,17 +22,16 @@ */ package pcgen.core; -import java.util.StringTokenizer; - +import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.CDOMReference; -import pcgen.cdom.base.ConcretePrereqObject; import pcgen.cdom.list.VisionList; import pcgen.cdom.reference.CDOMDirectSingleRef; import pcgen.util.enumeration.VisionType; -public class Vision extends ConcretePrereqObject implements Comparable<Vision> { +public class Vision extends CDOMObject implements Comparable<Vision> { - public static final VisionList VISIONLIST = new VisionList(); + public static final CDOMReference<VisionList> VISIONLIST = new CDOMDirectSingleRef<VisionList>( + new VisionList()); private final VisionType visionType; @@ -56,7 +55,14 @@ @Override public String toString() { - return getLSTformat(); + try + { + return toString(Integer.parseInt(distance)); + } + catch (NumberFormatException e) + { + return visionType + " (" + distance + ")"; + } } private String toString(int dist) { @@ -171,15 +177,17 @@ return new Vision(VisionType.getVisionType(type), distance); } - public String getLSTformat() + @Override + public boolean isType(String str) { - try - { - return toString(Integer.parseInt(distance)); - } - catch (NumberFormatException e) - { - return visionType + " (" + distance + ")"; - } + return false; } + + @Override + public String getKeyName() + { + return toString(); + } + + } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -727,11 +727,13 @@ cm.setMovementTypes(pnlMovement.getMoveTypes()); thisRace.setMovement(cm, -9); - thisRace.clearVisionList(); + thisRace.removeAllFromList(Vision.VISIONLIST); List<Vision> visionList = pnlVision.getVision(); for (Vision vis : visionList) { - thisRace.addVision(vis); + thisRace.putToList(Vision.VISIONLIST, + new CDOMDirectSingleRef<Vision>(vis), + new SimpleAssociatedObject()); } thisRace.setNaturalWeapons(pnlNaturalAttacks.getNaturalWeapons()); @@ -880,11 +882,13 @@ cmv.setMoveRatesFlag(pnlMovement.getMoveRateType()); thisPCTemplate.setMovement(cmv, -9); - thisPCTemplate.clearVisionList(); + thisPCTemplate.removeAllFromList(Vision.VISIONLIST); List<Vision> tplVisionList = pnlVision.getVision(); for (Vision vis : tplVisionList) { - thisPCTemplate.addVision(vis); + thisPCTemplate.putToList(Vision.VISIONLIST, + new CDOMDirectSingleRef<Vision>(vis), + new SimpleAssociatedObject()); } // @@ -1608,7 +1612,12 @@ // // Populate the vision panel // - vision = thisPObject.getVision(); + vision = new ArrayList<Vision>(); + for (CDOMReference<Vision> ref : thisPObject + .getSafeListMods(Vision.VISIONLIST)) + { + vision.addAll(ref.getContainedObjects()); + } visionValues = buildVisionValues(vision); pnlVision.setSelectedList(visionValues); @@ -1975,7 +1984,12 @@ // // Populate the vision panel // - vision = thisPObject.getVision(); + vision = new ArrayList<Vision>(); + for (CDOMReference<Vision> ref : thisPObject + .getSafeListMods(Vision.VISIONLIST)) + { + vision.addAll(ref.getContainedObjects()); + } visionValues = buildVisionValues(vision); pnlVision.setSelectedList(visionValues); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/VisionLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/VisionLst.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/VisionLst.java 2008-06-21 20:13:44 UTC (rev 6783) @@ -5,130 +5,177 @@ package plugin.lsttokens; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.StringTokenizer; +import java.util.TreeSet; -import pcgen.core.PCClass; -import pcgen.core.PObject; +import pcgen.base.lang.StringUtil; +import pcgen.base.util.HashMapToList; +import pcgen.base.util.MapToList; +import pcgen.cdom.base.AssociatedPrereqObject; +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.base.CDOMReference; +import pcgen.cdom.base.Constants; +import pcgen.cdom.reference.CDOMDirectSingleRef; +import pcgen.cdom.reference.ReferenceUtilities; import pcgen.core.Vision; import pcgen.core.prereq.Prerequisite; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.GlobalLstToken; -import pcgen.persistence.lst.prereq.PreParserFactory; -import pcgen.util.enumeration.VisionType; +import pcgen.rules.context.AssociatedChanges; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.AbstractToken; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.util.Logging; /** * <code>VisionLst</code> handles the processing of the VISION tag in LST * code. * - * Last Editor: $Author$ - * Last Edited: $Date$ + * Last Editor: $Author$ Last Edited: $Date: 2008-06-15 22:14:51 -0400 + * (Sun, 15 Jun 2008) $ * * @author Devon Jones * @version $Revision$ */ -public class VisionLst implements GlobalLstToken +public class VisionLst extends AbstractToken implements + CDOMPrimaryToken<CDOMObject> { - /* - * FIXME Template's LevelToken needs adjustment before this can be converted - * to the new syntax, since this is level-dependent - */ - /** * @see pcgen.persistence.lst.LstToken#getTokenName() */ + @Override public String getTokenName() { return "VISION"; } - /** - * @see pcgen.persistence.lst.GlobalLstToken#parse(pcgen.core.PObject, - * java.lang.String, int) - */ - public boolean parse(PObject obj, String value, int anInt) throws PersistenceLayerException + public boolean parse(LoadContext context, CDOMObject obj, String value) { - final StringTokenizer aTok = new StringTokenizer(value, "|"); - final List<Prerequisite> prereqs = new ArrayList<Prerequisite>(); - final List<Vision> visions = new ArrayList<Vision>(); - + StringTokenizer aTok = new StringTokenizer(value, Constants.PIPE); + + List<Vision> list = new ArrayList<Vision>(); while (aTok.hasMoreTokens()) { String visionString = aTok.nextToken(); if (".CLEAR".equals(visionString)) { - obj.clearVisionList(); + context.getListContext().removeAllFromList(getTokenName(), obj, + Vision.VISIONLIST); continue; } - if (visionString.startsWith("PRE")) + if (visionString.startsWith(".CLEAR.")) { - final PreParserFactory factory = PreParserFactory.getInstance(); - final Prerequisite prereq = factory.parse(visionString); - prereqs.add(prereq); - } - else - { - if (visionString.indexOf(',') >= 0) + try { - return false; + Vision vis = Vision.getVision(visionString.substring(7)); + context.getListContext().removeFromList(getTokenName(), + obj, Vision.VISIONLIST, + new CDOMDirectSingleRef<Vision>(vis)); } - - Vision vis = null; - if (visionString.startsWith(".CLEAR.")) + catch (IllegalArgumentException e) { - obj.removeVisionType(VisionType.getVisionType(visionString - .substring(7))); + Logging.addParseMessage(Logging.LST_ERROR, + "Bad Syntax for Cleared Vision in " + + getTokenName()); + Logging.addParseMessage(Logging.LST_ERROR, e.getMessage()); + return false; } - else if (visionString.startsWith(".SET.")) + } + else + { + if (visionString.startsWith(".SET.")) { - obj.clearVisionList(); - vis = getVision(anInt, visionString.substring(5)); + // TODO Need a deprecation warning here + context.getListContext().removeAllFromList(getTokenName(), + obj, Vision.VISIONLIST); + visionString = visionString.substring(5); } - else + try { - vis = getVision(anInt, visionString); + list.add(Vision.getVision(visionString)); } - - if (vis != null) + catch (IllegalArgumentException e) { - visions.add(vis); + Logging.addParseMessage(Logging.LST_ERROR, + "Bad Syntax for Vision in " + getTokenName()); + Logging.addParseMessage(Logging.LST_ERROR, e.getMessage()); + return false; } } - } - for (Vision vis: visions) + for (Vision vis : list) { - for (Prerequisite prereq : prereqs) + context.getListContext().addToList(getTokenName(), obj, + Vision.VISIONLIST, new CDOMDirectSingleRef<Vision>(vis)); + } + return true; + } + + public String[] unparse(LoadContext context, CDOMObject obj) + { + AssociatedChanges<CDOMReference<Vision>> changes = context + .getListContext().getChangesInList(getTokenName(), obj, + Vision.VISIONLIST); + List<String> list = new ArrayList<String>(); + Collection<CDOMReference<Vision>> removedItems = changes.getRemoved(); + if (changes.includesGlobalClear()) + { + if (removedItems != null && !removedItems.isEmpty()) { - vis.addPrerequisite(prereq); + context.addWriteMessage("Non-sensical relationship in " + + getTokenName() + + ": global .CLEAR and local .CLEAR. performed"); + return null; } - - if (anInt > -9) + list.add(Constants.LST_DOT_CLEAR); + } + else if (removedItems != null && !removedItems.isEmpty()) + { + list.add(Constants.LST_DOT_CLEAR_DOT + + ReferenceUtilities + .joinLstFormat(removedItems, ",.CLEAR.")); + } + MapToList<CDOMReference<Vision>, AssociatedPrereqObject> mtl = changes + .getAddedAssociations(); + if (mtl != null && !mtl.isEmpty()) + { + MapToList<Set<Prerequisite>, Vision> m = new HashMapToList<Set<Prerequisite>, Vision>(); + for (CDOMReference<Vision> ab : mtl.getKeySet()) { - ((PCClass) obj).addVision(anInt, vis); + for (AssociatedPrereqObject assoc : mtl.getListFor(ab)) + { + m.addAllToListFor(new HashSet<Prerequisite>(assoc + .getPrerequisiteList()), ab.getContainedObjects()); + } } - else + Set<String> set = new TreeSet<String>(); + for (Set<Prerequisite> prereqs : m.getKeySet()) { - obj.addVision(vis); + StringBuilder sb = new StringBuilder(StringUtil.join(m + .getListFor(prereqs), Constants.PIPE)); + if (prereqs != null && !prereqs.isEmpty()) + { + sb.append(Constants.PIPE); + sb.append(getPrerequisiteString(context, prereqs)); + } + set.add(sb.toString()); } + list.addAll(set); } - - return true; + if (list.isEmpty()) + { + return null; + } + return list.toArray(new String[list.size()]); } - private Vision getVision(int anInt, String visionType) + public Class<CDOMObject> getTokenClass() { - // expecting value in form of Darkvision (60') - final StringTokenizer cTok = new StringTokenizer(visionType, "(')"); - final String aKey = cTok.nextToken().trim(); // e.g. Darkvision - String aVal = "0"; - if (cTok.hasMoreTokens()) - { - aVal = cTok.nextToken(); // e.g. 60 - } - return new Vision(VisionType.getVisionType(aKey), aVal); + return CDOMObject.class; } } Modified: Trunk/pcgen/code/src/test/pcgen/core/prereq/PreVisionTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/prereq/PreVisionTest.java 2008-06-21 13:32:44 UTC (rev 6782) +++ Trunk/pcgen/code/src/test/pcgen/core/prereq/PreV... [truncated message content] |
From: <th...@us...> - 2008-06-22 11:33:52
|
Revision: 6785 http://pcgen.svn.sourceforge.net/pcgen/?rev=6785&view=rev Author: thpr Date: 2008-06-21 15:11:06 -0700 (Sat, 21 Jun 2008) Log Message: ----------- new UMULT token Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/IntegerKey.java Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.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/gui/editor/ClassLevelPanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/plugin/lsttokens/UmultLst.java Added Paths: ----------- Trunk/pcgen/code/src/utest/plugin/lsttokens/UmultLstTest.java Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/IntegerKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/IntegerKey.java 2008-06-21 21:32:33 UTC (rev 6784) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/IntegerKey.java 2008-06-21 22:11:06 UTC (rev 6785) @@ -119,6 +119,8 @@ public static final IntegerKey HD_MAX = getConstant("HD_MAX"); + public static final IntegerKey UMULT = getConstant("UMULT"); + /* * TODO Okay, this is a hack. This should probably be a FormulaKey rather * than an IntegerKey in order to properly handle this strange delegation. Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-06-21 21:32:33 UTC (rev 6784) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-06-21 22:11:06 UTC (rev 6785) @@ -143,8 +143,6 @@ public static final ListKey<BonusObj> TEMP_BONUS = new ListKey<BonusObj>(); /** UDAM - a ListKey */ public static final ListKey<String> UDAM = new ListKey<String>(); - /** UMULT - a ListKey */ - public static final ListKey<String> UMULT = new ListKey<String>(); /** Key for a list of virtual feats (feats granted regardless of the prereqs) */ public static final ListKey<Ability> VIRTUAL_FEATS = new ListKey<Ability>(); // /** Key for a list of weapon proficiencies */ Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-21 21:32:33 UTC (rev 6784) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-21 22:11:06 UTC (rev 6785) @@ -2488,17 +2488,6 @@ } } - List<String> umultList = getListFor(ListKey.UMULT); - 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(); } @@ -3775,12 +3764,28 @@ if (includeCrit) { - final String dString = getUMultForLevel(aLevel); - - if (!"0".equals(dString)) + Integer active = null; + for (int i = aLevel; i >= 0; i--) { - aString.append("(x").append(dString).append(')'); + PCClassLevel pcl = levelMap.get(i); + if (pcl != null) + { + active = pcl.get(IntegerKey.UMULT); + if (active != null) + { + break; + } + } } + if (active == null) + { + //Could be in the class + active = get(IntegerKey.UMULT); + } + if (active != null) + { + aString.append("(x").append(active).append(')'); + } } return aString.toString(); @@ -4827,34 +4832,6 @@ } /* - * PCCLASSLEVELONLY Since this is a level dependent calculation, this should - * be performed by the PCClassLevel. - */ - private String getUMultForLevel(final int aLevel) - { - String aString = "0"; - - List<String> umultList = getListFor(ListKey.UMULT); - if ((umultList == null) || umultList.isEmpty()) - { - return aString; - } - - for (String umult : umultList) - { - final int pos = umult.lastIndexOf('|'); - - if ((pos >= 0) - && (aLevel <= Integer.parseInt(umult.substring(0, pos)))) - { - aString = umult.substring(pos + 1); - } - } - - return aString; - } - - /* * REFACTOR This should really be better at recognizing level dependent * items and storing them appropriately and not relying on PObject to ever * be level aware. This is a general problem across PCClass and I would like Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-21 21:32:33 UTC (rev 6784) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-21 22:11:06 UTC (rev 6785) @@ -48,6 +48,7 @@ import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.base.Constants; +import pcgen.cdom.enumeration.IntegerKey; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.StringKey; @@ -910,22 +911,6 @@ } /** - * Add the U multiplier - * @param mult - */ - public final void addUmult(final String mult) - { - if (".CLEAR".equals(mult)) - { - removeListFor(ListKey.UMULT); - } - else - { - addToListFor(ListKey.UMULT, mult); - } - } - - /** * Add a variable to the variable list * @param level * @param variableName @@ -3027,14 +3012,12 @@ aString.append(String.valueOf(b)); } - List<String> umultList = getListFor(ListKey.UMULT); - if (includeCrit && (umultList != null) && !umultList.isEmpty()) + if (includeCrit) { - final String dString = umultList.get(0); - - if (!"0".equals(dString)) + Integer umult = get(IntegerKey.UMULT); + if (umult != null) { - aString.append("(x").append(dString).append(')'); + aString.append("(x").append(umult).append(')'); } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2008-06-21 21:32:33 UTC (rev 6784) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2008-06-21 22:11:06 UTC (rev 6785) @@ -371,21 +371,19 @@ } } } - - List<String> sList = obj.getListFor(ListKey.UMULT); - - if ((sList != null) && (sList.size() != 0)) + + for (PCClassLevel pcl : obj.getClassLevelCollection()) { - for (Iterator<String> se = sList.iterator(); se.hasNext();) + Integer umult = pcl.get(IntegerKey.UMULT); + if (umult != null) { - String c = se.next(); - int y = c.indexOf('|'); - LevelTag lt = new LevelTag(c.substring(0, y), LevelTag.TAG_UMULT, c.substring(y + 1)); + LevelTag lt = new LevelTag(obj.getPCClassLevel(pcl), + LevelTag.TAG_UMULT, umult.toString()); levelTagList.add(lt); } } - sList = obj.getListFor(ListKey.UDAM); + List<String> sList = obj.getListFor(ListKey.UDAM); if (sList != null) { Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2008-06-21 21:32:33 UTC (rev 6784) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2008-06-21 22:11:06 UTC (rev 6785) @@ -56,9 +56,11 @@ import pcgen.cdom.base.Constants; import pcgen.cdom.base.SimpleAssociatedObject; import pcgen.cdom.enumeration.AssociationKey; +import pcgen.cdom.enumeration.IntegerKey; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.Pantheon; +import pcgen.cdom.inst.PCClassLevel; import pcgen.cdom.list.ClassSkillList; import pcgen.cdom.list.DomainList; import pcgen.cdom.reference.CDOMDirectSingleRef; @@ -981,7 +983,11 @@ thisPCClass.removeListFor(ListKey.TEMPLATE); thisPCClass.removeListFor(ListKey.TEMPLATE_CHOOSE); thisPCClass.removeListFor(ListKey.TEMPLATE_ADDCHOICE); - thisPCClass.addUmult(".CLEAR"); + thisPCClass.remove(IntegerKey.UMULT); + for (PCClassLevel pcl : thisPCClass.getClassLevelCollection()) + { + pcl.remove(IntegerKey.UMULT); + } thisPCClass.clearUdamList(); break; Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/UmultLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/UmultLst.java 2008-06-21 21:32:33 UTC (rev 6784) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/UmultLst.java 2008-06-21 22:11:06 UTC (rev 6785) @@ -4,36 +4,73 @@ */ package plugin.lsttokens; -import pcgen.core.PObject; -import pcgen.persistence.lst.GlobalLstToken; +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.base.Constants; +import pcgen.cdom.enumeration.IntegerKey; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.util.Logging; /** * @author djones4 - * + * */ -public class UmultLst implements GlobalLstToken +public class UmultLst implements CDOMPrimaryToken<CDOMObject> { - /* - * FIXME Template's LevelToken needs adjustment before this can be converted - * to the new syntax, since this is level-dependent - */ - public String getTokenName() { return "UMULT"; } - public boolean parse(PObject obj, String value, int anInt) + public boolean parse(LoadContext context, CDOMObject obj, String value) { - if (anInt > -9) + if (Constants.LST_DOT_CLEAR.equals(value)) { - obj.addUmult(anInt + "|" + value); + context.getObjectContext().put(obj, IntegerKey.UMULT, null); } else { - obj.addUmult(value); + try + { + Integer i = Integer.valueOf(value); + if (i.intValue() <= 0) + { + Logging.errorPrint("Invalid " + getTokenName() + ": " + + value); + Logging.errorPrint(" Expecting a positive integer"); + return false; + } + context.getObjectContext().put(obj, IntegerKey.UMULT, i); + } + catch (NumberFormatException nfe) + { + Logging.errorPrint("Invalid " + getTokenName() + ": " + value); + Logging.errorPrint(" Expecting an integer"); + return false; + } } return true; } + + public String[] unparse(LoadContext context, CDOMObject obj) + { + Integer mult = context.getObjectContext().getInteger(obj, + IntegerKey.UMULT); + if (mult == null) + { + return null; + } + if (mult.intValue() <= 0) + { + context.addWriteMessage(getTokenName() + " must be an integer > 0"); + return null; + } + return new String[] { mult.toString() }; + } + + public Class<CDOMObject> getTokenClass() + { + return CDOMObject.class; + } } Added: Trunk/pcgen/code/src/utest/plugin/lsttokens/UmultLstTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/UmultLstTest.java (rev 0) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/UmultLstTest.java 2008-06-21 22:11:06 UTC (rev 6785) @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2007 Tom Parker <th...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package plugin.lsttokens; + +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.enumeration.IntegerKey; +import pcgen.core.PCTemplate; +import pcgen.rules.persistence.CDOMLoader; +import pcgen.rules.persistence.CDOMTokenLoader; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import plugin.lsttokens.testsupport.AbstractGlobalIntegerTokenTestCase; + +public class UmultLstTest extends AbstractGlobalIntegerTokenTestCase +{ + + @Override + public IntegerKey getIntegerKey() + { + return IntegerKey.UMULT; + } + + @Override + public boolean isNegativeAllowed() + { + return false; + } + + @Override + public boolean isPositiveAllowed() + { + return true; + } + + @Override + public boolean isZeroAllowed() + { + return false; + } + + static CDOMPrimaryToken<CDOMObject> token = new UmultLst(); + static CDOMTokenLoader<PCTemplate> loader = new CDOMTokenLoader<PCTemplate>( + PCTemplate.class); + + @Override + public CDOMLoader<PCTemplate> getLoader() + { + return loader; + } + + @Override + public Class<PCTemplate> getCDOMClass() + { + return PCTemplate.class; + } + + @Override + public CDOMPrimaryToken<CDOMObject> getToken() + { + return token; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-06-27 00:46:23
|
Revision: 6900 http://pcgen.svn.sourceforge.net/pcgen/?rev=6900&view=rev Author: thpr Date: 2008-06-26 17:46:31 -0700 (Thu, 26 Jun 2008) Log Message: ----------- Cleanup based on FindBugs, PMD, Checkstyle Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/rules/context/AbstractReferenceContext.java Trunk/pcgen/code/src/java/pcgen/rules/context/AssociatedCollectionChanges.java Trunk/pcgen/code/src/java/pcgen/rules/context/CollectionChanges.java Trunk/pcgen/code/src/java/pcgen/rules/context/GameReferenceContext.java Trunk/pcgen/code/src/java/pcgen/rules/context/ListChanges.java Trunk/pcgen/code/src/java/pcgen/rules/context/ListContext.java Trunk/pcgen/code/src/java/pcgen/rules/context/LoadContext.java Trunk/pcgen/code/src/java/pcgen/rules/context/ObjectContext.java Trunk/pcgen/code/src/java/pcgen/rules/context/ReferenceContext.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/TokenLibrary.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/TokenSupport.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractToken.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ClassWrappedToken.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/util/Revision.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/util/TokenFamily.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/util/TokenFamilyIterator.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/util/TokenFamilySubIterator.java Trunk/pcgen/code/src/utest/plugin/lsttokens/DescispiLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/LangAutoLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/NameispiLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/OutputNameLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/TempdescLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/TemplateLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/UmultLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/VisionLstTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/AddspelllevelTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/CostTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/MultTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/StackTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/VisibleTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/AlignTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/AppearanceTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/DeityWeapTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/DomainsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/PantheonTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/RaceTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/SymbolTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/TitleTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/deity/WorshippersTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/domain/FeatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/AbstractCritMultTokenTestCase.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/AbstractCritRangeTokenTestCase.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/AbstractDamageTokenTestCase.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/AcCheckTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/BaseqtyTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/EdrTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/FumbleRangeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/HandsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/MaxDexTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/ModsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/NumPagesTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/PageUsageTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/ProficiencyTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/QualityTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/RangeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/RateOfFireTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/ReachMultTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/ReachTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/SlotsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/SpellfailureTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/WieldTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipment/WtTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/ArmortypeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/AssignToAllTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/ChargesTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/CostdoubleTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/FormatcatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/FumblerangeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/ItypeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/NameoptTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/PlusTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/ReplacesTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/SPropTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/equipmentmodifier/VisibleTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/AbbTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/AddDomainsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/AllowBaseClassTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/AttackCycleTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/BonusSpellStatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/CRFormulaTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/DeityTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/DomainTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/HDTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/IsMonsterTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/KnownSpellsFromSpecialtyTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/KnownspellsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/LangbonusTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/LevelsPerFeatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/MaxLevelTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/MemorizeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/ModToSkillsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/ProhibitspellTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/SkillListTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/SpellBookTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/SpellListTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/SpellStatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/StartSkillPtsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/VisibleTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/WeaponbonusTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/XtraFeatsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/level/AbstractPCClassLevelTokenTestCase.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/level/AddDomainsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/pcclass/level/DomainTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/CRTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/FaceTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/HandsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/HitDiceAdvancementTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/HitDieTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/LangbonusTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/LegsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/LevelAdjustmentTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/MonCCSkillTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/MonCSkillTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/RaceSubtypeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/RaceTypeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/ReachTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/SizeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/SkillMultTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/WeaponbonusTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/XtraSkillPointsPerLevelTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/skill/ACheckTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/skill/ClassesTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/skill/ExclusiveTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/skill/KeystatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/skill/UseuntrainedTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/skill/VisibleTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/CastTimeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/ClassesTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/CompsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/CostTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/DescriptorTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/DomainsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/DurationTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/ItemTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/PPCostTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/RangeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/SaveInfoTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/SchoolTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/SpellResTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/StatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/SubschoolTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/TargetAreaTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/VariantsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/spell/XPCostTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/AddLevelTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/BonusFeatsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/BonusSkillPointsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/CRTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/FaceTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/FeatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/GenderLockTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/HandsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/HitDieTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/LangbonusTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/LegsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/LevelAdjustmentTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/NonPPTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/RaceSubtypeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/RaceTypeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/ReachTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/RegionTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/RemovableTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/SizeTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/SubraceTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/SubregionTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/VisibleTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/WeaponbonusTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/weaponprof/HandsTokenTest.java Added Paths: ----------- Trunk/pcgen/code/src/utest/plugin/lsttokens/testsupport/CDOMTokenLoader.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/rules/persistence/CDOMTokenLoader.java Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/AbstractReferenceContext.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/AbstractReferenceContext.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/AbstractReferenceContext.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -50,9 +50,9 @@ private static final Class<ClassSkillList> CLASSSKILLLIST_CLASS = ClassSkillList.class; private static final Class<ClassSpellList> CLASSSPELLLIST_CLASS = ClassSpellList.class; - private Map<Class<?>, OneToOneMap<CDOMObject, String>> abbMap = new HashMap<Class<?>, OneToOneMap<CDOMObject, String>>(); + private final Map<Class<?>, OneToOneMap<CDOMObject, String>> abbMap = new HashMap<Class<?>, OneToOneMap<CDOMObject, String>>(); - private HashMap<CDOMObject, CDOMSingleRef<?>> directRefCache = new HashMap<CDOMObject, CDOMSingleRef<?>>(); + private final HashMap<CDOMObject, CDOMSingleRef<?>> directRefCache = new HashMap<CDOMObject, CDOMSingleRef<?>>(); public abstract <T extends CDOMObject> ReferenceManufacturer<T, ? extends CDOMSingleRef<T>> getManufacturer( Class<T> cl); Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/AssociatedCollectionChanges.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/AssociatedCollectionChanges.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/AssociatedCollectionChanges.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -7,9 +7,9 @@ public class AssociatedCollectionChanges<T> implements AssociatedChanges<T> { - private MapToList<T, AssociatedPrereqObject> positive; - private MapToList<T, AssociatedPrereqObject> negative; - private boolean clear; + private final MapToList<T, AssociatedPrereqObject> positive; + private final MapToList<T, AssociatedPrereqObject> negative; + private final boolean clear; public AssociatedCollectionChanges( MapToList<T, AssociatedPrereqObject> added, Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/CollectionChanges.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/CollectionChanges.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/CollectionChanges.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -5,9 +5,9 @@ public class CollectionChanges<T> implements Changes<T> { - private Collection<T> positive; - private Collection<T> negative; - private boolean clear; + private final Collection<T> positive; + private final Collection<T> negative; + private final boolean clear; public CollectionChanges(Collection<T> added, Collection<T> removed, boolean globallyCleared) Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/GameReferenceContext.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/GameReferenceContext.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/GameReferenceContext.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -32,10 +32,11 @@ public class GameReferenceContext extends AbstractReferenceContext { - private Map<Class<?>, TransparentReferenceManufacturer<? extends CDOMObject>> map = new HashMap<Class<?>, TransparentReferenceManufacturer<? extends CDOMObject>>(); + private final Map<Class<?>, TransparentReferenceManufacturer<? extends CDOMObject>> map = new HashMap<Class<?>, TransparentReferenceManufacturer<? extends CDOMObject>>(); - private DoubleKeyMap<Class<?>, Category<?>, TransparentReferenceManufacturer<? extends CDOMObject>> catmap = new DoubleKeyMap<Class<?>, Category<?>, TransparentReferenceManufacturer<? extends CDOMObject>>(); + private final DoubleKeyMap<Class<?>, Category<?>, TransparentReferenceManufacturer<? extends CDOMObject>> catmap = new DoubleKeyMap<Class<?>, Category<?>, TransparentReferenceManufacturer<? extends CDOMObject>>(); + @Override public <T extends CDOMObject> ReferenceManufacturer<T, ? extends CDOMSingleRef<T>> getManufacturer( Class<T> cl) { Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/ListChanges.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/ListChanges.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/ListChanges.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -16,11 +16,11 @@ public class ListChanges<T extends PrereqObject> implements AssociatedChanges<CDOMReference<T>> { - private String tokenName; - private CDOMObject positive; - private CDOMObject negative; - private CDOMReference<? extends CDOMList<T>> list; - private boolean clear; + private final String tokenName; + private final CDOMObject positive; + private final CDOMObject negative; + private final CDOMReference<? extends CDOMList<T>> list; + private final boolean clear; public ListChanges(String token, CDOMObject added, CDOMObject removed, CDOMReference<? extends CDOMList<T>> listref, Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/ListContext.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/ListContext.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/ListContext.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -350,10 +350,10 @@ edge.setAssociation(ak, assoc.getAssociation(ak)); } - public class TrackingListCommitStrategy implements ListCommitStrategy + public static class TrackingListCommitStrategy implements ListCommitStrategy { - protected class CDOMShell extends CDOMObject + protected static class CDOMShell extends CDOMObject { @Override public CDOMObject clone() throws CloneNotSupportedException @@ -396,13 +396,13 @@ * TODO These maps (throughout this entire class) are probably problems * because they are not using Identity characteristics */ - private TripleKeyMap<CDOMReference<? extends CDOMList<?>>, OwnerURI, CDOMObject, AssociatedPrereqObject> positiveMasterMap = new TripleKeyMap<CDOMReference<? extends CDOMList<?>>, OwnerURI, CDOMObject, AssociatedPrereqObject>(); + private final TripleKeyMap<CDOMReference<? extends CDOMList<?>>, OwnerURI, CDOMObject, AssociatedPrereqObject> positiveMasterMap = new TripleKeyMap<CDOMReference<? extends CDOMList<?>>, OwnerURI, CDOMObject, AssociatedPrereqObject>(); - private TripleKeyMap<CDOMReference<? extends CDOMList<?>>, OwnerURI, CDOMObject, AssociatedPrereqObject> negativeMasterMap = new TripleKeyMap<CDOMReference<? extends CDOMList<?>>, OwnerURI, CDOMObject, AssociatedPrereqObject>(); + private final TripleKeyMap<CDOMReference<? extends CDOMList<?>>, OwnerURI, CDOMObject, AssociatedPrereqObject> negativeMasterMap = new TripleKeyMap<CDOMReference<? extends CDOMList<?>>, OwnerURI, CDOMObject, AssociatedPrereqObject>(); - private HashMapToList<CDOMReference<? extends CDOMList<?>>, OwnerURI> masterClearSet = new HashMapToList<CDOMReference<? extends CDOMList<?>>, OwnerURI>(); + private final HashMapToList<CDOMReference<? extends CDOMList<?>>, OwnerURI> masterClearSet = new HashMapToList<CDOMReference<? extends CDOMList<?>>, OwnerURI>(); - private HashMapToList<String, OwnerURI> masterAllClear = new HashMapToList<String, OwnerURI>(); + private final HashMapToList<String, OwnerURI> masterAllClear = new HashMapToList<String, OwnerURI>(); public <T extends CDOMObject> AssociatedPrereqObject addToMasterList( String tokenName, CDOMObject owner, @@ -495,11 +495,11 @@ owner)); } - private DoubleKeyMap<URI, CDOMObject, CDOMObject> positiveMap = new DoubleKeyMap<URI, CDOMObject, CDOMObject>(); + private final DoubleKeyMap<URI, CDOMObject, CDOMObject> positiveMap = new DoubleKeyMap<URI, CDOMObject, CDOMObject>(); - private DoubleKeyMap<URI, CDOMObject, CDOMObject> negativeMap = new DoubleKeyMap<URI, CDOMObject, CDOMObject>(); + private final DoubleKeyMap<URI, CDOMObject, CDOMObject> negativeMap = new DoubleKeyMap<URI, CDOMObject, CDOMObject>(); - private DoubleKeyMapToList<URI, CDOMObject, CDOMReference<? extends CDOMList<?>>> globalClearSet = new DoubleKeyMapToList<URI, CDOMObject, CDOMReference<? extends CDOMList<?>>>(); + private final DoubleKeyMapToList<URI, CDOMObject, CDOMReference<? extends CDOMList<?>>> globalClearSet = new DoubleKeyMapToList<URI, CDOMObject, CDOMReference<? extends CDOMList<?>>>(); private CDOMObject getPositive(URI source, CDOMObject cdo) { Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/LoadContext.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/LoadContext.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/LoadContext.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -62,23 +62,23 @@ obj = oc; } - public <T extends PrereqObject> CDOMGroupRef<T> groupChildNodesOfClass( - PrereqObject parent, Class<T> child) - { - /* - * Create a new Group in the graph and then (defer to end of build) - * create edges between the new Group and all of the children of the - * given parent. - */ - // TODO FIXME - return null; - } +// public <T extends PrereqObject> CDOMGroupRef<T> groupChildNodesOfClass( +// PrereqObject parent, Class<T> child) +// { +// /* +// * Create a new Group in the graph and then (defer to end of build) +// * create edges between the new Group and all of the children of the +// * given parent. +// */ +// // TODO FIXME +// return null; +// } private int writeMessageCount = 0; public void addWriteMessage(String string) { - System.err.println("!!" + string); + Logging.errorPrint("!!" + string); // TODO FIXME Silently consume for now - these are message generated // during LST write... writeMessageCount++; @@ -156,8 +156,8 @@ ref.resolveReferences(); } - public void resolveDeferredTokens() - { +// public void resolveDeferredTokens() +// { // for (DeferredToken<? extends CDOMObject> token : TokenLibrary // .getDeferredTokens()) // { @@ -180,7 +180,7 @@ // // System.err.println(container.getActors()); // // System.err.println("@" + cs); // } - } +// } // private <T extends CDOMObject> void processRes(DeferredToken<T> token) // { @@ -191,7 +191,7 @@ // } // } - private TokenSupport support = new TokenSupport(); + private final TokenSupport support = new TokenSupport(); // public <T extends CDOMObject> PrimitiveChoiceSet<T> getChoiceSet( // Class<T> poClass, String value) @@ -217,11 +217,11 @@ return support.processToken(this, derivative, typeStr, argument); } - public <T extends CDOMObject> void unconditionallyProcess(T obj, String key, String value) + public <T extends CDOMObject> void unconditionallyProcess(T cdo, String key, String value) { try { - if (processToken(obj, key, value)) + if (processToken(cdo, key, value)) { commit(); } @@ -268,14 +268,14 @@ return newObj; } - private static final PrerequisiteWriter prereqWriter = + private static final PrerequisiteWriter PREREQ_WRITER = new PrerequisiteWriter(); public String getPrerequisiteString(Collection<Prerequisite> prereqs) { try { - return prereqWriter.getPrerequisiteString(prereqs); + return PREREQ_WRITER.getPrerequisiteString(prereqs); } catch (PersistenceLayerException e) { Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/ObjectContext.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/ObjectContext.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/ObjectContext.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -322,18 +322,16 @@ public static class TrackingObjectCommitStrategy implements ObjectCommitStrategy { - private static String CLEAR = ".CLEAR"; - - private DoubleKeyMap<URI, ConcretePrereqObject, CDOMObject> positiveMap = new DoubleKeyMap<URI, ConcretePrereqObject, CDOMObject>( + private final DoubleKeyMap<URI, ConcretePrereqObject, CDOMObject> positiveMap = new DoubleKeyMap<URI, ConcretePrereqObject, CDOMObject>( HashMap.class, IdentityHashMap.class); - private DoubleKeyMap<URI, ConcretePrereqObject, CDOMObject> negativeMap = new DoubleKeyMap<URI, ConcretePrereqObject, CDOMObject>( + private final DoubleKeyMap<URI, ConcretePrereqObject, CDOMObject> negativeMap = new DoubleKeyMap<URI, ConcretePrereqObject, CDOMObject>( HashMap.class, IdentityHashMap.class); - private DoubleKeyMapToList<URI, CDOMObject, ListKey<?>> globalClearSet = new DoubleKeyMapToList<URI, CDOMObject, ListKey<?>>( + private final DoubleKeyMapToList<URI, CDOMObject, ListKey<?>> globalClearSet = new DoubleKeyMapToList<URI, CDOMObject, ListKey<?>>( HashMap.class, IdentityHashMap.class); - private TripleKeyMapToList<URI, CDOMObject, ListKey<?>, String> patternClearSet = new TripleKeyMapToList<URI, CDOMObject, ListKey<?>, String>( + private final TripleKeyMapToList<URI, CDOMObject, ListKey<?>, String> patternClearSet = new TripleKeyMapToList<URI, CDOMObject, ListKey<?>, String>( HashMap.class, IdentityHashMap.class, HashMap.class); private URI sourceURI; @@ -427,8 +425,8 @@ public String getString(CDOMObject cdo, StringKey sk) { String added = getPositive(extractURI, cdo).get(sk); - boolean hasClear = CLEAR.equals(getNegative(extractURI, cdo) - .get(sk)); + boolean hasClear = Constants.LST_DOT_CLEAR.equals(getNegative( + extractURI, cdo).get(sk)); if (hasClear) { if (added == null) Modified: Trunk/pcgen/code/src/java/pcgen/rules/context/ReferenceContext.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/context/ReferenceContext.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/context/ReferenceContext.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -33,10 +33,11 @@ public class ReferenceContext extends AbstractReferenceContext { - private Map<Class<?>, ReferenceManufacturer<? extends CDOMObject, ?>> map = new HashMap<Class<?>, ReferenceManufacturer<? extends CDOMObject, ?>>(); + private final Map<Class<?>, ReferenceManufacturer<? extends CDOMObject, ?>> map = new HashMap<Class<?>, ReferenceManufacturer<? extends CDOMObject, ?>>(); - private DoubleKeyMap<Class<?>, Category<?>, CategorizedReferenceManufacturer<?>> catmap = new DoubleKeyMap<Class<?>, Category<?>, CategorizedReferenceManufacturer<?>>(); + private final DoubleKeyMap<Class<?>, Category<?>, CategorizedReferenceManufacturer<?>> catmap = new DoubleKeyMap<Class<?>, Category<?>, CategorizedReferenceManufacturer<?>>(); + @Override public <T extends CDOMObject> ReferenceManufacturer<T, ? extends CDOMSingleRef<T>> getManufacturer( Class<T> cl) { Deleted: Trunk/pcgen/code/src/java/pcgen/rules/persistence/CDOMTokenLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/CDOMTokenLoader.java 2008-06-27 00:43:22 UTC (rev 6899) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/CDOMTokenLoader.java 2008-06-27 00:46:31 UTC (rev 6900) @@ -1,336 +0,0 @@ -package pcgen.rules.persistence; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.net.URI; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; -import java.util.TreeSet; - -import pcgen.base.lang.StringUtil; -import pcgen.cdom.base.CDOMObject; -import pcgen.cdom.enumeration.ObjectKey; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.CampaignSourceEntry; -import pcgen.persistence.lst.LstFileLoader; -import pcgen.rules.context.LoadContext; -import pcgen.util.Logging; -import pcgen.util.PropertyFactory; - -public class CDOMTokenLoader<T extends CDOMObject> implements CDOMLoader<T> -{ - - private final List<ModEntry> copyList = new ArrayList<ModEntry>(); - - private final Class<T> targetClass; - - public CDOMTokenLoader(Class<T> cl) - { - targetClass = cl; - } - - public void parseLine(LoadContext context, T obj, String val, URI source) - throws PersistenceLayerException - { - if (val == null) - { - return; - } - StringTokenizer st = n... [truncated message content] |
From: <jde...@us...> - 2008-06-28 00:03:12
|
Revision: 6909 http://pcgen.svn.sourceforge.net/pcgen/?rev=6909&view=rev Author: jdempsey Date: 2008-06-27 17:03:21 -0700 (Fri, 27 Jun 2008) Log Message: ----------- Fix bug: psheet_InitTool.rpgrp party sheet broken - Merged from 5.14 r6908 Issue#: 2003142 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java Trunk/pcgen/code/src/test/pcgen/io/ExportHandlerTest.java Modified: Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java 2008-06-28 00:01:51 UTC (rev 6908) +++ Trunk/pcgen/code/src/java/pcgen/io/ExportHandler.java 2008-06-28 00:03:21 UTC (rev 6909) @@ -3197,7 +3197,7 @@ PlayerCharacter currPC = (0 <= i && i < PCs.length) ? PCs[i] : null; // Globals.setCurrentPC(currPC); - String[] tokens = forParser.tokenString().split("\\\\"); + String[] tokens = forParser.tokenString().split("\\\\\\\\"); for (String tok : tokens) { Modified: Trunk/pcgen/code/src/test/pcgen/io/ExportHandlerTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/io/ExportHandlerTest.java 2008-06-28 00:01:51 UTC (rev 6908) +++ Trunk/pcgen/code/src/test/pcgen/io/ExportHandlerTest.java 2008-06-28 00:03:21 UTC (rev 6909) @@ -25,8 +25,10 @@ import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; +import java.util.ArrayList; import java.util.List; import junit.framework.Test; @@ -442,6 +444,24 @@ } + public void testPartyFor() throws IOException + { + String outputToken = + " <combatants>\n" + + "|FOR.0,50,1,\n" + + " <name>\\\\%.NAME\\\\</name>\n" + + " <skills>\\\\%.FOR.0,COUNT[SKILLS],1,\\SKILL.%\\: \\SKILL.%.TOTAL.SIGN\\, ,; ,1\\\\</skills>\n" + + ",<combatant>,</combatant>,1|\n" + " </combatants>"; + List<PlayerCharacter> pcs = new ArrayList<PlayerCharacter>(); + pcs.add(getCharacter()); + String result = evaluatePartyToken(outputToken, pcs).trim(); + assertEquals( + "Party skills output", + "<combatants>\r\n" + + "<combatant> <name></name> <skills> Balance: +9; KNOWLEDGE (ARCANA): +11; KNOWLEDGE (RELIGION): +8; Tumble: +10; </skills></combatant> </combatants>", + result); + } + private String evaluateToken(String token, PlayerCharacter pc) throws IOException { @@ -455,4 +475,29 @@ return retWriter.toString(); } + + private String evaluatePartyToken(String token, List<PlayerCharacter> pcs) + throws IOException + { + // Create temp file. + File temp = File.createTempFile("testTemplate", ".txt"); + + // Delete temp file when program exits. + temp.deleteOnExit(); + + // Write to temp file + BufferedWriter out = new BufferedWriter(new FileWriter(temp)); + out.write(token); + out.close(); + + StringWriter retWriter = new StringWriter(); + BufferedWriter bufWriter = new BufferedWriter(retWriter); + ExportHandler export = new ExportHandler(temp); + export.write(pcs, bufWriter); + retWriter.flush(); + + bufWriter.flush(); + + return retWriter.toString(); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2008-06-29 11:38:55
|
Revision: 6935 http://pcgen.svn.sourceforge.net/pcgen/?rev=6935&view=rev Author: jdempsey Date: 2008-06-29 04:39:02 -0700 (Sun, 29 Jun 2008) Log Message: ----------- Fix bug: BONUSFEATLEVELSTARTINTERVAL broken with Multiclass - Merged from 5.14 r6934 Issue#: 1950413 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-29 11:29:28 UTC (rev 6934) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-29 11:39:02 UTC (rev 6935) @@ -1823,10 +1823,18 @@ } else { - StringBuffer aBuf = new StringBuffer( - "0|FEAT|PCPOOL|(CL-" + startLevel + "+" - + rangeLevel + ")/"); - aBuf.append(divisor); + StringBuffer aBuf = + new StringBuffer("0|FEAT|PCPOOL|") + .append("max(CL"); + // Make sure we only take off the startlevel value once + if (this == aPC.getClassKeyed(aPC.getLevelInfoClassKeyName(0))) + { + aBuf.append("-").append(startLevel); + aBuf.append("+").append(rangeLevel); + } + aBuf.append(",0)/").append(divisor); +// Logging.debugPrint("Feat bonus for " + this + " is " +// + aBuf.toString()); BonusObj bon = Bonus.newBonus(aBuf.toString()); bon.setCreatorObject(this); addBonusList(bon); Modified: Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2008-06-29 11:29:28 UTC (rev 6934) +++ Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java 2008-06-29 11:39:02 UTC (rev 6935) @@ -664,7 +664,7 @@ nymphClass.setLevel(1, pc); bonusList = nymphClass.getBonusList(); - assertEquals("Bonus added ", "0|FEAT|PCPOOL|(CL-3+3)/3", bonusList.get(0).toString()); + assertEquals("Bonus added ", "0|FEAT|PCPOOL|MAX(CL,0)/3", bonusList.get(0).toString()); assertEquals("Only one bonus", 1, bonusList.size()); } @@ -683,7 +683,7 @@ nymphClass.setLevel(1, pc); bonusList = nymphClass.getBonusList(); - assertEquals("Bonus added ", "0|FEAT|PCPOOL|(CL-0+0)/4", bonusList.get(0).toString()); + assertEquals("Bonus added ", "0|FEAT|PCPOOL|MAX(CL,0)/4", bonusList.get(0).toString()); assertEquals("Only one bonus", 1, bonusList.size()); } @@ -701,7 +701,7 @@ humanoidClass.setLevel(1, pc); bonusList = humanoidClass.getBonusList(); - assertEquals("Bonus added ", "0|FEAT|PCPOOL|(CL-3+3)/3", bonusList.get(3).toString()); + assertEquals("Bonus added ", "0|FEAT|PCPOOL|MAX(CL,0)/3", bonusList.get(3).toString()); assertEquals("Only one new bonus", 4, bonusList.size()); } @@ -720,7 +720,7 @@ humanoidClass.setLevel(1, pc); bonusList = humanoidClass.getBonusList(); - assertEquals("Bonus added ", "0|FEAT|PCPOOL|(CL-0+0)/4", bonusList.get(3).toString()); + assertEquals("Bonus added ", "0|FEAT|PCPOOL|MAX(CL,0)/4", bonusList.get(3).toString()); assertEquals("Only one new bonus", 4, bonusList.size()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-06-29 18:43:51
|
Revision: 6943 http://pcgen.svn.sourceforge.net/pcgen/?rev=6943&view=rev Author: thpr Date: 2008-06-29 11:43:57 -0700 (Sun, 29 Jun 2008) Log Message: ----------- BONUS change #2, consolidate out argument 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/core/bonus/BonusObj.java Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-29 18:23:03 UTC (rev 6942) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-06-29 18:43:57 UTC (rev 6943) @@ -3094,13 +3094,11 @@ * Calculate a Bonus given a BonusObj * * @param aBonus - * @param anObj * @param aPC * @return double */ @Override - public double calcBonusFrom(final BonusObj aBonus, final Object anObj, - PlayerCharacter aPC) + public double calcBonusFrom(final BonusObj aBonus, PlayerCharacter aPC) { double retVal = 0; int iTimes = 1; @@ -3143,7 +3141,7 @@ final String xString = new StringBuffer().append(firstPart).append( getAssociated(i)).append(secondPart).toString(); - retVal += calcPartialBonus(xString, iTimes, aBonus, anObj); + retVal += calcPartialBonus(xString, iTimes, aBonus, aPC); } bString = @@ -3152,7 +3150,7 @@ } } - retVal += calcPartialBonus(bString, iTimes, aBonus, anObj); + retVal += calcPartialBonus(bString, iTimes, aBonus, aPC); return retVal; } @@ -3161,16 +3159,15 @@ * Calculate a Bonus given a BonusObj * * @param aBonus - * @param anObj * @param listString * @param aPC * @return double */ @Override - public double calcBonusFrom(final BonusObj aBonus, final Object anObj, - final String listString, PlayerCharacter aPC) + public double calcBonusFrom(final BonusObj aBonus, final String listString, + PlayerCharacter aPC) { - return calcBonusFrom(aBonus, anObj, aPC); + return calcBonusFrom(aBonus, aPC); } /* @@ -5043,7 +5040,7 @@ * @return partial bonus */ private double calcPartialBonus(final String bString, final int iTimes, - final BonusObj aBonus, final Object anObj) + final BonusObj aBonus, final PlayerCharacter aPC) { final StringTokenizer aTok = new StringTokenizer(bString, "|", false); @@ -5065,27 +5062,7 @@ return 0; } - if (anObj instanceof PlayerCharacter) - { - iBonus = - ((PlayerCharacter) anObj).getVariableValue(aVal, classKey) - .doubleValue(); - } - else - { - try - { - iBonus = Float.parseFloat(aVal); - } - catch (NumberFormatException e) - { - // Should this be ignored? - Logging - .errorPrint("PCClass calcPartialBonus NumberFormatException in BONUS: " - + bString); - } - } - + iBonus = aPC.getVariableValue(aVal, classKey).doubleValue(); return iBonus * iTimes; } Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-29 18:23:03 UTC (rev 6942) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-29 18:43:57 UTC (rev 6943) @@ -4088,26 +4088,23 @@ /** * Calculate a Bonus given a BonusObj * @param aBonus - * @param anObj * @param aPC * @return bonus */ - public double calcBonusFrom(final BonusObj aBonus, final Object anObj, PlayerCharacter aPC) + public double calcBonusFrom(final BonusObj aBonus, PlayerCharacter aPC) { - return calcBonusFrom(aBonus, anObj, null, aPC); + return calcBonusFrom(aBonus, null, aPC); } /** * Calculate a Bonus given a BonusObj * @param aBonus - * @param anObj * @param listString * @param aPC * @return bonus */ public double calcBonusFrom( final BonusObj aBonus, - final Object anObj, final String listString, PlayerCharacter aPC) { @@ -4126,7 +4123,7 @@ } } - return calcPartialBonus(iTimes, aBonus, anObj, listString, aPC); + return calcPartialBonus(iTimes, aBonus, listString, aPC); } /** @@ -4699,12 +4696,11 @@ * * @param iTimes multiply bonus * iTimes * @param aBonus The bonus Object used for calcs - * @param anObj * @param listString String returned after %LIST substitution, if applicable * @param aPC * @return partial bonus */ - public double calcPartialBonus(final int iTimes, final BonusObj aBonus, final Object anObj, final String listString, final PlayerCharacter aPC) + public double calcPartialBonus(final int iTimes, final BonusObj aBonus, final String listString, final PlayerCharacter aPC) { final String aList = aBonus.getBonusInfo(); String aVal = aBonus.getValue(); @@ -4764,25 +4760,9 @@ { iBonus = aBonus.getValueAsdouble(); } - else if (anObj instanceof PlayerCharacter) - { - iBonus = ((PlayerCharacter) anObj).getVariableValue(aVal, "").doubleValue(); - } - else if (anObj instanceof Equipment) - { - iBonus = ((Equipment) anObj).getVariableValue(aVal, "", aPC).doubleValue(); - } else { - try - { - iBonus = Float.parseFloat(aVal); - } - catch (NumberFormatException e) - { - //Should this be ignored? - Logging.errorPrint("calcPartialBonus NumberFormatException in BONUS: " + aVal); - } + iBonus = aPC.getVariableValue(aVal, "").doubleValue(); } return iBonus * iTimes; Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-06-29 18:23:03 UTC (rev 6942) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-06-29 18:43:57 UTC (rev 6943) @@ -4307,7 +4307,7 @@ continue; } - iBonus += anObj.calcBonusFrom(bonus, this, this); + iBonus += anObj.calcBonusFrom(bonus, this); } return iBonus; @@ -7000,7 +7000,7 @@ } final PObject aCreator = (PObject) creObj; - bonus += aCreator.calcBonusFrom(bonusObj, this, this); + bonus += aCreator.calcBonusFrom(bonusObj, this); } return bonus; @@ -13313,7 +13313,7 @@ if (aBonus.qualifies(this)) { - iBonus = anObj.calcBonusFrom(aBonus, this, this); + iBonus = anObj.calcBonusFrom(aBonus, this); } int k = @@ -14194,7 +14194,7 @@ for (String bString : aBonus.getStringListFromBonus(anObj)) { final double iBonus = - anObj.calcBonusFrom(aBonus, this, bString, this); + anObj.calcBonusFrom(aBonus, bString, this); setActiveBonusStack(iBonus, bString, getActiveBonusMap()); Logging.debugPrint("vBONUS: " + anObj.getDisplayName() + " : " + iBonus + " : " + bString); Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2008-06-29 18:23:03 UTC (rev 6942) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2008-06-29 18:43:57 UTC (rev 6943) @@ -484,7 +484,7 @@ } else if (bonusValue instanceof String && creatorObj instanceof PObject) { - value = ((PObject) creatorObj).calcBonusFrom(this, aPC, "", aPC); + value = ((PObject) creatorObj).calcBonusFrom(this, "", aPC); } else { @@ -646,7 +646,7 @@ else if (bonusValue instanceof String && creatorObj instanceof PObject) { sb.append(Delta.toString((float) ((PObject) creatorObj) - .calcBonusFrom(this, aPC, "", aPC))); + .calcBonusFrom(this, "", aPC))); } else { Modified: Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-06-29 18:23:03 UTC (rev 6942) +++ Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-06-29 18:43:57 UTC (rev 6943) @@ -95,7 +95,7 @@ final PlayerCharacter pc = getCharacter(); rideSkill.activateBonuses(pc); - final double iBonus = rideSkill.calcBonusFrom(saddleBonus, pc, pc); + final double iBonus = rideSkill.calcBonusFrom(saddleBonus, pc); assertEquals("Bonus value", -5.0, iBonus, 0.05); assertTrue("No saddle, should have a penalty", saddleBonus.isApplied()); @@ -196,7 +196,7 @@ sp.addBonusList(spCost); sp.activateBonuses(character); - Double a = sp.calcBonusFrom(spCost, character, character); + Double a = sp.calcBonusFrom(spCost, character); assertEquals(10, spCosts + a.intValue()); } @@ -210,7 +210,6 @@ Globals.setCurrentPC(character); setPCStat(character, "INT", 18); - int statMod = character.getStatList().getStatModFor("INT"); final BonusObj bonus = Bonus.newBonus("VISION|Darkvision|%LIST+10|TYPE=Magical Boon"); ArrayList<BonusObj> bonusList = new ArrayList<BonusObj>(); @@ -221,7 +220,7 @@ bonus.setCreatorObject(testBonus); character.addFeat(testBonus, null); - int bonusVal = (int) testBonus.calcPartialBonus(1, bonus, character, "VISION.DARKVISION:MAGICAL BOON", character); + int bonusVal = (int) testBonus.calcPartialBonus(1, bonus, "VISION.DARKVISION:MAGICAL BOON", character); assertEquals(14, bonusVal); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-06-29 18:50:20
|
Revision: 6944 http://pcgen.svn.sourceforge.net/pcgen/?rev=6944&view=rev Author: thpr Date: 2008-06-29 11:50:30 -0700 (Sun, 29 Jun 2008) Log Message: ----------- Simplify calcPartialBonus Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-29 18:43:57 UTC (rev 6943) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-29 18:50:30 UTC (rev 6944) @@ -4108,6 +4108,11 @@ final String listString, PlayerCharacter aPC) { + if (aBonus.getBonusInfo().equals("ALL")) + { + return 0; + } + int iTimes = 1; final String aType = aBonus.getTypeOfBonus(); @@ -4123,7 +4128,7 @@ } } - return calcPartialBonus(iTimes, aBonus, listString, aPC); + return iTimes * calcPartialBonus(aBonus, listString, aPC); } /** @@ -4693,25 +4698,18 @@ /** * calcPartialBonus calls appropriate getVariableValue() for a Bonus - * - * @param iTimes multiply bonus * iTimes * @param aBonus The bonus Object used for calcs * @param listString String returned after %LIST substitution, if applicable * @param aPC + * * @return partial bonus */ - public double calcPartialBonus(final int iTimes, final BonusObj aBonus, final String listString, final PlayerCharacter aPC) + public double calcPartialBonus(final BonusObj aBonus, final String listString, final PlayerCharacter aPC) { - final String aList = aBonus.getBonusInfo(); String aVal = aBonus.getValue(); double iBonus = 0; - if (aList.equals("ALL")) - { - return 0; - } - if (listString != null) { int listIndex = aVal.indexOf("%LIST"); @@ -4765,7 +4763,7 @@ iBonus = aPC.getVariableValue(aVal, "").doubleValue(); } - return iBonus * iTimes; + return iBonus; } public void clearAdds() { Modified: Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-06-29 18:43:57 UTC (rev 6943) +++ Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-06-29 18:50:30 UTC (rev 6944) @@ -220,7 +220,7 @@ bonus.setCreatorObject(testBonus); character.addFeat(testBonus, null); - int bonusVal = (int) testBonus.calcPartialBonus(1, bonus, "VISION.DARKVISION:MAGICAL BOON", character); + int bonusVal = (int) testBonus.calcPartialBonus(bonus, "VISION.DARKVISION:MAGICAL BOON", character); assertEquals(14, bonusVal); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-06-29 18:57:19
|
Revision: 6946 http://pcgen.svn.sourceforge.net/pcgen/?rev=6946&view=rev Author: thpr Date: 2008-06-29 11:57:29 -0700 (Sun, 29 Jun 2008) Log Message: ----------- more small refactoring on BONUS Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-29 18:54:21 UTC (rev 6945) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-06-29 18:57:29 UTC (rev 6946) @@ -4127,8 +4127,17 @@ iTimes = 1; } } + double r; + if (aBonus.isValueStatic()) + { + r = aBonus.getValueAsdouble(); + } + else + { + r = calculatePartialFormulaBonus(aBonus.getValue(), listString, aPC); + } - return iTimes * calcPartialBonus(aBonus, listString, aPC); + return iTimes * r; } /** @@ -4706,16 +4715,19 @@ */ public double calcPartialBonus(final BonusObj aBonus, final String listString, final PlayerCharacter aPC) { + double r; if (aBonus.isValueStatic()) { - return aBonus.getValueAsdouble(); + r = aBonus.getValueAsdouble(); } - String aVal = aBonus.getValue(); - - return calculatePartialFormulaBonus(aVal, listString, aPC); + else + { + r = calculatePartialFormulaBonus(aBonus.getValue(), listString, aPC); + } + return r; } - private double calculatePartialFormulaBonus(String aVal, + public double calculatePartialFormulaBonus(String aVal, final String listString, final PlayerCharacter aPC) { if (listString != null) Modified: Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-06-29 18:54:21 UTC (rev 6945) +++ Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-06-29 18:57:29 UTC (rev 6946) @@ -219,8 +219,8 @@ testBonus.addAssociated("INT"); bonus.setCreatorObject(testBonus); character.addFeat(testBonus, null); - - int bonusVal = (int) testBonus.calcPartialBonus(bonus, "VISION.DARKVISION:MAGICAL BOON", character); + int bonusVal = (int) testBonus.calculatePartialFormulaBonus(bonus.getValue(), + "VISION.DARKVISION:MAGICAL BOON", character); assertEquals(14, bonusVal); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-07-02 01:22:54
|
Revision: 6984 http://pcgen.svn.sourceforge.net/pcgen/?rev=6984&view=rev Author: thpr Date: 2008-07-01 18:22:58 -0700 (Tue, 01 Jul 2008) Log Message: ----------- Major BONUS Overhaul to move analysis of BONUS objects back into BonusObj as much as possible Side effect: resolves [ 2006488 ] Bug in var("BL=%LIST"))) in Trunk Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/cdom/inst/ObjectCache.java Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillModifier.java Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java Trunk/pcgen/code/src/java/pcgen/core/chooser/SAListChoiceManager.java Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java Modified: Trunk/pcgen/code/src/java/pcgen/cdom/inst/ObjectCache.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/inst/ObjectCache.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/cdom/inst/ObjectCache.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -52,7 +52,9 @@ public void initializeVisionCache(PlayerCharacter pc) { +System.err.println(getListFor(ListKey.VISION_CACHE)); initializeListFor(ListKey.VISION_CACHE); +System.err.println(getListFor(ListKey.VISION_CACHE)); Map<VisionType, Integer> map = new HashMap<VisionType, Integer>(); for (CDOMObject cdo : pc.getCDOMObjectList()) { @@ -86,6 +88,7 @@ } } } +System.err.println(getListFor(ListKey.VISION_CACHE)); /* * parse through the global list of vision tags and see if this PC has @@ -109,6 +112,7 @@ set.add(new Vision(me.getKey(), me.getValue().toString())); } addAllToListFor(ListKey.VISION_CACHE, set); +System.err.println(getListFor(ListKey.VISION_CACHE)); } private final DoubleKeyMap<String, PCClass, SkillCost> skillCostMap = new DoubleKeyMap<String, PCClass, SkillCost>(); Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -3090,86 +3090,6 @@ return substitutionClassList; } - /** - * Calculate a Bonus given a BonusObj - * - * @param aBonus - * @param aPC - * @return double - */ - @Override - public double calcBonusFrom(final BonusObj aBonus, PlayerCharacter aPC) - { - double retVal = 0; - int iTimes = 1; - - final String aType = aBonus.getTypeOfBonus(); - - // String aName = aBonus.getBonusInfo(); - if ("VAR".equals(aType)) - { - iTimes = Math.max(1, getAssociatedCount()); - - String choiceString = getChoiceString(); - if (choiceString.startsWith("SALIST|") - && (choiceString.indexOf("|VAR|") >= 0)) - { - iTimes = 1; - } - } - - String bString = aBonus.toString(); - - if (getAssociatedCount() != 0) - { - int span = 4; - int idx = bString.indexOf("%VAR"); - - if (idx == -1) - { - idx = bString.indexOf("%LIST"); - span = 5; - } - - if (idx >= 0) - { - final String firstPart = bString.substring(0, idx); - final String secondPart = bString.substring(idx + span); - - for (int i = 1; i < getAssociatedCount(); ++i) - { - final String xString = - new StringBuffer().append(firstPart).append( - getAssociated(i)).append(secondPart).toString(); - retVal += iTimes * calcPartialBonus(xString, aBonus, aPC); - } - - bString = - new StringBuffer().append(firstPart).append( - getAssociated(0)).append(secondPart).toString(); - } - } - - retVal += iTimes * calcPartialBonus(bString, aBonus, aPC); - - return retVal; - } - - /** - * Calculate a Bonus given a BonusObj - * - * @param aBonus - * @param listString - * @param aPC - * @return double - */ - @Override - public double calcBonusFrom(final BonusObj aBonus, final String listString, - PlayerCharacter aPC) - { - return calcBonusFrom(aBonus, aPC); - } - /* * FINALPCCLASSLEVELONLY This is only part of the level, as the skill list is * calculated based on other factors, it is not a Tag @@ -5026,40 +4946,6 @@ choiceList.add(0, this); // THEN add the base class as the first choice } - /** - * calcPartialBonus calls appropriate getVariableValue() for a Bonus - * - * @param bString - * Either the entire BONUS:COMBAT|AC|2 string or part of a %LIST - * or %VAR bonus section - * @param aBonus - * The bonuse Object used for calcs - * @param anObj - * @return partial bonus - */ - private double calcPartialBonus(final String bString, - final BonusObj aBonus, final PlayerCharacter aPC) - { - final StringTokenizer aTok = new StringTokenizer(bString, "|", false); - - if (aBonus.getPCLevel() >= 0) - { - // discard first token (Level) - aTok.nextToken(); - } - - aTok.nextToken(); // Is this intended to be thrown away? Why? - - final String aList = aTok.nextToken(); - - if (aList.equals("ALL")) - { - return 0; - } - final String aVal = aTok.nextToken(); - return aPC.getVariableValue(aVal, classKey).doubleValue(); - } - /* * DELETEMETHOD through refactoring this to another location. While this is * yet another potentially useful utility function, PCClass really isn't the Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -4086,59 +4086,6 @@ } /** - * Calculate a Bonus given a BonusObj - * @param aBonus - * @param aPC - * @return bonus - */ - public double calcBonusFrom(final BonusObj aBonus, PlayerCharacter aPC) - { - return calcBonusFrom(aBonus, null, aPC); - } - - /** - * Calculate a Bonus given a BonusObj - * @param aBonus - * @param listString - * @param aPC - * @return bonus - */ - public double calcBonusFrom( - final BonusObj aBonus, - final String listString, - PlayerCharacter aPC) - { - if (aBonus.getBonusInfo().equals("ALL")) - { - return 0; - } - - int iTimes = 1; - - if ("VAR".equals(aBonus.getTypeOfBonus())) - { - iTimes = Math.max(1, getAssociatedCount()); - - String choiceString = getChoiceString(); - if (choiceString.startsWith("SALIST|") && (choiceString.indexOf("|VAR|") >= 0)) - { - iTimes = 1; - } - } - double r; - if (aBonus.isValueStatic()) - { - r = aBonus.resolve(aPC).doubleValue(); - } - else - { - r = calculatePartialFormulaBonus(aBonus.getValue(), listString, aPC); - } - - return iTimes * r; - } - - /** * Add a new bonus to the list of bonuses * @param aString The unparsed bonus to be added * @return true if new bonus is not null @@ -4703,56 +4650,6 @@ return bonus * iTimes; } - public double calculatePartialFormulaBonus(String aVal, - final String listString, final PlayerCharacter aPC) - { - if (listString != null) - { - int listIndex = aVal.indexOf("%LIST"); - while (listIndex >= 0) - { - //A %LIST substitution also needs to be done in the val section - //first, find out which one - //this is a bit of a hack but it was the best I could figure out so far - boolean found = false; - final StringBuffer sb = new StringBuffer(); - for (int i = 0; i < getAssociatedCount(); ++i) - { - final String associatedStr = getAssociated(i).toUpperCase(); - - if (listString.indexOf(associatedStr) >= 0) - { - - if (listIndex > 0) - { - sb.append(aVal.substring(0, listIndex)); - } - sb.append(associatedStr); - if (aVal.length() > (listIndex + 5)) - { - sb.append(aVal.substring(listIndex + 5)); - } - aVal = sb.toString(); - found = true; - break; - } - else - { - if (i != 0) - { - sb.append("+"); - } - sb.append(associatedStr); - } - } - aVal = aVal.replace("%LIST", sb.toString()); - listIndex = (found) ? aVal.indexOf("%LIST") : -1; - } - } - - return aPC.getVariableValue(aVal, "").doubleValue(); - } - public void clearAdds() { levelAbilityList.clear(); } @@ -4900,4 +4797,15 @@ // } // return Collections.unmodifiableList(spellLikeAbilities); // } + + public String getCompressedChoice(AssociatedChoice<String> c) + { + if (c instanceof FeatMultipleChoice) + { + return c.toString(); + } + + return c.getDefaultChoice(); + } + } Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -86,6 +86,7 @@ import pcgen.core.analysis.TemplateStat; import pcgen.core.bonus.Bonus; import pcgen.core.bonus.BonusObj; +import pcgen.core.bonus.BonusObj.BonusPair; import pcgen.core.character.CharacterSpell; import pcgen.core.character.CompanionMod; import pcgen.core.character.EquipSet; @@ -4300,14 +4301,7 @@ for (BonusObj bonus : aList) { - final PObject anObj = (PObject) bonus.getCreatorObject(); - - if (anObj == null) - { - continue; - } - - iBonus += anObj.calcBonusFrom(bonus, this); + iBonus += bonus.resolve(this, "").doubleValue(); } return iBonus; @@ -6946,7 +6940,6 @@ final List<BonusObj> aList = statList.getBonusListOfType(aType.toUpperCase(), aName .toUpperCase()); - return calcBonusFromList(aList); } @@ -6999,8 +6992,7 @@ continue; } - final PObject aCreator = (PObject) creObj; - bonus += aCreator.calcBonusFrom(bonusObj, this); + bonus += bonusObj.resolve(this, "").doubleValue(); } return bonus; @@ -13249,12 +13241,12 @@ // Keep track of which bonuses have been calculated processedBonusList.add(bonus); - for (String bString : bonus.getStringListFromBonus(anObj)) + for (BonusPair bp : bonus.getStringListFromBonus()) { - final double iBonus = bonus.resolve(this).doubleValue(); - setActiveBonusStack(iBonus, bString, getActiveBonusMap()); + final double iBonus = bp.resolve(this).doubleValue(); + setActiveBonusStack(iBonus, bp.bonusKey, getActiveBonusMap()); Logging.debugPrint("BONUS: " + anObj.getDisplayName() + " : " - + iBonus + " : " + bString); + + iBonus + " : " + bp.bonusKey); } } @@ -13320,7 +13312,7 @@ if (aBonus.qualifies(this)) { - iBonus = anObj.calcBonusFrom(aBonus, this); + iBonus = aBonus.resolve(this, anObj.getQualifiedKey()).doubleValue(); } int k = @@ -14198,13 +14190,12 @@ } // calculate bonus and add to activeBonusMap - for (String bString : aBonus.getStringListFromBonus(anObj)) + for (BonusPair bp : aBonus.getStringListFromBonus()) { - final double iBonus = - anObj.calcBonusFrom(aBonus, bString, this); - setActiveBonusStack(iBonus, bString, getActiveBonusMap()); + final double iBonus = bp.resolve(this).doubleValue(); + setActiveBonusStack(iBonus, bp.bonusKey, getActiveBonusMap()); Logging.debugPrint("vBONUS: " + anObj.getDisplayName() + " : " - + iBonus + " : " + bString); + + iBonus + " : " + bp.bonusKey); } prevProcessed.remove(aBonus); } @@ -14826,15 +14817,12 @@ // Grab the list of relevant types so that we can build up // the // bonuses with the stacking rules applied. - List<String> typeList = - bonus.getStringListFromBonus((PObject) bonus - .getCreatorObject()); - for (String element : typeList) + for (BonusPair bp : bonus.getStringListFromBonus()) { - if (element.startsWith(prefix)) + if (bp.bonusKey.startsWith(prefix)) { - setActiveBonusStack(bonus.getCalculatedValue(this), - element, bonusMap); + setActiveBonusStack(bp.resolve(this).doubleValue(), + bp.bonusKey, bonusMap); } } } Modified: Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillModifier.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillModifier.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillModifier.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -29,6 +29,7 @@ import pcgen.core.PlayerCharacter; import pcgen.core.Skill; import pcgen.core.bonus.BonusObj; +import pcgen.core.bonus.BonusObj.BonusPair; import pcgen.core.utils.CoreUtility; import pcgen.util.Delta; @@ -159,17 +160,25 @@ String keyName = sk.getKeyName(); for (BonusObj bonus : aPC.getActiveBonusList()) { - double bonusVal = bonus.getCalculatedValue(aPC); - if (bonus.isApplied() && !CoreUtility.doublesEqual(bonusVal, 0.0) - && "SKILL".equals(bonus.getBonusName()) - && bonus.getBonusInfoList().contains(keyName.toUpperCase())) + // calculate bonus and add to activeBonusMap + if (bonus.isApplied() && "SKILL".equals(bonus.getBonusName()) + && bonus.getBonusInfoList().contains(keyName.toUpperCase())) { - if (bonusDetails.length() > 0) + double iBonus = 0; + for (BonusPair bp : bonus.getStringListFromBonus()) { - bonusDetails.append(' '); + iBonus += bp.resolve(aPC).doubleValue(); } - bonusDetails.append(bonus.getDescription(shortForm, aPC)); - bonusObjTotal += bonusVal; + if (!CoreUtility.doublesEqual(iBonus, 0.0)) + { + if (bonusDetails.length() > 0) + { + bonusDetails.append(' '); + } + bonusDetails.append(Delta.toString((int) iBonus)); + bonusDetails.append(bonus.getBonusContext(shortForm)); + bonusObjTotal += iBonus; + } } } Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -27,6 +27,7 @@ import java.io.Serializable; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -37,6 +38,7 @@ import pcgen.cdom.base.ConcretePrereqObject; import pcgen.cdom.base.Constants; import pcgen.cdom.base.FormulaFactory; +import pcgen.core.AssociatedChoice; import pcgen.core.Equipment; import pcgen.core.PObject; import pcgen.core.PlayerCharacter; @@ -441,38 +443,15 @@ /** * Get the bonus value as a double + * @param string * @return bonus value as a double */ - public Number resolve(PlayerCharacter pc) + public Number resolve(PlayerCharacter pc, String string) { - return bonusFormula.resolve(pc, ""); + return bonusFormula.resolve(pc, string); } - /** - * Calculate the value of the bonus object for the supplied - * character. If the value of the bonus is a formula, this - * formula will be evaluated for the character. Other the - * static value will be returned. - * - * @param aPC The character the bonus is to be evaluated for. - * @return The value of the bonus. - */ - public double getCalculatedValue(final PlayerCharacter aPC) - { - double value = 0; - if (creatorObj instanceof PObject) - { - value = ((PObject) creatorObj).calcBonusFrom(this, "", aPC); - } - else - { - value = resolve(aPC).doubleValue(); - } - return value; - } - - /** * is value static * @return true if value is static */ @@ -605,11 +584,17 @@ */ public String getDescription(final boolean shortForm, final PlayerCharacter aPC) { - final StringBuffer sb = new StringBuffer(50); + final StringBuilder sb = new StringBuilder(50); - sb.append(Delta - .toString(bonusFormula.resolve(aPC, "").floatValue())); + sb.append(Delta.toString(bonusFormula.resolve(aPC, "").floatValue())); + return sb.append(getBonusContext(shortForm)).toString(); + } + + public String getBonusContext(final boolean shortForm) + { + final StringBuilder sb = new StringBuilder(50); + boolean bEmpty = true; sb.append('['); if (hasPrerequisites()) { @@ -905,6 +890,15 @@ } } + private static final String VALUE_TOKEN_PATTERN = Pattern.quote(VALUE_TOKEN_REPLACEMENT); + private static final String VAR_TOKEN_REPLACEMENT = "%VAR"; //$NON-NLS-1$ + private static final String VAR_TOKEN_PATTERN = Pattern.quote(VAR_TOKEN_REPLACEMENT); + + private static final AssociatedChoice<String> NO_ASSOC = new AssociatedChoice<String>(""); + + private static final List<AssociatedChoice<String>> NO_ASSOC_LIST = Collections + .singletonList(NO_ASSOC); + /** * TODO - This method should be changed to not return a string. * <p> @@ -915,145 +909,152 @@ * * @return List of bonus strings */ - public List<String> getStringListFromBonus(final PObject anObj) + public List<BonusPair> getStringListFromBonus() { - final List<String> aList = new ArrayList<String>(); + List<BonusPair> bonusList = new ArrayList<BonusPair>(); - final String bInfoString = getBonusInfo(); - final StringTokenizer aTok = new StringTokenizer(bInfoString, ","); - int listindex = 0; + List<AssociatedChoice<String>> associatedList; + PObject anObj = null; + if (creatorObj instanceof PObject) + { + anObj = (PObject) creatorObj; + associatedList = (anObj).getAssociatedList(); + if (associatedList.isEmpty()) + { + associatedList = NO_ASSOC_LIST; + } + } + else + { + associatedList = NO_ASSOC_LIST; + } - while (aTok.hasMoreTokens()) + // Must use getBonusName because it contains the unaltered bonusType + String name = getBonusName(); + String[] infoArray = getBonusInfo().split(","); + String thisType = getTypeString(); + + if (addOnceOnly) { - final String info = aTok.nextToken(); - - // Some BONUS statements use %LIST to represent - // a possible list or selection made - // Need to deconstruct for proper bonus stacking - if (anObj.getAssociatedCount() > 0) + String thisName = name; + Formula newFormula; + if (bonusFormula.isStatic()) { - // There are three forms: - // 1) has %LIST in the bonusName - // 2) has %LIST in the bonusInfo - // 3) has no %LIST at all - - - // Must use getBonusName because it - // contains the unaltered bonusType - final String name = getBonusName(); + newFormula = bonusFormula; + } + else + { + newFormula = FormulaFactory.getFormulaFor(bonusFormula.toString()); + } + for (String thisInfo : infoArray) + { + StringBuilder sb = new StringBuilder(); + sb.append(thisName).append('.').append(thisInfo); + if (hasTypeString()) + { + sb.append(':').append(thisType); + } + bonusList.add(new BonusPair(sb.toString(), newFormula)); + } + } + else + { + for (AssociatedChoice<String> assoc : associatedList) + { + String thisName; if (name.indexOf(VALUE_TOKEN_REPLACEMENT) >= 0) { - for (int i = 0; i < anObj.getAssociatedCount(); ++i) - { - final StringBuffer ab = new StringBuffer(); - final String tName = - name.replaceFirst(Pattern.quote(VALUE_TOKEN_REPLACEMENT), - anObj.getAssociated(i)); - ab.append(tName).append('.'); - ab.append(info); - - if (hasTypeString()) - { - ab.append(':').append(getTypeString()); - } - - aList.add(ab.toString().toUpperCase()); - } + thisName = + name.replaceAll(VALUE_TOKEN_PATTERN, anObj + .getCompressedChoice(assoc)); } - else if (info.indexOf(VALUE_TOKEN_REPLACEMENT) >= 0) + else { - for (int i = 0; i < anObj.getAssociatedCount(true); ++i) + thisName = name; + } + List<String> infoList = new ArrayList<String>(4); + for (String info : infoArray) + { + if (info.indexOf(VALUE_TOKEN_REPLACEMENT) >= 0) { - final StringBuffer ab = new StringBuffer(); - final String tName = - info.replaceFirst(Pattern.quote(VALUE_TOKEN_REPLACEMENT), - anObj.getAssociated(i, true)); - ab.append(getTypeOfBonus()).append('.'); - ab.append(tName); - - if (hasTypeString()) + for (String expInfo : assoc.getChoices()) { - ab.append(':').append(getTypeString()); + infoList.add(info.replaceAll(VALUE_TOKEN_PATTERN, + expInfo)); } - aList.add(ab.toString().toUpperCase()); } + else if (info.indexOf(VAR_TOKEN_REPLACEMENT) >= 0) + { + infoList.add(name.replaceAll(VAR_TOKEN_PATTERN, anObj + .getCompressedChoice(assoc))); + } + else if (info.equals(LIST_TOKEN_REPLACEMENT)) + { + infoList.add(anObj.getCompressedChoice(assoc)); + } + else + { + infoList.add(info); + } } + Formula newFormula; + if (bonusFormula.isStatic()) + { + newFormula = bonusFormula; + } else { - final int cnt = anObj.getAssociatedCount(); + String value = bonusFormula.toString(); - if (cnt <= listindex && info.equals(LIST_TOKEN_REPLACEMENT)) + // A %LIST substitution also needs to be done in the val section + int listIndex = value.indexOf(VALUE_TOKEN_REPLACEMENT); + String thisValue = value; + if (listIndex >= 0) { - continue; + thisValue = + value.replaceAll(VALUE_TOKEN_PATTERN, anObj + .getCompressedChoice(assoc)); } - - while (true) + newFormula = FormulaFactory.getFormulaFor(thisValue); + } + for (String thisInfo : infoList) + { + StringBuilder sb = new StringBuilder(); + sb.append(thisName).append('.').append(thisInfo); + if (hasTypeString()) { - final StringBuffer ab = new StringBuffer(); - ab.append(getTypeOfBonus()).append('.'); - if (info.equals(LIST_TOKEN_REPLACEMENT)) - { - ab.append(anObj.getAssociated(listindex)); - } - else - { - ab.append(info); - } - - if (hasTypeString()) - { - ab.append(':').append(getTypeString()); - } - - listindex++; - - aList.add(ab.toString().toUpperCase()); - - // If we have processed all of the entries, or if this object - // has multiple bonuses, don't add any more copies. - if (aTok.countTokens() > 0 - || listindex >= cnt - || addOnceOnly) - { - break; - } + sb.append(':').append(thisType); } + bonusList.add(new BonusPair(sb.toString(), newFormula)); } } - else if (hasVariable()) - { - // Some bonuses have a variable as part - // of their name, such as - // BONUS:WEAPONPROF=AbcXyz|TOHIT|3 - // so parse out the correct value - final StringBuffer ab = new StringBuffer(); - ab.append(getTypeOfBonus()); - ab.append(getVariable()).append('.'); - ab.append(info); + } + return bonusList; + } - if (hasTypeString()) - { - ab.append(':').append(getTypeString()); - } + public class BonusPair + { + private Formula formula; + public String bonusKey; - aList.add(ab.toString().toUpperCase()); + public BonusPair(String key, Formula f) + { + bonusKey = key; + formula = f; + } + + public Number resolve(PlayerCharacter aPC) + { + String source; + if (creatorObj instanceof PObject) + { + source = ((PObject) creatorObj).getQualifiedKey(); } else { - final StringBuffer ab = new StringBuffer(); - ab.append(getTypeOfBonus()).append('.'); - ab.append(info); - - if (hasTypeString()) - { - ab.append(':').append(getTypeString()); - } - - aList.add(ab.toString().toUpperCase()); + source = Constants.EMPTY_STRING; } + return formula.resolve(aPC, source); } - - return aList; } - } Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/SAListChoiceManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/SAListChoiceManager.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/SAListChoiceManager.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -28,7 +28,10 @@ import pcgen.base.lang.StringUtil; import pcgen.core.PObject; import pcgen.core.PlayerCharacter; +import pcgen.core.bonus.Bonus; +import pcgen.core.bonus.BonusObj; import pcgen.io.PCGIOHandler; +import pcgen.util.Logging; /** * This is the chooser that deals with choosing from a list of SAs. @@ -126,8 +129,18 @@ { if (bString.startsWith(prefix)) { - pobject.addBonusList(bString.substring(bString.indexOf('|') + 1)); - + BonusObj aBonus = Bonus.newBonus(bString.substring(bString.indexOf('|') + 1)); + + if (aBonus == null) + { + Logging.errorPrint("Unable to build BONUS from: " + bString); + } + else + { + aBonus.setCreatorObject(pobject); + aBonus.setAddOnceOnly(true); + pobject.addBonusList(aBonus); + } break; } } Modified: Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/core/spell/Spell.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -1018,11 +1017,6 @@ public int getSpellPointCostActual(PlayerCharacter aPC) { int runningTotal = 0; - List<BonusObj> bonusList = aPC.getActiveBonusList(); - Set<BonusObj> bonuses = new HashSet<BonusObj>(); - bonuses.addAll(bonusList); - - Map<String,Integer> spCost = getSpellPointCostActualParts(); for (String aComponent: spCost.keySet()) { @@ -1032,7 +1026,7 @@ { return runningTotal; } - for (BonusObj b: bonuses) + for (BonusObj b: aPC.getActiveBonusList()) { if (b.toString().contains("SPELLPOINTCOST")) { @@ -1066,7 +1060,7 @@ } if(getBonus) { - runningTotal += b.resolve(aPC).intValue(); + runningTotal += b.resolve(aPC, "").intValue(); } } } Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoTempMod.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -1959,7 +1959,7 @@ tbWrap.getTarget(); aType = aBonus.getTypeOfBonus(); aTo = aBonus.getBonusInfo(); - aVal = aBonus.resolve(pc).toString(); + aVal = aBonus.resolve(pc, "").toString(); } else if (fn.getItem() instanceof String) { Modified: Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/java/pcgen/io/exporttoken/WeaponToken.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -2610,7 +2610,6 @@ { bonus += (int) pc.getTotalBonusTo("COMBAT", "DAMAGE.Finesseable"); } - if (eq.isMelee() && (meleeDamageStatBonus > 0)) { // getTotalBonusTo() includes the Stat Bonuses Modified: Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-07-02 00:31:21 UTC (rev 6983) +++ Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-07-02 01:22:58 UTC (rev 6984) @@ -24,6 +24,7 @@ package pcgen.core.bonus; import java.util.ArrayList; +import java.util.List; import pcgen.AbstractCharacterTestCase; import pcgen.cdom.enumeration.ListKey; @@ -33,6 +34,7 @@ import pcgen.core.Globals; import pcgen.core.PlayerCharacter; import pcgen.core.Skill; +import pcgen.core.bonus.BonusObj.BonusPair; import pcgen.core.character.EquipSet; import pcgen.core.spell.Spell; import plugin.bonustokens.Var; @@ -95,7 +97,7 @@ final PlayerCharacter pc = getCharacter(); rideSkill.activateBonuses(pc); - final double iBonus = rideSkill.calcBonusFrom(saddleBonus, pc); + double iBonus = saddleBonus.resolve(pc, "").doubleValue(); assertEquals("Bonus value", -5.0, iBonus, 0.05); assertTrue("No saddle, should have a penalty", saddleBonus.isApplied()); @@ -196,8 +198,8 @@ sp.addBonusList(spCost); sp.activateBonuses(character); - Double a = sp.calcBonusFrom(spCost, character); - assertEquals(10, spCosts + a.intValue()); + int a = spCost.resolve(character, "").intValue(); + assertEquals(10, spCosts + a); } /** @@ -219,15 +221,72 @@ testBonus.addAssociated("INT"); bonus.setCreatorObject(testBonus); character.addFeat(testBonus, null); - int bonusVal = (int) testBonus.calculatePartialFormulaBonus(bonus.getValue(), - "VISION.DARKVISION:MAGICAL BOON", character); - assertEquals(14, bonusVal); - - + List<BonusPair> bonusPairs = bonus.getStringListFromBonus(); + assertEquals(1, bonusPairs.size()); + BonusPair bp = bonusPairs.get(0); + assertEquals("VISION.DARKVISION:MAGICAL BOON", bp.bonusKey); + assertEquals(14, bp.resolve(character).intValue()); + } - - - - //Double a = sp.calcBonusFrom(spCost, character, character); + public void testBonuswithLISTValueTwoAssoc() + { + final PlayerCharacter character = getCharacter(); + + Globals.setCurrentPC(character); + setPCStat(character, "INT", 18); + setPCStat(character, "STR", 16); + final BonusObj bonus = + Bonus.newBonus("VISION|Darkvision|%LIST+10|TYPE=Magical Boon"); + ArrayList<BonusObj> bonusList = new ArrayList<BonusObj>(); + bonusList.add(bonus... [truncated message content] |
From: <th...@us...> - 2008-07-15 22:26:21
|
Revision: 7175 http://pcgen.svn.sourceforge.net/pcgen/?rev=7175&view=rev Author: thpr Date: 2008-07-15 15:26:29 -0700 (Tue, 15 Jul 2008) Log Message: ----------- [ 1994653 ] Remove code for deprecated PREDEFAULTMONSTER tag [ 1995095 ] Remove code for deprecated Races HITDICE tag docs [ 1980756 ] Remove code for deprecated Races MFEAT tag [ 1786280 ] Hardcoded PREDEFAULTMONSTER tags [ 1612793 ] [Data Dependent] Extract Monster Hit Die into GameMode Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.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/PlayerCharacterUtilities.java Trunk/pcgen/code/src/java/pcgen/core/Race.java Trunk/pcgen/code/src/java/pcgen/core/SettingsHandler.java Trunk/pcgen/code/src/java/pcgen/core/analysis/TemplateModifier.java Trunk/pcgen/code/src/java/pcgen/gui/MainHP.java Trunk/pcgen/code/src/java/pcgen/gui/PreferencesDialog.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/pcgen/gui/editor/RaceBasePanel.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoRaces.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoResources.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSkills.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java Trunk/pcgen/code/src/java/pcgen/io/PCGIOHandler.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/plugin/encounter/EncounterPlugin.java Trunk/pcgen/code/src/java/plugin/exporttokens/HitDiceToken.java Trunk/pcgen/code/src/java/plugin/exporttokens/RaceToken.java Trunk/pcgen/code/src/test/pcgen/core/PCClassTest.java Trunk/pcgen/code/src/test/pcgen/core/PlayerCharacterTest.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreHDTest.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreLevelMaxTest.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreLevelTest.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PrePCLevelTest.java Trunk/pcgen/code/src/test/pcgen/io/exporttoken/SpellMemTokenTest.java Trunk/pcgen/code/src/test/plugin/exporttokens/SpellListTokenTest.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/HitdiceToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/MfeatToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/PreDefaultMonsterParser.java Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/PreDefaultMonsterTester.java Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/PreDefaultMonsterWriter.java Modified: Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2008-07-15 20:33:17 UTC (rev 7174) +++ Trunk/pcgen/code/src/java/pcgen/core/EquipmentModifier.java 2008-07-15 22:26:29 UTC (rev 7175) @@ -181,28 +181,6 @@ } /** - * A test of whether this object has a bonus that stringifys to the same as - * the string passed in - * - * @param aString a string representation of the bonus we're looking for - * - * @return True if the string matches, false otherwise - */ - @Override - public boolean getBonusListString(final String aString) - { - for ( BonusObj bonus : getBonusList() ) - { - if (bonus.getBonusInfo().equalsIgnoreCase(aString)) - { - return true; - } - } - - return false; - } - - /** * set the cost of this object * * @param aString representing the cost @@ -467,6 +445,7 @@ return getSafe(ObjectKey.NAME_OPT).returnName(this); } + @Override public int getSR(final PlayerCharacter aPC) { if (getSRFormula() == null) Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-07-15 20:33:17 UTC (rev 7174) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-07-15 22:26:29 UTC (rev 7175) @@ -1780,8 +1780,8 @@ if (level > curLevel || aPC.isImporting()) { final boolean isMonsterClass = - aPC.getRace().getMonsterClass(aPC, false) != null - && aPC.getRace().getMonsterClass(aPC, false) + aPC.getRace().getMonsterClass() != null + && aPC.getRace().getMonsterClass() .equalsIgnoreCase(this.getKeyName()); Integer mLevPerFeat = get(IntegerKey.LEVELS_PER_FEAT); int startLevel; @@ -1804,41 +1804,21 @@ } if (divisor > 0) { - if (SettingsHandler.isMonsterDefault() && isMonsterClass) + StringBuffer aBuf = + new StringBuffer("0|FEAT|PCPOOL|") + .append("max(CL"); + // Make sure we only take off the startlevel value once + if (this == aPC.getClassKeyed(aPC.getLevelInfoClassKeyName(0))) { - int monLev = - aPC.getRace().getMonsterClassLevels(aPC, - false); - - StringBuffer aBuf = new StringBuffer( - "0|FEAT|MONSTERPOOL|"); - aBuf.append("max(0,floor((CL-"); - aBuf.append(monLev); - aBuf.append(")/"); - aBuf.append(divisor); - aBuf.append("))"); - BonusObj bon = Bonus.newBonus(aBuf.toString()); - bon.setCreatorObject(this); - addBonusList(bon); + aBuf.append("-").append(startLevel); + aBuf.append("+").append(rangeLevel); } - else - { - StringBuffer aBuf = - new StringBuffer("0|FEAT|PCPOOL|") - .append("max(CL"); - // Make sure we only take off the startlevel value once - if (this == aPC.getClassKeyed(aPC.getLevelInfoClassKeyName(0))) - { - aBuf.append("-").append(startLevel); - aBuf.append("+").append(rangeLevel); - } - aBuf.append(",0)/").append(divisor); -// Logging.debugPrint("Feat bonus for " + this + " is " -// + aBuf.toString()); - BonusObj bon = Bonus.newBonus(aBuf.toString()); - bon.setCreatorObject(this); - addBonusList(bon); - } + aBuf.append(",0)/").append(divisor); +// Logging.debugPrint("Feat bonus for " + this + " is " +// + aBuf.toString()); + BonusObj bon = Bonus.newBonus(aBuf.toString()); + bon.setCreatorObject(this); + addBonusList(bon); } } @@ -3216,16 +3196,66 @@ public int recalcSkillPointMod(final PlayerCharacter aPC, final int total) { - final int spMod; - - if (isMonster() && aPC.isMonsterDefault()) + // int spMod = getSkillPoints(); + int lockedMonsterSkillPoints; + int spMod = getSafe(FormulaKey.START_SKILL_POINTS).resolve(aPC, + classKey).intValue(); + + spMod += (int) aPC.getTotalBonusTo("SKILLPOINTS", "NUMBER"); + + if (isMonster()) { - spMod = getMonsterSkillPointMod(aPC, total); + lockedMonsterSkillPoints = + (int) aPC.getTotalBonusTo("MONSKILLPTS", "LOCKNUMBER"); + if (lockedMonsterSkillPoints > 0) + { + spMod = lockedMonsterSkillPoints; + } + else if (total == 1) + { + int monSkillPts = + (int) aPC.getTotalBonusTo("MONSKILLPTS", "NUMBER"); + if (monSkillPts != 0) + { + spMod = monSkillPts; + } + } + + if (total != 1) + { + // If this level is one that is not entitled to skill points + // based + // on the monster's size, zero out the skills for this level + final int nonSkillHD = + (int) aPC.getTotalBonusTo("MONNONSKILLHD", "NUMBER"); + if (total <= nonSkillHD) + { + spMod = 0; + } + } } + + spMod = updateBaseSkillMod(aPC, spMod); + + if (total == 1) + { + if (SettingsHandler.getGame().isPurchaseStatMode()) + { + aPC.setPoolAmount(0); + } + + spMod *= aPC.getRace().getSafe(IntegerKey.INITIAL_SKILL_MULT); + if (aPC.getAge() <= 0) + { + // Only generate a random age if the user hasn't set one! + Globals.getBioSet().randomize("AGE", aPC); + } + } else { - spMod = getNonMonsterSkillPointMod(aPC, total); + spMod *= Globals.getSkillMultiplierForLevel(total); } + return spMod; } @@ -3862,7 +3892,6 @@ if (aPC.getTotalLevels() > total) { boolean processBonusStats = true; - boolean processBonusFeats = true; total = aPC.getTotalLevels(); if (isMonster()) @@ -3872,26 +3901,10 @@ // 4 levels of Giant, so it does not get a stat increase at // 4th level because that is already taken into account in // its racial stat modifiers, but it will get one at 8th - if (total <= aPC.getRace().getMonsterClassLevels(aPC)) + if (total <= aPC.getRace().getMonsterClassLevels()) { processBonusStats = false; } - - /* - * If we are using default monsters and we have not yet added - * all of the racial monster levels then we can not add any - * feats. i.e. a default monster Ogre will not get a feat at 1st - * or 3rd level because they have already been allocated in the - * race, but a non default monster will get the 2 bonus feats - * instead. Both versions of the monster will get one at 6th - * level. i.e. default Ogre with 2 class levels, or no default - * Ogre with 4 giant levels and 2 class levels. - */ - if (aPC.isMonsterDefault() - && total <= aPC.getRace().getMonsterClassLevels(aPC)) - { - processBonusFeats = false; - } } if (!aPC.isImporting()) @@ -4662,77 +4675,6 @@ return spMod; } - /* - * This method calculates skill modifier for a non-monster character. - * - * Created(Extracted from addLevel) 20 Nov 2002 by sage_sam for bug #629643 - */ - private int getNonMonsterSkillPointMod(final PlayerCharacter aPC, - final int total) - { - // int spMod = getSkillPoints(); - int lockedMonsterSkillPoints; - int spMod = getSafe(FormulaKey.START_SKILL_POINTS).resolve(aPC, - classKey).intValue(); - - spMod += (int) aPC.getTotalBonusTo("SKILLPOINTS", "NUMBER"); - - if (isMonster()) - { - lockedMonsterSkillPoints = - (int) aPC.getTotalBonusTo("MONSKILLPTS", "LOCKNUMBER"); - if (lockedMonsterSkillPoints > 0) - { - spMod = lockedMonsterSkillPoints; - } - else if (total == 1) - { - int monSkillPts = - (int) aPC.getTotalBonusTo("MONSKILLPTS", "NUMBER"); - if (monSkillPts != 0) - { - spMod = monSkillPts; - } - } - - if (total != 1) - { - // If this level is one that is not entitled to skill points - // based - // on the monster's size, zero out the skills for this level - final int nonSkillHD = - (int) aPC.getTotalBonusTo("MONNONSKILLHD", "NUMBER"); - if (total <= nonSkillHD) - { - spMod = 0; - } - } - } - - spMod = updateBaseSkillMod(aPC, spMod); - - if (total == 1) - { - if (SettingsHandler.getGame().isPurchaseStatMode()) - { - aPC.setPoolAmount(0); - } - - spMod *= aPC.getRace().getSafe(IntegerKey.INITIAL_SKILL_MULT); - if (aPC.getAge() <= 0) - { - // Only generate a random age if the user hasn't set one! - Globals.getBioSet().randomize("AGE", aPC); - } - } - else - { - spMod *= Globals.getSkillMultiplierForLevel(total); - } - - return spMod; - } - /** * Build a caster level map for this class. The map will be of the form * <String,String> where the key is the spell level and the value is the Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-07-15 20:33:17 UTC (rev 7174) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-07-15 22:26:29 UTC (rev 7175) @@ -274,9 +274,6 @@ // Should we resize the gear automatically? private boolean autoResize = SettingsHandler.getGearTab_AutoResize(); - private final boolean useMonsterDefault = - SettingsHandler.isMonsterDefault(); - // output sheet locations private String outputSheetHTML = Constants.EMPTY_STRING; private String outputSheetPDF = Constants.EMPTY_STRING; @@ -2264,7 +2261,7 @@ // Add additional HD if required // newClass = Globals.getClassNamed(race.getType()); PCClass aClass = - Globals.getContext().ref.silentlyGetConstructedCDOMObject(PCClass.class, race.getMonsterClass(this, false)); + Globals.getContext().ref.silentlyGetConstructedCDOMObject(PCClass.class, race.getMonsterClass()); final int usedHD = followerMaster.getUsedHD(); addHD -= usedHD; @@ -2530,17 +2527,6 @@ } /** - * Returns the state of the default monster flag when the character was - * created. - * - * @return <tt>true</tt> if the character used the default monster flag. - */ - public boolean isMonsterDefault() - { - return useMonsterDefault; - } - - /** * Sets the character's name. * * @param aString @@ -5984,11 +5970,6 @@ int levelForSkillPurposes = getTotalLevels(); final BigDecimal maxRanks; - if (SettingsHandler.isMonsterDefault()) - { - levelForSkillPurposes += totalHitDice(); - } - final Skill aSkill = Globals.getContext().ref.silentlyGetConstructedCDOMObject(Skill.class, skillKey); if (aSkill == null) @@ -6010,24 +5991,12 @@ } } - if (SettingsHandler.isMonsterDefault()) - { - levelForSkillPurposes += totalHitDice(); - } - if (levelForSkillPurposes == 0) { // No classes qualify for this exclusive skill, so treat it as a // cross-class skill // This does not seem right to me! JD - if (SettingsHandler.isMonsterDefault()) - { - levelForSkillPurposes = (getTotalLevels() + totalHitDice()); - } - else - { - levelForSkillPurposes = (getTotalLevels()); - } + levelForSkillPurposes = (getTotalLevels()); maxRanks = SkillUtilities.maxCrossClassSkillForLevel( @@ -6247,70 +6216,12 @@ final Race oldRace = getRace(); final boolean raceIsNull = (oldRace == null); // needed because race // is set to null later - final boolean firstLevel = getTotalClassLevels() == 1; // remove current race attributes if (!raceIsNull) { oldRace.getSpellSupport().clearCharacterSpells(); - if (PlayerCharacterUtilities.canReassignRacialFeats()) - { - final StringTokenizer aTok = - new StringTokenizer(oldRace.getFeatList(this), - Constants.PIPE); - - while (aTok.hasMoreTokens()) - { - final String aString = aTok.nextToken(); - - if (aString.endsWith(")") - && (Globals.getAbilityKeyed(Constants.FEAT_CATEGORY, - aString) == null)) - { - final String featKey = - aString.substring(0, aString.indexOf('(') - 1); - - final Ability anAbility = - Globals.getAbilityKeyed( - Constants.FEAT_CATEGORY, featKey); - - if (anAbility != null) - { - AbilityUtilities.modFeat(this, null, aString, true, - false); - // setFeats(feats - anAbility.getCost(this)); - adjustFeats(-anAbility.getSafe(ObjectKey.SELECTION_COST).doubleValue()); - } - } - else - { - final Ability anAbility = - Globals.getAbilityKeyed( - Constants.FEAT_CATEGORY, aString); - - if (anAbility != null) - { - final String featKey = anAbility.getKeyName(); - - if ((hasRealFeat(anAbility) || hasFeatAutomatic(featKey))) - { - AbilityUtilities.modFeat(this, null, aString, - true, false); - // setFeats(feats - anAbility.getCost(this)); - adjustFeats(-anAbility.getSafe(ObjectKey.SELECTION_COST).doubleValue()); - } - } - else - { - ShowMessageDelegate.showMessageDialog( - "Removing unknown feat: " + aString, - Constants.s_APPNAME, MessageType.INFORMATION); - } - } - } - } - languages.removeAll(oldRace.getSafeListFor(ListKey.AUTO_LANGUAGES)); cachedWeaponProfs = null; @@ -6323,16 +6234,15 @@ removeNaturalWeapons(race); removeTemplatesFrom(race); - - if ((race.getMonsterClass(this) != null) - && (race.getMonsterClassLevels(this) != 0)) + if ((race.getMonsterClass() != null) + && (race.getMonsterClassLevels() != 0)) { final PCClass mclass = - Globals.getContext().ref.silentlyGetConstructedCDOMObject(PCClass.class, race.getMonsterClass(this)); + Globals.getContext().ref.silentlyGetConstructedCDOMObject(PCClass.class, race.getMonsterClass()); if (mclass != null) { - incrementClassLevel(race.getMonsterClassLevels(this) * -1, + incrementClassLevel(race.getMonsterClassLevels() * -1, mclass, true); } } @@ -6377,17 +6287,15 @@ final List<PCLevelInfo> existingLevelInfo = new ArrayList<PCLevelInfo>(pcLevelInfo); pcLevelInfo.clear(); - // Make sure monster classes are added first - if (!isImporting() && (race.getMonsterClass(this) != null) - && (race.getMonsterClassLevels(this) != 0)) + if (!isImporting() && (race.getMonsterClass() != null) + && (race.getMonsterClassLevels() != 0)) { final PCClass mclass = - Globals.getContext().ref.silentlyGetConstructedCDOMObject(PCClass.class, race.getMonsterClass(this)); - + Globals.getContext().ref.silentlyGetConstructedCDOMObject(PCClass.class, race.getMonsterClass()); if (mclass != null) { - incrementClassLevel(race.getMonsterClassLevels(this), + incrementClassLevel(race.getMonsterClassLevels(), mclass, true); } } @@ -6434,70 +6342,6 @@ } addNaturalWeapons(race.getNaturalWeapons()); - - if (PlayerCharacterUtilities.canReassignRacialFeats()) - { - final StringTokenizer aTok = - new StringTokenizer(getRace().getFeatList(this), - Constants.PIPE); - - while (aTok.hasMoreTokens()) - { - final String aString = aTok.nextToken(); - - if (aString.endsWith(")") - && (Globals.getAbilityKeyed(Constants.FEAT_CATEGORY, - aString) == null)) - { - // we want the first instance of it, in case of Weapon - // Focus(Longbow (Composite)) - final String featKey = - aString.substring(0, aString.indexOf('(') - 1); - - final Ability anAbility = - Globals.getAbilityKeyed( - Constants.FEAT_CATEGORY, featKey); - - if (anAbility != null) - { - // setFeats(feats + anAbility.getCost(this)); - adjustFeats(anAbility.getSafe(ObjectKey.SELECTION_COST).doubleValue()); - AbilityUtilities.modFeat(this, null, aString, true, - true); - } - } - else - { - final Ability anAbility = - Globals.getAbilityKeyed( - Constants.FEAT_CATEGORY, aString); - - if (anAbility != null) - { - final String featKey = anAbility.getKeyName(); - - if ((!this.hasRealFeat(anAbility) && !this - .hasFeatAutomatic(featKey))) - { - // setFeats(feats + anAbility.getCost(this)); - adjustFeats(anAbility.getSafe(ObjectKey.SELECTION_COST).doubleValue()); - - // modFeat(featName, true, - // featName.endsWith("Proficiency")); - AbilityUtilities.modFeat(this, null, aString, - true, true); - } - } - else - { - ShowMessageDelegate.showMessageDialog( - "Adding unknown feat: " + aString, - Constants.s_APPNAME, MessageType.INFORMATION); - } - } - } - } - getAutoLanguages(); getRacialFavoredClasses(); @@ -8832,28 +8676,7 @@ public float calcCR() { float CR = 0; - final int rhd = race.hitDice(this); - // If the racial HD is greater than 0 then calculate the ratio of racial HD - // to total HD - if (rhd > 0) - { - float hitDieRatio = (float) totalHitDice() / rhd; - - // Add 2 to the CR while the hitDieRatio is >= to 2 - while (hitDieRatio >= 2) - { - CR = CR + 2; - hitDieRatio = hitDieRatio / 2; - } - - // If the hitDieRatio is stll 1.5 or above then add another 1 to the CR - if (hitDieRatio >= 1.5) - { - ++CR; - } - } - // Calculate and add the CR from the PC Classes for (PCClass pcClass : classList) { @@ -9616,11 +9439,6 @@ { final double iConMod = getStatBonusTo("HP", "BONUS"); - if (race.hitDice(this) != 0) - { - total = race.calcHitPoints((int) iConMod); - } - for (PCClass pcClass : classList) { total += pcClass.hitPoints((int) iConMod); @@ -10900,7 +10718,7 @@ public int totalHitDice() { - return race.hitDice(this) + totalMonsterLevels(); + return totalMonsterLevels(); } public int totalNonMonsterLevels() @@ -17374,11 +17192,10 @@ // // add racial feats // - if ((getRace() != null) - && !PlayerCharacterUtilities.canReassignRacialFeats()) + if (getRace() != null) { final StringTokenizer aTok = - new StringTokenizer(getRace().getFeatList(this), + new StringTokenizer(getRace().getFeatList(), Constants.PIPE); while (aTok.hasMoreTokens()) @@ -17396,7 +17213,6 @@ addAutoProfsToList(getRace().getSafeListFor( ListKey.SELECTED_WEAPON_PROF_BONUS), abilities); - } for (final PCClass aClass : getClassList()) Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacterUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacterUtilities.java 2008-07-15 20:33:17 UTC (rev 7174) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacterUtilities.java 2008-07-15 22:26:29 UTC (rev 7175) @@ -44,18 +44,6 @@ * * @return false */ - static boolean canReassignRacialFeats() - { - return false; - } - - /** - * Bryan wanted this to be optional, but if you can reassign racial auto - * feats, when you reopen the character, you get the feats that were - * exchanged back - * - * @return false - */ static boolean canReassignTemplateFeats() { return false; Modified: Trunk/pcgen/code/src/java/pcgen/core/Race.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Race.java 2008-07-15 20:33:17 UTC (rev 7174) +++ Trunk/pcgen/code/src/java/pcgen/core/Race.java 2008-07-15 22:26:29 UTC (rev 7175) @@ -25,9 +25,7 @@ import java.awt.geom.Point2D; import java.math.BigDecimal; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import pcgen.base.lang.StringUtil; import pcgen.cdom.base.AssociatedPrereqObject; @@ -60,15 +58,6 @@ private String monsterClass = null; private int monsterClassLevels = 0; - /* - * TODO These four items are Deprecated, Default Monster Mode - */ - private String mFeatList = Constants.EMPTY_STRING; - private int hitDice = 0; - private int hitDiceSize = 0; - private Map<String, Integer> hitPointMap = new HashMap<String, Integer>(); - - /** * Checks if this race's advancement is limited. * @@ -86,11 +75,6 @@ addBonusList(bon); } - public int getBonusInitialFeats() - { - return 0; - } - public String getDisplayVision(final PlayerCharacter aPC) { if (aPC == null) @@ -145,116 +129,19 @@ this.featList = featList; } - public String getFeatList(final PlayerCharacter aPC) + public String getFeatList() { - return getFeatList(aPC, true); + return featList; } - public String getFeatList(final PlayerCharacter aPC, final boolean checkPC) - { - // This was messing up feats by race for several PC races. - // so a new tag MFEAT has been added. - // --- arcady 1/18/2002 - - if (checkPC && (aPC != null) && aPC.isMonsterDefault() - && !"".equals(mFeatList)) - { - return featList + "|" + mFeatList; - } - else if (!checkPC || (aPC != null)) - { - return featList; - } - else - { - return ""; - } - } - - public void setHitDice(final int newHitDice) - { - if (newHitDice < 0) - { - ShowMessageDelegate.showMessageDialog( - "Invalid number of hit dice in race " + displayName, "PCGen", - MessageType.ERROR); - - return; - } - - hitDice = newHitDice; - } - - public void setHitDiceSize(final int newHitDiceSize) - { - hitDiceSize = newHitDiceSize; - } - - public int getHitDiceSize(final PlayerCharacter aPC) - { - return getHitDiceSize(aPC, true); - } - - public int getHitDiceSize(final PlayerCharacter aPC, final boolean checkPC) - { - if (!checkPC || ((aPC != null) && aPC.isMonsterDefault())) - { - return hitDiceSize; - } - return 0; - } - - public void setHitPoint(final int aLevel, final Integer iRoll) - { - hitPointMap.put(Integer.toString(aLevel), iRoll); - } - - public Integer getHitPoint(final int j) - { - final Integer aHP = hitPointMap.get(Integer.toString(j)); - - if (aHP == null) - { - return Integer.valueOf(0); - } - - return aHP; - } - - public void setHitPointMap(final HashMap<String, Integer> newMap) - { - hitPointMap.clear(); - hitPointMap.putAll(newMap); - } - - public int getHitPointMapSize() - { - return hitPointMap.size(); - } - - public void setMFeatList(final String mFeatList) - { - this.mFeatList = mFeatList; - } - - public String getMFeatList() - { - return mFeatList; - } - public void setMonsterClass(final String string) { monsterClass = string; } - public String getMonsterClass(final PlayerCharacter aPC, - final boolean checkPC) + public String getMonsterClass() { - if (!checkPC || ((aPC != null) && !aPC.isMonsterDefault())) - { - return monsterClass; - } - return null; + return monsterClass; } public void setMonsterClassLevels(final int num) @@ -262,21 +149,11 @@ monsterClassLevels = num; } - public int getMonsterClassLevels(final PlayerCharacter aPC) + public int getMonsterClassLevels() { - return getMonsterClassLevels(aPC, true); + return monsterClassLevels; } - public int getMonsterClassLevels(final PlayerCharacter aPC, - final boolean checkPC) - { - if (!checkPC || ((aPC != null) && !aPC.isMonsterDefault())) - { - return monsterClassLevels; - } - return 0; - } - public boolean isNonAbility(final int statIdx) { final List<PCStat> statList = @@ -471,9 +348,6 @@ aRace.favoredClass = favoredClass; aRace.featList = featList; - aRace.hitDice = hitDice; - aRace.hitDiceSize = hitDiceSize; - aRace.hitPointMap = new HashMap<String, Integer>(hitPointMap); } catch (CloneNotSupportedException exc) { @@ -494,96 +368,6 @@ return getKeyName().hashCode(); } - public int hitDice(final PlayerCharacter aPC) - { - return hitDice(aPC, true); - } - - public int hitDice(final PlayerCharacter aPC, final boolean checkPC) - { - if (!checkPC || ((aPC != null) && aPC.isMonsterDefault())) - { - return hitDice; - } - return 0; - } - - /** - * TODO: Note that this code does *not* work like that in PCClass - * Does it need to be? - * @param aPC - **/ - public void rollHP(final PlayerCharacter aPC) - { - if (!aPC.isImporting()) - { - final int min = 1 + (int) aPC.getTotalBonusTo("HD", "MIN"); - final int max = - hitDiceSize + (int) aPC.getTotalBonusTo("HD", "MAX"); - - for (int x = 0; x < hitDice; ++x) - { - setHitPoint(x, Integer.valueOf(Globals.rollHP(min, max, - getKeyName(), x + 1))); - } - } - - aPC.setCurrentHP(aPC.hitPoints()); - } - - @Override - public int getSR(final PlayerCharacter aPC) - { - int intSR; - - //if there's a current PC, go ahead and evaluate the formula - if ((getSRFormula() != null) && (aPC != null)) - { - return aPC.getVariableValue(getSRFormula(), "").intValue(); - } - - //otherwise do what we can - try - { - //try to convert the string to an int to return - intSR = Integer.parseInt(getSRFormula()); - } - catch (NumberFormatException nfe) - { - //if the parseInt failed then just punt... return 0 - intSR = 0; - } - - return intSR; - } - - public String getMonsterClass(final PlayerCharacter aPC) - { - return getMonsterClass(aPC, true); - } - - int calcHitPoints(final int iConMod) - { - int total = 0; - - for (int i = 0; i <= hitDice; i++) - { - if (getHitPoint(i).intValue() > 0) - { - int iHp = getHitPoint(i).intValue() + iConMod; - - if (iHp < 1) - { - iHp = 1; - } - - total += iHp; - } - } - - return total; - } - boolean canBeAlignment(final String aString) { if (hasPrerequisites()) Modified: Trunk/pcgen/code/src/java/pcgen/core/SettingsHandler.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SettingsHandler.java 2008-07-15 20:33:17 UTC (rev 7174) +++ Trunk/pcgen/code/src/java/pcgen/core/SettingsHandler.java 2008-07-15 22:26:29 UTC (rev 7175) @@ -213,7 +213,6 @@ private static final File tempPath = new File(getTmpPath()); private static boolean toolTipTextShown = true; private static boolean useHigherLevelSlotsDefault = false; - private static boolean useMonsterDefault = true; private static boolean wantToLoadMasterworkAndMagic = false; private static int nameDisplayStyle = Constants.DISPLAY_STYLE_NAME; private static boolean weaponProfPrintout = Constants.PRINTOUT_WEAPONPROF; @@ -1013,16 +1012,6 @@ return allowMetamagicInCustomizer; } - public static void setMonsterDefault(final boolean aBool) - { - useMonsterDefault = aBool; - } - - public static boolean isMonsterDefault() - { - return useMonsterDefault; - } - public static void setNameDisplayStyle(final int style) { nameDisplayStyle = style; @@ -1189,7 +1178,6 @@ setMaxPotionSpellLevel(getPCGenOption("maxPotionSpellLevel", 3)); //$NON-NLS-1$ setMaxWandSpellLevel(getPCGenOption("maxWandSpellLevel", 4)); //$NON-NLS-1$ setMetamagicAllowedInEqBuilder(getPCGenOption("allowMetamagicInCustomizer", false)); //$NON-NLS-1$ - setMonsterDefault(getPCGenOption("useMonsterDefault", false)); //$NON-NLS-1$ setOptionAllowedInSources(getPCGenOption("optionAllowedInSources", true)); //$NON-NLS-1$ setPccFilesLocation(new File(expandRelativePath(getPCGenOption("pccFilesLocation", //$NON-NLS-1$ System.getProperty("user.dir") + File.separator + "data")))); //$NON-NLS-1$ //$NON-NLS-2$ @@ -1638,7 +1626,6 @@ setPCGenOption("TemplateTab.selectedListMode", getTemplateSelTab_ListMode()); //$NON-NLS-1$ setPCGenOption("toolTipTextShown", isToolTipTextShown()); //$NON-NLS-1$ setPCGenOption("useHigherLevelSlotsDefault", isUseHigherLevelSlotsDefault()); //$NON-NLS-1$ - setPCGenO... [truncated message content] |