From: <za...@us...> - 2008-07-24 11:32:10
|
Revision: 7230 http://pcgen.svn.sourceforge.net/pcgen/?rev=7230&view=rev Author: zaister Date: 2008-07-24 11:32:19 +0000 (Thu, 24 Jul 2008) Log Message: ----------- [ 1999270 ] [PATHFINDER] FAVCLASS:CHOOSE improvements Implement CHOOSE:CLASS, however race object cannot call choosers directly - need workaround (First version, to be improved upon) Issue#: 1999270 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-07-24 11:31:17 UTC (rev 7229) +++ Trunk/pcgen/code/pluginbuild.xml 2008-07-24 11:32:19 UTC (rev 7230) @@ -2807,6 +2807,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${lstplugins.dir}/ChooseToken-CLASS.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/choose/ClassToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${lstplugins.dir}/ChooseToken-DOMAIN.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java 2008-07-24 11:31:17 UTC (rev 7229) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java 2008-07-24 11:32:19 UTC (rev 7230) @@ -354,6 +354,7 @@ classLookup = new HashMap<String, String>(); classLookup.put("ARMORTYPE", ArmorTypeChoiceManager.class.getName()); classLookup.put("CSKILLS", ClassSkillsChoiceManager.class.getName()); + classLookup.put("CLASS", ClassChoiceManager.class.getName()); classLookup.put("DOMAIN", DomainChoiceManager.class.getName()); classLookup.put("EQUIPTYPE", EquipmentTypeChoiceManager.class.getName()); classLookup.put("FEATADD", FeatAddChoiceManager.class.getName()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-07-27 19:31:31
|
Revision: 7252 http://pcgen.svn.sourceforge.net/pcgen/?rev=7252&view=rev Author: thpr Date: 2008-07-27 19:31:36 +0000 (Sun, 27 Jul 2008) Log Message: ----------- remove deprecated SA: ADD:SA Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml 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/levelability/LevelAbility.java Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilitySpecial.java Trunk/pcgen/code/src/java/pcgen/gui/AddSpecialAbility.java Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSpecialAbilities.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/test/plugin/PluginBuildTest.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SAToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SaLst.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/pluginbuild.xml 2008-07-27 19:31:36 UTC (rev 7252) @@ -6280,7 +6280,7 @@ </target> <target name="jar-deprecated-plugin" depends="manifest" description="Build (Link) plugin jar files"> - <jar jarfile="${lstplugins.dir}/ClassLstToken-HASSPELLFORMULA.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <jar jarfile="${lstplugins.dir}/ClassLstToken-DEPRECATED-HASSPELLFORMULA.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> <include name="plugin/lsttokens/deprecated/HasspellformulaToken.class" /> Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -2444,20 +2444,6 @@ } } - final List<SpecialAbility> specialAbilityList = - getListFor(ListKey.SPECIAL_ABILITY); - - if ((specialAbilityList != null) && (specialAbilityList.size() != 0)) - { - for (SpecialAbility sa : specialAbilityList) - { - final String src = sa.getSASource(); - final String lev = src.substring(src.lastIndexOf('|') + 1); - pccTxt.append(lineSep).append(lev).append("\tSAB:").append( - sa.toString()); - } - } - List<SpecialAbility> saList = new ArrayList<SpecialAbility>(); addSABToList(saList, null); for (SpecialAbility sa : saList) @@ -3323,77 +3309,6 @@ } /* - * REFACTOR TO DELETEMETHOD I don't understand why the .CLEAR related - * functionality only exists in PCClass and not other PObjects??? Perhaps - * this should be up in PObject and therefore not be necessary here?... No, - * I suspect this is level related based on how SpecialAbilitys store their - * source and then use that to check if the PC qualifies for the Special - * Ability. Hopefully that String processing can be factored out and this - * can only load the appropriate SpecialAbilitys into the PCClassLevels that - * a PlayerCharacter has. - */ - @Override - public List<SpecialAbility> addSpecialAbilitiesToList( - final List<SpecialAbility> aList, final PlayerCharacter aPC) - { - final List<SpecialAbility> specialAbilityList = - getListFor(ListKey.SPECIAL_ABILITY); - - if ((specialAbilityList == null) || specialAbilityList.isEmpty()) - { - return aList; - } - - final List<SpecialAbility> bList = new ArrayList<SpecialAbility>(); - - for (SpecialAbility sa : specialAbilityList) - { - if (sa.pcQualifiesFor(aPC)) - { - final String saKey = sa.getKeyName(); - if (saKey.startsWith(".CLEAR")) - { - if (".CLEARALL".equals(saKey)) - { - bList.clear(); - } - else if (saKey.startsWith(".CLEAR.")) - { - final String saToRemove = saKey.substring(7); - - for (int itIdx = bList.size() - 1; itIdx >= 0; --itIdx) - { - final String subKey = bList.get(itIdx).getKeyName(); - - if (subKey.equals(saToRemove)) - { - bList.remove(itIdx); - } - else if (subKey.indexOf('(') >= 0) - { - if (subKey.substring(0, subKey.indexOf('(')) - .trim().equals(saToRemove)) - { - bList.remove(itIdx); - } - } - } - } - //CONSIDER else what? No error checking here? - - continue; - } - - bList.add(sa); - } - } - - aList.addAll(bList); - - return aList; - } - - /* * FINALPCCLASSLEVELONLY This is only part of the level, as the skill list is * calculated based on other factors, it is not a Tag */ @@ -4217,30 +4132,6 @@ // Go through the specialty list (SA) and adjust the class to the new // name // - final List<SpecialAbility> specialAbilityList = - getListFor(ListKey.SPECIAL_ABILITY); - - if (specialAbilityList != null) - { - for (int idx = specialAbilityList.size() - 1; idx >= 0; --idx) - { - SpecialAbility sa = specialAbilityList.get(idx); - - // TODO - This looks like it should have always been a reference - // to getSASource not getSource. - if (sa.getSASource().length() != 0) - // if (sa.getSource().length() != 0) - { - removeSpecialAbility(sa); - sa = - new SpecialAbility(sa.getKeyName(), sa - .getSASource(), sa.getSADesc()); - sa.setQualificationClass(oldClass, newClass); - addSpecialAbilityToList(sa); - } - } - } - for (int lev : mapChar.getSecondaryKeySet(MapKey.SAB)) { for (SpecialAbility sa : mapChar.getListFor(MapKey.SAB, lev)) @@ -5324,12 +5215,6 @@ setRegionString(otherClass.getRegionString()); } - for (SpecialAbility sa : otherClass - .getSafeListFor(ListKey.SPECIAL_ABILITY)) - { - addSpecialAbilityToList(sa); - } - for (int lev : otherClass.mapChar.getSecondaryKeySet(MapKey.SAB)) { for (SpecialAbility sa : otherClass.mapChar.getListFor(MapKey.SAB, Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -845,15 +845,6 @@ } /** - * Add the SA to the character list - * @param sa - */ - public final void addSpecialAbilityToList(final SpecialAbility sa) - { - addToListFor(ListKey.SPECIAL_ABILITY, sa); - } - - /** * Add to the list of temporary bonuses * @param aBonus */ @@ -1520,24 +1511,6 @@ } /** - * Get the SA by key - * @param aKey - * @return the SA - */ - public final SpecialAbility getSpecialAbilityKeyed(final String aKey) - { - for ( SpecialAbility sa : getListFor(ListKey.SPECIAL_ABILITY) ) - { - if (sa.getKeyName().equalsIgnoreCase(aKey)) - { - return sa; - } - } - - return null; - } - - /** * Returns a hardcoded "POBJECT|" + name of this object * @return "POBJECT|" + name of this object */ @@ -1582,14 +1555,6 @@ return spellSupport.getSpellList(-1); } - /** - * Clear the special ability list - */ - public final void clearSpecialAbilityList() - { - removeListFor(ListKey.SPECIAL_ABILITY); - } - public void addSAB(SpecialAbility sa, int level) { mapChar.addToListFor(MapKey.SAB, level, sa); @@ -2623,18 +2588,9 @@ txt.append(writer); } - List<SpecialAbility> specialAbilityList = getListFor(ListKey.SPECIAL_ABILITY); - if (!(this instanceof PCClass) && (specialAbilityList != null) && (specialAbilityList.size() != 0)) - { - for (SpecialAbility sa : specialAbilityList) - { - txt.append("\tSAB:").append(sa.toString()); - } - } - if (!(this instanceof PCClass)) { - specialAbilityList = new ArrayList<SpecialAbility>(); + ArrayList<SpecialAbility> specialAbilityList = new ArrayList<SpecialAbility>(); addSABToList(specialAbilityList, null); for (SpecialAbility sa : specialAbilityList) { @@ -3587,14 +3543,6 @@ } /** - * Remove the speical ability from the list - * @param sa - */ - public void removeSpecialAbility(SpecialAbility sa) { - removeFromListFor(ListKey.SPECIAL_ABILITY, sa); - } - - /** * Set a string referenced by a key * @param key * @param s Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -3102,43 +3102,7 @@ continue; } - List<SpecialAbility> al = new ArrayList<SpecialAbility>(); - al = aPObj.addSpecialAbilitiesToList(al, this); - ArrayList<SpecialAbility> masterList = - new ArrayList<SpecialAbility>(al); - for (SpecialAbility sa : masterList) - { - if (sa.getKeyName().startsWith(".CLEAR.") && sa.qualifies(this)) - { - al.remove(sa); - String key = sa.getKeyName().substring(7); - for (Iterator<SpecialAbility> it = al.iterator(); it - .hasNext();) - { - String saKey = it.next().getKeyName(); - if (saKey.startsWith(key)) - { - int baseLength = key.length(); - int thisLength = saKey.length(); - if (thisLength == baseLength) - { - it.remove(); - } - else if (thisLength > baseLength) - { - if (saKey.charAt(baseLength + 1) == '(' - || thisLength + 1 > baseLength - && saKey.charAt(baseLength + 1) == ' ' - && saKey.charAt(baseLength + 2) == '(') - { - it.remove(); - } - } - } - } - } - } - aList.addAll(al); + aPObj.addSpecialAbilitiesToList(aList, this); aPObj.addSABToList(aList, this); } // for (CDOMObject cdo : getCDOMObjectList()) Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbility.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -22,6 +22,7 @@ */ package pcgen.core.levelability; +import pcgen.cdom.enumeration.ListKey; import pcgen.core.*; import pcgen.core.pclevelinfo.PCLevelInfo; import pcgen.core.prereq.PrereqHandler; @@ -320,7 +321,7 @@ final SpecialAbility sa = new SpecialAbility( zString, "PCCLASS|" + owner.getKeyName() + '|' + level); - owner.addSpecialAbilityToList(sa); + owner.addToListFor(ListKey.SPECIAL_ABILITY, sa); owner.addSave(zString); } } Modified: Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilitySpecial.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilitySpecial.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/core/levelability/LevelAbilitySpecial.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -20,6 +20,7 @@ */ package pcgen.core.levelability; +import pcgen.cdom.enumeration.ListKey; import pcgen.core.*; import pcgen.core.pclevelinfo.PCLevelInfo; import pcgen.util.chooser.ChooserInterface; @@ -104,7 +105,7 @@ sa = new SpecialAbility(selection); } - this.owner.addSpecialAbilityToList(sa); + this.owner.addToListFor(ListKey.SPECIAL_ABILITY, sa); this.owner.addSave(selection); } return true; Modified: Trunk/pcgen/code/src/java/pcgen/gui/AddSpecialAbility.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/AddSpecialAbility.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/gui/AddSpecialAbility.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -25,6 +25,7 @@ **/ package pcgen.gui; +import pcgen.cdom.enumeration.ListKey; import pcgen.core.Globals; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; @@ -154,7 +155,7 @@ PCClass aClass = aPC.getClassList().get(0); String aString = (selectedValue).trim(); SpecialAbility sa = new SpecialAbility(aString, "PCCLASS|" + aClass.getKeyName() + "|0"); - aClass.addSpecialAbilityToList(sa); + aClass.addToListFor(ListKey.SPECIAL_ABILITY, sa); aClass.addSave(aString); if (owner != null) Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/ClassLevelPanel.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -296,22 +296,7 @@ } } - List<SpecialAbility> saList = obj.getListFor(ListKey.SPECIAL_ABILITY); - - if ((saList != null) && (saList.size() != 0)) - { - for (Iterator<SpecialAbility> se = saList.iterator(); se.hasNext();) - { - final SpecialAbility sa = se.next(); - String src = sa.getSASource(); - String lev = src.substring(src.lastIndexOf('|') + 1); - - LevelTag lt = new LevelTag(lev, LevelTag.TAG_SAB, sa.toString()); - levelTagList.add(lt); - } - } - - saList = new ArrayList<SpecialAbility>(); + List<SpecialAbility> saList = new ArrayList<SpecialAbility>(); obj.addSABToList(saList, null); if (!saList.isEmpty()) Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -633,7 +633,6 @@ // thisPObject.setDR(".CLEAR"); thisPObject.clearDR(); thisPObject.clearPrerequisiteList(); - thisPObject.clearSpecialAbilityList(); thisPObject.clearAllSABLists(); thisPObject.clearSRList(); thisPObject.getSpellSupport().clearSpellList(); @@ -3146,27 +3145,7 @@ } } - List<SpecialAbility> saList = thisPObject.getListFor(ListKey.SPECIAL_ABILITY); - - if ((saList != null) && (saList.size() != 0) && (anEditType != EditorConstants.EDIT_CLASS)) - { - for (Iterator<SpecialAbility> e = saList.iterator(); e.hasNext();) - { - SpecialAbility specialAbility = e.next(); - String saSource = specialAbility.getSASource(); - String saLevel = saSource.substring(saSource.indexOf("|") + 1); - String saTxt = specialAbility.toString(); - - if (saLevel.length() > 0) - { - saLevel += "|"; - } - - selectedList.add("SAB:" + saLevel + saTxt); - } - } - - saList = new ArrayList<SpecialAbility>(); + List<SpecialAbility> saList = new ArrayList<SpecialAbility>(); thisPObject.addSABToList(saList, null); if ((saList.size() != 0) && (anEditType != EditorConstants.EDIT_CLASS)) Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSpecialAbilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSpecialAbilities.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSpecialAbilities.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -623,7 +623,7 @@ } aClass.removeSave(sa.getKeyName()); - aClass.removeSpecialAbility(sa); + aClass.removeFromListFor(ListKey.SPECIAL_ABILITY, sa); } // pc = null; // forces everything to re-display it's broken Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer0Parser.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -475,7 +475,7 @@ + cTok.nextToken()); } - aClass.addSpecialAbilityToList(sa); + aClass.addToListFor(ListKey.SPECIAL_ABILITY, sa); } } } @@ -495,7 +495,7 @@ } //sa.setSource(src); - aClass.addSpecialAbilityToList(sa); + aClass.addToListFor(ListKey.SPECIAL_ABILITY, sa); } if (!aClass.containsInList(saveKey, token) Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -874,35 +874,39 @@ for (String save : pcClass.getSafeListFor(ListKey.SAVE)) { - final SpecialAbility specialAbility = - pcClass.getSpecialAbilityKeyed(save); - - if (specialAbility != null) + boolean found = false; + for ( SpecialAbility sa : pcClass.getListFor(ListKey.SPECIAL_ABILITY) ) { - int relevantLevel = 1; - final String source = specialAbility.getSASource(); - - try + if (sa.getKeyName().equalsIgnoreCase(save)) { - relevantLevel = - Integer.parseInt(source.substring(source - .lastIndexOf('|') + 1)); + found = true; + int relevantLevel = 1; + final String source = sa.getSASource(); - if (relevantLevel < 0) + try { - relevantLevel = 1; + relevantLevel = + Integer.parseInt(source.substring(source + .lastIndexOf('|') + 1)); + + if (relevantLevel < 0) + { + relevantLevel = 1; + } } + catch (NumberFormatException nfe) + { + Logging.errorPrint("Error parsing SA relevant level: " //$NON-NLS-1$ + + source.substring(source.lastIndexOf('|') + 1)); + } + + specials.put(pcClass.getKeyName() + TAG_SA + + (relevantLevel - 1), sa.getKeyName()); + break; } - catch (NumberFormatException nfe) - { - Logging.errorPrint("Error parsing SA relevant level: " //$NON-NLS-1$ - + source.substring(source.lastIndexOf('|') + 1)); - } + } - specials.put(pcClass.getKeyName() + TAG_SA - + (relevantLevel - 1), specialAbility.getKeyName()); - } - else + if (!found) { specials.put(key, save); } Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -1666,7 +1666,7 @@ if (!thePC.hasSpecialAbility(specialAbilityName)) { - aPCClass.addSpecialAbilityToList(specialAbility); + aPCClass.addToListFor(ListKey.SPECIAL_ABILITY, specialAbility); } if (!aPCClass.containsInList(ListKey.SAVE, Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SAToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SAToken.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SAToken.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -1,62 +0,0 @@ -/* - * Copyright 2007 (C) Thomas Parker <th...@us...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package plugin.lsttokens.deprecated; - -import pcgen.cdom.base.Constants; -import pcgen.core.PObject; -import pcgen.persistence.lst.AddLstToken; -import pcgen.util.Logging; - -public class SAToken implements AddLstToken -{ - - public boolean parse(PObject target, String value, int level) - { - Logging.deprecationPrint("ADD:SA " - + "is deprecated. Please use ADD:SAB"); - int pipeLoc = value.indexOf(Constants.PIPE); - if (pipeLoc == -1) - { - Logging.deprecationPrint("Lack of a SUBTOKEN for ADD:SA " - + "is prohibited in new syntax."); - Logging.deprecationPrint("Please use ADD:SA|name|[count|]X,X"); - return false; - } - String subToken = value.substring(0, pipeLoc); - String countString; - String items; - int lastPipeLoc = value.lastIndexOf(Constants.PIPE); - if (lastPipeLoc == pipeLoc) - { - items = value; - countString = "1"; - } - else - { - items = value.substring(pipeLoc + 1, lastPipeLoc); - countString = value.substring(lastPipeLoc + 1); - } - target.addAddList(level, subToken + "(" + items + ")" + countString); - return true; - } - - public String getTokenName() - { - return "SA"; - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SaLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SaLst.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/SaLst.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -1,151 +0,0 @@ -/* - * Created on Sep 2, 2005 - * - */ -package plugin.lsttokens.deprecated; - -import java.util.StringTokenizer; - -import pcgen.core.Globals; -import pcgen.core.PCClass; -import pcgen.core.PObject; -import pcgen.core.Skill; -import pcgen.core.SpecialAbility; -import pcgen.core.prereq.Prerequisite; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.DeprecatedToken; -import pcgen.persistence.lst.GlobalLstToken; -import pcgen.persistence.lst.prereq.PreParserFactory; -import pcgen.util.Logging; - -/** - * @author djones4 - * - */ -public class SaLst implements GlobalLstToken, DeprecatedToken -{ - - public String getTokenName() - { - return "SA"; - } - - public boolean parse(PObject obj, String value, int anInt) - { - if (obj instanceof Skill) - { - Logging.errorPrint("SA not supported in Skills"); - return false; - } - parseSpecialAbility(obj, value, anInt); - return true; - } - - /** - * This method sets the special abilities granted by this [object]. For - * efficiency, avoid calling this method except from I/O routines. - * - * @param obj - * the PObject that is to receive the new SpecialAbility - * @param aString - * String of special abilities delimited by pipes - * @param level - * int level at which the ability is gained - */ - public void parseSpecialAbility(PObject obj, String aString, - int level) - { - StringTokenizer aTok = new StringTokenizer(aString, "|", true); - - if (!aTok.hasMoreTokens()) - { - return; - } - - StringBuffer saName = new StringBuffer(); - saName.append(aTok.nextToken()); - - SpecialAbility sa = new SpecialAbility(); - - boolean isPre = false; - - while (aTok.hasMoreTokens()) - { - String cString = aTok.nextToken(); - - // Check to see if it's a PRExxx: tag - if (PreParserFactory.isPreReqString(cString)) - { - isPre = true; - try - { - PreParserFactory factory = PreParserFactory.getInstance(); - Prerequisite prereq = factory.parse(cString); - if (obj instanceof PCClass - && "var".equals(prereq.getKind())) - { - prereq.setSubKey("CLASS:" + obj.getKeyName()); - } - sa.addPrerequisite(prereq); - } - catch (PersistenceLayerException ple) - { - Logging.errorPrint(ple.getMessage(), ple); - } - } - else - { - if (isPre) - { - if (!"|".equals(cString)) - { - Logging.errorPrint("Invalid " + getTokenName() + ": " - + aString); - Logging - .errorPrint(" PRExxx must be at the END of the Token"); - isPre = false; - } - } - saName.append(cString); - } - - if (".CLEAR".equals(cString)) - { - obj.clearSpecialAbilityList(); - saName.setLength(0); - } - } - - sa.setName(saName.toString()); - - if (level >= 0) - { - try - { - sa.addPrerequisite(PreParserFactory.createLevelPrereq(obj, level)); - } - catch (PersistenceLayerException notUsed) - { - Logging.errorPrint("Failed to assign level prerequisite.", notUsed); - } - } - if (obj instanceof PCClass) - { - sa.setSASource("PCCLASS=" + obj.getKeyName() + "|" + level); - } - - if (!aString.equals(".CLEAR")) - { - Globals.addToSASet(sa); - obj.addSpecialAbilityToList(sa); - } - } - - public String getMessage(PObject obj, String value) - { - return "SA has been deprecated due to cross-level interaction.\n " + - "Please use SAB: for most situations.\n " + - "If you are using .CLEAR in an SA to remove items granted\n " + - " at a lower level, you must now use a PRExxx token attached to the SAB"; - } -} Modified: Trunk/pcgen/code/src/test/plugin/PluginBuildTest.java =================================================================== --- Trunk/pcgen/code/src/test/plugin/PluginBuildTest.java 2008-07-27 13:02:06 UTC (rev 7251) +++ Trunk/pcgen/code/src/test/plugin/PluginBuildTest.java 2008-07-27 19:31:36 UTC (rev 7252) @@ -80,26 +80,26 @@ checkPluginJars(jarPrefix, sourceFolder, jarFolder); } -// /** -// * Check for the presence of all deprecated token plugins. -// */ -// public void testDeprecatedPlugins() -// { -// String jarPrefix = "^[a-zA-Z]*-DEPRECATED-"; -// String sourceSuffix = "Lst"; -// File sourceFolder = new File("code/src/java/plugin/lsttokens/deprecated"); -// File jarFolder[] = new File[]{new File("plugins/lstplugins"), new File("plugins/preplugins")}; -// assertTrue("Source folder " + sourceFolder.getAbsolutePath() + " should be a directory", sourceFolder.isDirectory()); -// String[] sources = sourceFolder.list(); -// List<String> srcList = new ArrayList<String>(); -// srcList.addAll(Arrays.asList(sources)); -// srcList.remove("PreDefaultMonsterTester.java"); -// srcList.remove("PreDefaultMonsterWriter.java"); -// sources = (String[]) srcList.toArray(sources); -// String [][] exceptions = new String[][] { -// }; -// checkPluginJarsByRegex(jarPrefix, jarFolder, sourceSuffix, sources, exceptions); -// } + /** + * Check for the presence of all deprecated token plugins. + */ + public void testDeprecatedPlugins() + { + String jarPrefix = "^[a-zA-Z]*-DEPRECATED-"; + String sourceSuffix = "Lst"; + File sourceFolder = new File("code/src/java/plugin/lsttokens/deprecated"); + File jarFolder[] = new File[]{new File("plugins/lstplugins"), new File("plugins/preplugins")}; + assertTrue("Source folder " + sourceFolder.getAbsolutePath() + " should be a directory", sourceFolder.isDirectory()); + String[] sources = sourceFolder.list(); + List<String> srcList = new ArrayList<String>(); + srcList.addAll(Arrays.asList(sources)); + srcList.remove("PreDefaultMonsterTester.java"); + srcList.remove("PreDefaultMonsterWriter.java"); + sources = (String[]) srcList.toArray(sources); + String [][] exceptions = new String[][] { + }; + checkPluginJarsByRegex(jarPrefix, jarFolder, sourceSuffix, sources, exceptions); + } /** * Check for the presence of all export token plugins. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <za...@us...> - 2008-08-04 17:08:11
|
Revision: 7327 http://pcgen.svn.sourceforge.net/pcgen/?rev=7327&view=rev Author: zaister Date: 2008-08-04 17:07:48 +0000 (Mon, 04 Aug 2008) Log Message: ----------- Some more favored class work: - FAVCLASS:CHOOSE:ANY works now as documented, i.e. chooses the character's highest level base class as his favored class - When favored classes aren't fixed but can be selected by the player, the choice should also be persisted in the pcg file. This is now implemented. Test characters will still need to be fixed. - New output token FAVOREDCLASS. Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java Trunk/pcgen/code/src/java/pcgen/io/IOConstants.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredClassToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-08-04 16:52:48 UTC (rev 7326) +++ Trunk/pcgen/code/pluginbuild.xml 2008-08-04 17:07:48 UTC (rev 7327) @@ -365,6 +365,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${outputplugins.dir}/ExportToken-FAVOREDCLASS.jar" manifest="${src.java.dir}/plugin/exporttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/exporttokens/FavoredClassToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${outputplugins.dir}/ExportToken-FAVOREDLIST.jar" manifest="${src.java.dir}/plugin/exporttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-08-04 16:52:48 UTC (rev 7326) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-08-04 17:07:48 UTC (rev 7327) @@ -5777,23 +5777,24 @@ */ public int getFavoredClassLevel() { - final SortedSet<String> aList = getFavoredClasses(); int level = 0; - - if (aList.contains("ANY")) + if (getRace().getFavoredClass().equalsIgnoreCase("ANY")) { for (PCClass pcClass : classList) { - level = Math.max(level, pcClass.getLevel()); + if (pcClass.isType("Base")) + { + level = Math.max(level, pcClass.getLevel()); + } } } else { for (PCClass pcClass : classList) { - if (aList.contains(pcClass.getDisplayClassName())) + if (pcClass.getDisplayName().equals(getStringFor(StringKey.RACIAL_FAVORED_CLASS))) { - level += pcClass.getLevel(); + level = pcClass.getLevel(); } } } @@ -6379,8 +6380,12 @@ addNaturalWeapons(race.getNaturalWeapons()); getAutoLanguages(); - getRacialFavoredClasses(); + if (!isImporting()) + { + getRacialFavoredClasses(); + } + selectTemplates(race, isImporting()); // gets and adds templates race.chooseLanguageAutos(isImporting(), this); Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java 2008-08-04 16:52:48 UTC (rev 7326) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/InfoSummary.java 2008-08-04 17:07:48 UTC (rev 7327) @@ -78,6 +78,7 @@ import pcgen.cdom.enumeration.IntegerKey; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.enumeration.StringKey; import pcgen.core.GameMode; import pcgen.core.Globals; import pcgen.core.Movement; @@ -932,14 +933,25 @@ { StringBuffer favClassSet = new StringBuffer(); String fav = aRace.getFavoredClass(); - StringTokenizer tok = new StringTokenizer(fav, Constants.PIPE); - while (tok.hasMoreTokens()) + if (fav.startsWith("CHOOSE:")) { - if (favClassSet.length() != 0) + fav = fav.substring(7); + } + if (fav.equalsIgnoreCase("ALL")) + { + favClassSet.append("Any"); + } + else + { + StringTokenizer tok = new StringTokenizer(fav, Constants.PIPE); + while (tok.hasMoreTokens()) { - favClassSet.append(", "); + if (favClassSet.length() != 0) + { + favClassSet.append(", "); + } + favClassSet.append(tok.nextToken()); } - favClassSet.append(tok.nextToken()); } String favClassName = favClassSet.length() == 0 ? @@ -1107,6 +1119,15 @@ } // + // Show character's favored class + // + String favClass = pc.getStringFor(StringKey.RACIAL_FAVORED_CLASS); + if (favClass != null && favClass != "" && !favClass.equalsIgnoreCase("ANY")) + { + statBuf + .append("<br><b>").append(PropertyFactory.getString("in_sumFavoredClass")).append("</b>: ").append(favClass); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + // // Show character's current size // statBuf Modified: Trunk/pcgen/code/src/java/pcgen/io/IOConstants.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/IOConstants.java 2008-08-04 16:52:48 UTC (rev 7326) +++ Trunk/pcgen/code/src/java/pcgen/io/IOConstants.java 2008-08-04 17:07:48 UTC (rev 7327) @@ -221,6 +221,8 @@ /** Character feats */ String TAG_FEAT = "FEAT"; + /** FAVORED CLASS */ + String TAG_FAVOREDCLASS = "FAVOREDCLASS"; /** FEATLIST */ String TAG_FEATLIST = "FEATLIST"; /** FEATPOOL */ Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2008-08-04 16:52:48 UTC (rev 7326) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2008-08-04 17:07:48 UTC (rev 7327) @@ -44,6 +44,7 @@ import pcgen.cdom.content.TransitionChoice; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.enumeration.StringKey; import pcgen.cdom.list.ClassSpellList; import pcgen.core.Ability; import pcgen.core.AbilityCategory; @@ -236,6 +237,7 @@ appendStatLines(buffer); appendAlignmentLine(buffer); appendRaceLine(buffer); + appendFavoredClassLine(buffer); /* * #Character Class(es) @@ -1773,6 +1775,14 @@ buffer.append(LINE_SEP); } + private void appendFavoredClassLine(StringBuffer buffer) + { + buffer.append(TAG_FAVOREDCLASS).append(':'); + buffer.append(EntityEncoder.encode(thePC.getStringFor(StringKey.RACIAL_FAVORED_CLASS))); + buffer.append(LINE_SEP); + } + + private void appendResidenceLine(StringBuffer buffer) { buffer.append(TAG_CITY).append(':'); Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java 2008-08-04 16:52:48 UTC (rev 7326) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java 2008-08-04 17:07:48 UTC (rev 7327) @@ -676,6 +676,11 @@ parseRaceLine(cache.get(TAG_RACE).get(0)); } + if (cache.containsKey(TAG_FAVOREDCLASS)) + { + parseFavoredClassLine(cache.get(TAG_FAVOREDCLASS).get(0)); + } + /* * #System Information * CAMPAIGNS:>:-delimited list< @@ -3235,6 +3240,14 @@ // adjust for more information according to PCGVer1Creator.appendRaceLine } + private void parseFavoredClassLine(final String line) + { + String decode = EntityEncoder.decode(line.substring(TAG_FAVOREDCLASS.length() + 1)); + thePC.setStringFor(StringKey.RACIAL_FAVORED_CLASS, + decode); + } + + /** * Translate the string of hitpoint values into a map. * @param race_name The name of the race, for error reporting. Added: Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredClassToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredClassToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredClassToken.java 2008-08-04 17:07:48 UTC (rev 7327) @@ -0,0 +1,57 @@ +/* + * AgeToken.java + * Copyright 2003 (C) Devon Jones <sou...@ev...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on December 15, 2003, 12:21 PM + * + * Current Ver: $Revision: 1777 $ + * Last Editor: $Author: jdempsey $ + * Last Edited: $Date: 2006-12-17 05:36:01 +0100 (Sun, 17 Dec 2006) $ + * + */ +package plugin.exporttokens; + +import pcgen.cdom.enumeration.StringKey; +import pcgen.core.PlayerCharacter; +import pcgen.io.ExportHandler; +import pcgen.io.exporttoken.Token; + +/** + * Class handles AGE Token + */ +public class FavoredClassToken extends Token +{ + /** Token name */ + public static final String TOKENNAME = "FAVOREDCLASS"; + + /** + * @see pcgen.io.exporttoken.Token#getTokenName() + */ + public String getTokenName() + { + return TOKENNAME; + } + + /** + * @see pcgen.io.exporttoken.Token#getToken(java.lang.String, pcgen.core.PlayerCharacter, pcgen.io.ExportHandler) + */ + public String getToken(String tokenSource, PlayerCharacter pc, + ExportHandler eh) + { + return pc.getStringFor(StringKey.RACIAL_FAVORED_CLASS); + } +} Property changes on: Trunk/pcgen/code/src/java/plugin/exporttokens/FavoredClassToken.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2008-08-17 04:08:11
|
Revision: 7512 http://pcgen.svn.sourceforge.net/pcgen/?rev=7512&view=rev Author: jdempsey Date: 2008-08-17 04:08:16 +0000 (Sun, 17 Aug 2008) Log Message: ----------- FReq: [4E] ASPECT tag for Abilities and Feats Issue#: 2038169 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityInfoPanel.java Trunk/pcgen/code/src/java/pcgen/io/exporttoken/AbilityToken.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/cdom/helper/Aspect.java Trunk/pcgen/code/src/java/plugin/lsttokens/ability/AspectToken.java Trunk/pcgen/code/src/test/pcgen/cdom/ Trunk/pcgen/code/src/test/pcgen/cdom/helper/ Trunk/pcgen/code/src/test/pcgen/cdom/helper/AspectTest.java Trunk/pcgen/code/src/test/pcgen/io/exporttoken/AbilityTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/AspectTokenTest.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-08-16 23:21:37 UTC (rev 7511) +++ Trunk/pcgen/code/pluginbuild.xml 2008-08-17 04:08:16 UTC (rev 7512) @@ -2244,6 +2244,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${lstplugins.dir}/AbilityLstToken-ASPECT.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/ability/AspectToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${lstplugins.dir}/AbilityLstToken-BENEFIT.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-08-16 23:21:37 UTC (rev 7511) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-08-17 04:08:16 UTC (rev 7512) @@ -30,6 +30,7 @@ import pcgen.cdom.base.TransitionChoice; import pcgen.cdom.content.KnownSpellIdentifier; import pcgen.cdom.content.LevelCommandFactory; +import pcgen.cdom.helper.Aspect; import pcgen.cdom.helper.AttackCycle; import pcgen.cdom.helper.PointCost; import pcgen.cdom.helper.Qualifier; @@ -76,6 +77,7 @@ */ public final class ListKey<T> { + public static final ListKey<Aspect> ASPECT = new ListKey<Aspect>(); /** CLASS_SKILLS - a ListKey */ public static final ListKey<String> CLASS_SKILLS = new ListKey<String>(); /** CROSS_CLASS_SKILLS - a ListKey */ Added: Trunk/pcgen/code/src/java/pcgen/cdom/helper/Aspect.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/helper/Aspect.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/cdom/helper/Aspect.java 2008-08-17 04:08:16 UTC (rev 7512) @@ -0,0 +1,364 @@ +/* + * Aspect.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 16/08/2008 16:36:13 + * + * $Id: $ + */ +package pcgen.cdom.helper; + +import java.util.ArrayList; +import java.util.List; + +import pcgen.cdom.base.Constants; +import pcgen.core.Ability; +import pcgen.core.AbilityCategory; +import pcgen.core.PlayerCharacter; +import pcgen.util.Logging; + +/** + * The Class <code>Aspect</code> represents a generic name field for + * abilities. It is a name/value characteristic allowing substitution of + * values. + * + * <p>Variable substitution is performed by replacing a placeholder indicated + * by %# with the #th variable in the variable list. For example, the string + * <br /><code>"This is %1 variable %3 %2"</code> + * <br />would be replaced with the string "This is a variable substitution + * string" if the variable list was "a","string", + * "substitution". + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + * + * @since 5.15.2 + */ +public class Aspect +{ + /** + * The name of the name stored in this Aspect. + */ + private final String name; + + private List<String> theComponents = new ArrayList<String>(); + private List<String> theVariables = null; + + private static final String VAR_NAME = "%NAME"; //$NON-NLS-1$ + private static final String VAR_CHOICE = "%CHOICE"; //$NON-NLS-1$ + private static final String VAR_LIST = "%LIST"; //$NON-NLS-1$ + private static final String VAR_FEATS = "%FEAT="; //$NON-NLS-1$ + + private static final String VAR_MARKER = "$$VAR:"; //$NON-NLS-1$ + + /** + * Instantiates a new aspect. + * + * @param name the name of the aspect + * @param aString the aspect string + */ + public Aspect(final String name, final String aString ) + { + if (name == null) + { + throw new IllegalArgumentException( + "Name for Aspect cannot be null"); + } + if (aString == null) + { + throw new IllegalArgumentException( + "Value for Aspect cannot be null"); + } + this.name = name; + + int currentInd = 0; + int percentInd = -1; + while ( (percentInd = aString.indexOf('%', currentInd)) != -1 ) + { + final String preText = aString.substring(currentInd, percentInd); + if ( preText.length() > 0 ) + { + theComponents.add(preText); + } + if ( percentInd == aString.length() - 1) + { + theComponents.add("%"); //$NON-NLS-1$ + return; + } + if ( aString.charAt(percentInd + 1) == '{' ) + { + // This is a bracketed placeholder. The replacement parameter + // is contained within the {} + currentInd = aString.indexOf('}', percentInd + 1) + 1; + final String replacement = aString.substring(percentInd + 1, currentInd); + // For the time being we will only support numerics here. + try + { + Integer.parseInt(replacement); + } + catch (NumberFormatException nfe ) + { + Logging.errorPrintLocalised("Errors.Description.InvalidVariableReplacement", replacement); //$NON-NLS-1$ + } + theComponents.add(VAR_MARKER + replacement); + } + else if ( aString.charAt(percentInd + 1) == '%' ) + { + // This is an escape sequence so we can actually print a % + currentInd = percentInd + 2; + theComponents.add("%"); //$NON-NLS-1$ + } + else + { + // In this case we have an unbracketed placeholder. We will + // walk the string until such time as we no longer have a number + currentInd = percentInd + 1; + while ( currentInd < aString.length() ) + { + final char val = aString.charAt(currentInd); + try + { + Integer.parseInt(String.valueOf(val)); + currentInd++; + } + catch (NumberFormatException nfe) + { + break; + } + } + if ( currentInd > percentInd + 1 ) + { + theComponents.add(VAR_MARKER + aString.substring(percentInd+1, currentInd)); + } + else + { + // We broke out of the variable finding loop without finding + // even a single integer. Assume we have a DESC field that + // is using a % unescaped. + theComponents.add(aString.substring(percentInd, percentInd+1)); + } + } + } + theComponents.add(aString.substring(currentInd)); + } + + /** + * Adds a variable to use in variable substitution. + * + * @param aVariable + */ + public void addVariable( final String aVariable ) + { + if ( theVariables == null ) + { + theVariables = new ArrayList<String>(); + } + theVariables.add( aVariable ); + } + + /** + * Gets the name of the aspect. + * + * @return the aspect name + */ + public String getName() + { + return name; + } + + /** + * Gets the name string after having substituting all variables. + * + * @param aPC The PlayerCharacter used to evaluate formulas. + * @param theOwner the owning Ability object + * + * @return The fully substituted description string. + */ + public String getAspectText( final PlayerCharacter aPC, Ability theOwner ) + { + final StringBuffer buf = new StringBuffer(); + + Ability pcAbility = aPC.getAbilityMatching((Ability)theOwner); + if (pcAbility != null) + { + theOwner = pcAbility; + } + for ( final String comp : theComponents ) + { + if ( comp.startsWith(VAR_MARKER) ) + { + final int ind = Integer.parseInt(comp.substring(VAR_MARKER.length())); + if ( theVariables == null || ind > theVariables.size() ) + { + buf.append(Constants.EMPTY_STRING); + continue; + } + final String var = theVariables.get(ind - 1); + if ( var.equals(VAR_NAME) ) + { + if ( theOwner != null ) + { + buf.append(theOwner.getOutputName()); + } + } + else if ( var.equals(VAR_CHOICE) ) + { + if ( theOwner != null && theOwner.getAssociatedCount() > 0 ) + { + buf.append(theOwner.getAssociated(0)); + } + } + else if ( var.equals(VAR_LIST) ) + { + if ( theOwner != null ) + { + for ( int i = 0; i < theOwner.getAssociatedCount(true); i++ ) + { + if ( i > 0 ) + { + if (theOwner.getAssociatedCount(true) != 2) + { + buf.append(Constants.COMMA + ' '); + } + if (i == theOwner.getAssociatedCount(true) - 1) + { + buf.append(" and "); + } + } + buf.append(theOwner.getAssociated(i, true)); + } + } + } + else if ( var.startsWith(VAR_FEATS) ) + { + final String featName = var.substring(VAR_FEATS.length()); + if (featName.startsWith("TYPE=") || featName.startsWith("TYPE.")) + { + final List<Ability> feats = aPC.getAggregateAbilityList(AbilityCategory.FEAT); + boolean first = true; + for ( final Ability feat : feats ) + { + if (feat.isType(featName.substring(5))) + { + if (!first) + { + buf.append(Constants.COMMA + ' '); + } + buf.append(feat.getDescription(aPC)); + first = false; + } + } + } + else + { + final Ability feat = aPC.getAbilityKeyed(AbilityCategory.FEAT, featName); + buf.append(feat.getDescription(aPC)); + } + } + else if ( var.startsWith("\"") ) //$NON-NLS-1$ + { + buf.append(var.substring(1, var.length() - 1)); + } + else + { + buf.append(aPC.getVariableValue(var, "Aspect").intValue()); //$NON-NLS-1$ + } + } + else + { + buf.append(comp); + } + } + return buf.toString(); + } + + /** + * Gets the Aspect tag in PCC format. + * + * @return A String in LST file format for this description. + * + * @see pcgen.cdom.base.PrereqObject#getPCCText() + */ + public String getPCCText() + { + final StringBuffer buf = new StringBuffer(); + + for ( final String str : theComponents ) + { + if ( str.startsWith(VAR_MARKER) ) + { + final int ind = Integer.parseInt(str.substring(VAR_MARKER.length())); + buf.append('%' + String.valueOf(ind)); + } + else + { + buf.append(str); + } + } + if ( theVariables != null ) + { + for ( final String var : theVariables ) + { + buf.append(Constants.PIPE); + buf.append(var); + } + } + + return buf.toString(); + } + + @Override + public String toString() + { + return getPCCText(); + } + + + @Override + public int hashCode() + { + return theComponents.size() + 7 + * (theVariables == null ? 0 : theVariables.size()); + } + + @Override + public boolean equals(Object o) + { + if (o == this) + { + return true; + } + if (!(o instanceof Aspect)) + { + return false; + } + Aspect other = (Aspect) o; + if (theVariables == null) + { + if (other.theVariables != null) + { + return false; + } + } + return theComponents.equals(other.theComponents) + && (theVariables == null || theVariables.equals(other.theVariables)); + } + +} Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2008-08-16 23:21:37 UTC (rev 7511) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2008-08-17 04:08:16 UTC (rev 7512) @@ -4069,6 +4069,7 @@ TreeTable.Prompt.Search=Enter the name of the item to find +Ability.Info.Aspects=<b>Aspects:</b> {0} Ability.Info.Type=<b>Type:</b> {0} Ability.Info.Cost= <b>Cost:</b> {0} Ability.Info.Multiple=Can be taken more than once Modified: Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityInfoPanel.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityInfoPanel.java 2008-08-16 23:21:37 UTC (rev 7511) +++ Trunk/pcgen/code/src/java/pcgen/gui/tabs/ability/AbilityInfoPanel.java 2008-08-17 04:08:16 UTC (rev 7512) @@ -34,6 +34,7 @@ import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.math.BigDecimal; +import java.util.List; import javax.swing.BorderFactory; import javax.swing.JPanel; @@ -41,7 +42,9 @@ import javax.swing.border.TitledBorder; import pcgen.base.lang.StringUtil; +import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.helper.Aspect; import pcgen.core.Ability; import pcgen.core.AbilityCategory; import pcgen.core.PlayerCharacter; @@ -176,6 +179,25 @@ "in_InfoDescription", //$NON-NLS-1$ theAbility.piDescSubString(thePC))); + if (theAbility.getSizeOfListFor(ListKey.ASPECT) > 0) + { + List<Aspect> aspectList = theAbility.getSafeListFor(ListKey.ASPECT); + StringBuffer buff = new StringBuffer(); + for (Aspect aspect : aspectList) + { + if (buff.length() > 0) + { + buff.append(", "); + } + buff.append(aspect.getName()).append(": "); + buff.append(aspect.getAspectText(thePC, theAbility)); + } + sb.append(BR); + sb.append(PropertyFactory.getFormattedString( + "Ability.Info.Aspects", //$NON-NLS-1$ + buff.toString())); + } + final String bene = theAbility.getBenefits(thePC); if (bene != null && bene.length() > 0) { Modified: Trunk/pcgen/code/src/java/pcgen/io/exporttoken/AbilityToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/exporttoken/AbilityToken.java 2008-08-16 23:21:37 UTC (rev 7511) +++ Trunk/pcgen/code/src/java/pcgen/io/exporttoken/AbilityToken.java 2008-08-17 04:08:16 UTC (rev 7512) @@ -28,7 +28,9 @@ import java.util.List; import java.util.StringTokenizer; +import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.helper.Aspect; import pcgen.core.Ability; import pcgen.core.AbilityCategory; import pcgen.core.Globals; @@ -294,7 +296,7 @@ * Calculate the token value for the ability token. * * @param tokenSource The text of the export token. - * @param pc The character ebign exported. + * @param pc The character being exported. * @param eh The export handler. * @param abilityIndex The location f the ability in the list. * @param aList The list of abilities. @@ -350,6 +352,24 @@ { retString += aAbility.getDefaultSourceString(); } + else if (tokenSource.endsWith(".ASPECT")) + { + retString += getAspectString(pc, aAbility); + } + else if (tokenSource.indexOf(".ASPECT.") > -1) + { + final String key = tokenSource.substring(tokenSource.indexOf(".ASPECT.")+8); + retString += getAspectString(pc, aAbility, key); + } + else if (tokenSource.endsWith(".ASPECTCOUNT")) + { + retString += aAbility.getSizeOfListFor(ListKey.ASPECT); + } + else if (tokenSource.indexOf(".HASASPECT.") > -1) + { + final String key = tokenSource.substring(tokenSource.indexOf(".HASASPECT.")+11); + retString += getHasAspectString(pc, aAbility, key); + } // else if (tokenSource.indexOf(".IS=") != -1) // { // final String type = tokenSource.substring(tokenSource.indexOf(".IS=")+4); @@ -373,6 +393,121 @@ } /** + * Gets the aspect string. + * + * @param pc The character being exported. + * @param ability the ability + * + * @return the aspect string + */ + private String getAspectString(PlayerCharacter pc, Ability ability) + { + List<Aspect> aspectList = ability.getSafeListFor(ListKey.ASPECT); + StringBuffer buff = new StringBuffer(); + for (Aspect aspect : aspectList) + { + if (buff.length() > 0) + { + buff.append(", "); + } + buff.append(aspect.getName()).append(": "); + buff.append(aspect.getAspectText(pc, ability)); + } + return buff.toString(); + } + + /** + * Gets the aspect string for an aspect identified by position or name. + * + * @param pc The character being exported. + * @param ability the ability being queried. + * @param key the key (number or name) of the aspect to retrieve + * + * @return the aspect string + */ + private String getAspectString(PlayerCharacter pc, Ability ability, String key) + { + if (key == null) + { + return ""; + } + + int index = -1; + try + { + index = Integer.parseInt(key); + } + catch (NumberFormatException e) + { + // Ignore exception - expect this + } + Aspect target = null; + if (index > -1) + { + if (index < ability.getSizeOfListFor(ListKey.ASPECT)) + { + target = ability.getElementInList(ListKey.ASPECT, index); + } + } + else + { + target = getAspectByName(ability, key); + } + + StringBuffer buff = new StringBuffer(); + if (target != null) + { + if (index > -1) + { + buff.append(target.getName()).append(": "); + } + buff.append(target.getAspectText(pc, ability)); + } + return buff.toString(); + } + + /** + * Gets the boolean (Y/N) string for the presence of the named aspect. + * + * @param pc The character being exported. + * @param ability the ability being queried. + * @param key the key (name only) of the aspect to check + * + * @return Y if the aspect is present, N if not. + */ + private String getHasAspectString(PlayerCharacter pc, Ability ability, + String key) + { + Aspect target = getAspectByName(ability, key); + return target == null ? "N" : "Y"; + } + + /** + * Retrieve a named aspect from the ability. + * + * @param ability The ability to query + * @param key The name of the aspect + * @return The aspect, or null if not present. + */ + private Aspect getAspectByName(Ability ability, String key) + { + if (key == null) + { + return null; + } + + List<Aspect> aspectList = ability.getSafeListFor(ListKey.ASPECT); + for (Aspect aspect : aspectList) + { + if (key.equals(aspect.getName())) + { + return aspect; + } + } + return null; + } + + /** * Returns the correct list of abilities for the character. * This method is overridden in subclasses if they need to change the list * of abilities looked at. Added: Trunk/pcgen/code/src/java/plugin/lsttokens/ability/AspectToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/ability/AspectToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/ability/AspectToken.java 2008-08-17 04:08:16 UTC (rev 7512) @@ -0,0 +1,155 @@ +/* + * AspectToken.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 16/08/2008 18:13:11 + * + * $Id: $ + */ +package plugin.lsttokens.ability; + +import java.util.Set; +import java.util.StringTokenizer; +import java.util.TreeSet; + +import pcgen.cdom.base.Constants; +import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.helper.Aspect; +import pcgen.core.Ability; +import pcgen.io.EntityEncoder; +import pcgen.rules.context.Changes; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.util.Logging; + +/** + * The Class <code>AspectToken</code> parses a generic detail field for + * abilities. It is a name/value characteristic allowing substitution of + * values. + * + * <p>Variable substitution is performed by replacing a placeholder indicated + * by %# with the #th variable in the variable list. For example, the string + * <br /><code>"This is %1 variable %3 %2"</code> + * <br />would be replaced with the string "This is a variable substitution + * string" if the variable list was "a","string", + * "substitution". + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class AspectToken implements CDOMPrimaryToken<Ability> +{ + /** + * @see pcgen.persistence.lst.LstToken#getTokenName() + */ + public String getTokenName() + { + return "ASPECT"; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see pcgen.rules.persistence.token.CDOMToken#parse(pcgen.rules.context.LoadContext, java.lang.Object, java.lang.String) + */ + public boolean parse(LoadContext context, Ability ability, String value) + { + int pipeLoc = value.indexOf(Constants.PIPE); + if (pipeLoc == -1) + { + Logging.errorPrint(getTokenName() + " expecting '|', format is: " + + "AspectName|Aspect value|Variable|... was: " + value); + return false; + } + String key = value.substring(0, pipeLoc); + if (key.length() == 0) + { + Logging.errorPrint(getTokenName() + " expecting non-empty type, " + + "format is: AspectName|Aspect value|Variable|... was: " + value); + return false; + } + String val = value.substring(pipeLoc + 1); + if (val.length() == 0) + { + Logging.errorPrint(getTokenName() + " expecting non-empty value, " + + "format is: AspectName|Aspect value|Variable|... was: " + value); + return false; + } + if (val.startsWith(Constants.PIPE)) + { + Logging.errorPrint(getTokenName() + " expecting non-empty value, " + + "format is: AspectName|Aspect value|Variable|... was: " + value); + return false; + } + context.getObjectContext().addToList(ability, ListKey.ASPECT, + parseAspect(key, val)); + + return true; + } + + /** + * Parses the ASPECT tag into a Aspect object. + * + * @param aspectDef The LST tag + * @return A <tt>Aspect</tt> object + */ + public Aspect parseAspect(final String name, final String aspectDef) + { + final StringTokenizer tok = new StringTokenizer(aspectDef, Constants.PIPE); + + final Aspect aspect = + new Aspect(name, EntityEncoder.decode(tok.nextToken())); + + while (tok.hasMoreTokens()) + { + final String token = tok.nextToken(); + aspect.addVariable(token); + } + + return aspect; + } + + /* (non-Javadoc) + * @see pcgen.rules.persistence.token.CDOMPrimaryToken#unparse(pcgen.rules.context.LoadContext, java.lang.Object) + */ + public String[] unparse(LoadContext context, Ability obj) + { + Changes<Aspect> changes = + context.getObjectContext().getListChanges(obj, ListKey.ASPECT); + if (changes == null || changes.isEmpty()) + { + return null; + } + Set<String> set = new TreeSet<String>(); + for (Aspect q : changes.getAdded()) + { + set.add(new StringBuilder().append(q.getName()).append( + Constants.PIPE).append(q.getPCCText()).toString()); + } + return set.toArray(new String[set.size()]); + } + + /* (non-Javadoc) + * @see pcgen.rules.persistence.token.CDOMToken#getTokenClass() + */ + public Class<Ability> getTokenClass() + { + return Ability.class; + } + +} Added: Trunk/pcgen/code/src/test/pcgen/cdom/helper/AspectTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/cdom/helper/AspectTest.java (rev 0) +++ Trunk/pcgen/code/src/test/pcgen/cdom/helper/AspectTest.java 2008-08-17 04:08:16 UTC (rev 7512) @@ -0,0 +1,212 @@ +/* + * AspectTest.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 17/08/2008 10:33:48 + * + * $Id: $ + */ +package pcgen.cdom.helper; + +import pcgen.AbstractCharacterTestCase; +import pcgen.cdom.base.Constants; +import pcgen.cdom.base.FormulaFactory; +import pcgen.cdom.enumeration.VariableKey; +import pcgen.core.Ability; +import pcgen.core.AbilityCategory; +import pcgen.util.TestHelper; + +/** + * This class tests the handling of ASPECT fields in PCGen + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +@SuppressWarnings("nls") +public class AspectTest extends AbstractCharacterTestCase +{ + private static String ASPECT_NAME = "UnitTest"; + /** + * Constructs a new <code>AspectTest</code>. + */ + public AspectTest() + { + super(); + } + + /** + * Tests outputting an empty Aspect. + * + */ + public void testEmptyDesc() + { + final Aspect aspect = new Aspect(ASPECT_NAME, Constants.EMPTY_STRING); + assertEquals("", aspect.getAspectText(this.getCharacter(), null)); + } + + /** + * Tests outputting a simple Aspect. + * + */ + public void testSimpleDesc() + { + final String simpleDesc = "This is a test"; + final Aspect aspect = new Aspect(ASPECT_NAME, simpleDesc); + assertEquals(simpleDesc, aspect.getAspectText(getCharacter(), null)); + } + + /** + * Tests a simple string replacement. + */ + public void testSimpleReplacement() + { + final Aspect aspect = new Aspect(ASPECT_NAME, "%1"); + aspect.addVariable("\"Variable\""); + assertEquals("Variable", aspect.getAspectText(getCharacter(), null)); + } + + /** + * Test name replacement + */ + public void testSimpleNameReplacement() + { + final Ability pobj = new Ability(); + pobj.setName("PObject"); + + final Aspect aspect = new Aspect(ASPECT_NAME, "%1"); + aspect.addVariable("%NAME"); + assertEquals("PObject", aspect.getAspectText(getCharacter(), pobj)); + } + + /** + * Tests simple variable replacement + */ + public void testSimpleVariableReplacement() + { + final Ability dummy = + TestHelper.makeAbility("dummy", AbilityCategory.FEAT + .getAbilityCategory(), "Foo"); + dummy.put(VariableKey.getConstant("TestVar"), FormulaFactory + .getFormulaFor(2)); + + final Aspect aspect = new Aspect(ASPECT_NAME, "%1"); + aspect.addVariable("TestVar"); + assertEquals("0", aspect.getAspectText(getCharacter(), dummy)); + + getCharacter().addAbility(AbilityCategory.FEAT, dummy, null); + assertEquals("2", aspect.getAspectText(getCharacter(), dummy)); + } + + /** + * Tests simple replacement of %CHOICE + */ + public void testSimpleChoiceReplacement() + { + final Ability pobj = + TestHelper.makeAbility("dummy", AbilityCategory.FEAT + .getAbilityCategory(), "Foo"); + getCharacter().addAbility(AbilityCategory.FEAT, pobj, null); + + final Aspect aspect = new Aspect(ASPECT_NAME, "%1"); + aspect.addVariable("%CHOICE"); + assertEquals("", aspect.getAspectText(getCharacter(), pobj)); + + pobj.addAssociated("Foo"); + assertEquals("Foo", aspect.getAspectText(getCharacter(), pobj)); + } + + /** + * Tests simple %LIST replacement. + */ + public void testSimpleListReplacement() + { + final Ability pobj = + TestHelper.makeAbility("dummy", AbilityCategory.FEAT + .getAbilityCategory(), "Foo"); + getCharacter().addAbility(AbilityCategory.FEAT, pobj, null); + + final Aspect aspect = new Aspect(ASPECT_NAME, "%1"); + aspect.addVariable("%LIST"); + assertEquals("", aspect.getAspectText(getCharacter(), pobj)); + + pobj.addAssociated("Foo"); + assertEquals("Foo", aspect.getAspectText(getCharacter(), pobj)); + } + + /** + * Test a replacement with missing variables. + */ + public void testEmptyReplacement() + { + final Ability pobj = + TestHelper.makeAbility("dummy", AbilityCategory.FEAT + .getAbilityCategory(), "Foo"); + + final Aspect aspect = new Aspect(ASPECT_NAME, "%1"); + assertEquals("", aspect.getAspectText(getCharacter(), pobj)); + } + + /** + * Test having extra variables present + */ + public void testExtraVariables() + { + final Ability pobj = + TestHelper.makeAbility("dummy", AbilityCategory.FEAT + .getAbilityCategory(), "Foo"); + + final Aspect aspect = new Aspect(ASPECT_NAME, "Testing"); + aspect.addVariable("%LIST"); + assertEquals("Testing", aspect.getAspectText(getCharacter(), pobj)); + + pobj.addAssociated("Foo"); + assertEquals("Testing", aspect.getAspectText(getCharacter(), pobj)); + } + + /** + * Test complex replacements. + */ + public void testComplexVariableReplacement() + { + final Ability dummy = + TestHelper.makeAbility("dummy", AbilityCategory.FEAT + .getAbilityCategory(), "Foo"); + dummy.put(VariableKey.getConstant("TestVar"), FormulaFactory + .getFormulaFor(2)); + dummy.addAssociated("Associated 1"); + dummy.addAssociated("Associated 2"); + + final Aspect aspect = new Aspect(ASPECT_NAME, "%1 test %3 %2"); + aspect.addVariable("TestVar"); + assertEquals("0 test ", aspect.getAspectText(getCharacter(), dummy)); + + getCharacter().addAbility(AbilityCategory.FEAT, dummy, null); + assertEquals("2 test ", aspect.getAspectText(getCharacter(), dummy)); + + aspect.addVariable("%CHOICE"); + assertEquals("2 test Associated 1", aspect + .getAspectText(getCharacter(), dummy)); + + aspect.addVariable("%LIST"); + assertEquals("Replacement of %LIST failed", + "2 test Associated 1 and Associated 2 Associated 1", aspect + .getAspectText(getCharacter(), dummy)); + } +} Added: Trunk/pcgen/code/src/test/pcgen/io/exporttoken/AbilityTokenTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/io/exporttoken/AbilityTokenTest.java (rev 0) +++ Trunk/pcgen/code/src/test/pcgen/io/exporttoken/AbilityTokenTest.java 2008-08-17 04:08:16 UTC (rev 7512) @@ -0,0 +1,180 @@ +/* + * AbilityTokenTest.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 17/08/2008 14:04:19 + * + * $Id: $ + */ +package pcgen.io.exporttoken; + +import junit.framework.Test; +import junit.framework.TestSuite; +import pcgen.AbstractCharacterTestCase; +import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.helper.Aspect; +import pcgen.core.Ability; +import pcgen.core.AbilityCategory; +import pcgen.core.PlayerCharacter; +import pcgen.core.SettingsHandler; +import pcgen.io.ExportHandler; +import pcgen.util.TestHelper; +import pcgen.util.enumeration.Visibility; + +/** + * <code>AbilityTokenTest</code> tests the functioning of the ABILITY + * token processing code. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class AbilityTokenTest extends AbstractCharacterTestCase +{ + + /** + * Quick test suite creation - adds all methods beginning with "test" + * @return The Test suite + */ + public static Test suite() + { + return new TestSuite(AbilityTokenTest.class); + } + + /* + * @see TestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + PlayerCharacter character = getCharacter(); + + // Make some ability categories and add them to the game mode + AbilityCategory featCategory = + SettingsHandler.getGame().silentlyGetAbilityCategory("FEAT"); + if (featCategory == null) + { + featCategory = new AbilityCategory("FEAT"); + SettingsHandler.getGame().addAbilityCategory(featCategory); + } + + Ability ab1 = TestHelper.makeAbility("Perform (Dance)", "FEAT", "General.Fighter"); + ab1.put(ObjectKey.MULTIPLE_ALLOWED, Boolean.FALSE); + ab1.put(ObjectKey.VISIBILITY, Visibility.DEFAULT); + ab1.addToListFor(ListKey.ASPECT, new Aspect("Colour", "Green")); + ab1.addToListFor(ListKey.ASPECT, new Aspect("Size", "L")); + ab1.addToListFor(ListKey.ASPECT, new Aspect("Shape", "Icosahedron")); + ab1.addToListFor(ListKey.ASPECT, new Aspect("Sides", "20")); + ab1.addToListFor(ListKey.ASPECT, new Aspect("Age In Years", "2000")); + character.addAbility(featCategory, ab1, null); + } + + /** + * Tests the aspect subtoken of ABILITY without a specific aspect. + */ + public void testAspect() + { + AbilityToken tok = new AbilityToken(); + ExportHandler eh = new ExportHandler(null); + PlayerCharacter character = getCharacter(); + + assertEquals( + "Colour: Green, Size: L, Shape: Icosahedron, Sides: 20, Age In Years: 2000", + tok.getToken("ABILITY.FEAT.0.ASPECT", character, eh)); + } + + /** + * Tests the ASPECTCOUNT subtoken of ABILITY. + */ + public void testAspectCount() + { + AbilityToken tok = new AbilityToken(); + ExportHandler eh = new ExportHandler(null); + PlayerCharacter character = getCharacter(); + + assertEquals("5", tok.getToken("ABILITY.FEAT.0.ASPECTCOUNT", character, + eh)); + } + + /** + * Tests the ASPECT subtoken of ABILITY with an aspect specified. + */ + public void testSingleAspect() + { + AbilityToken tok = new AbilityToken(); + ExportHandler eh = new ExportHandler(null); + PlayerCharacter character = getCharacter(); + + assertEquals( + "Shape: Icosahedron", + tok.getToken("ABILITY.FEAT.0.ASPECT.2", character, eh)); + assertEquals( + "20", + tok.getToken("ABILITY.FEAT.0.ASPECT.Sides", character, eh)); + assertEquals( + "Green", + tok.getToken("ABILITY.FEAT.0.ASPECT.Colour", character, eh)); + assertEquals( + "2000", + tok.getToken("ABILITY.FEAT.0.ASPECT.Age In Years", character, eh)); + + } + + /** + * Tests the ASPECT subtoken of ABILITY with an invalid aspect specified. + */ + public void testNonExistantSingleAspect() + { + AbilityToken tok = new AbilityToken(); + ExportHandler eh = new ExportHandler(null); + PlayerCharacter character = getCharacter(); + + assertEquals("", tok + .getToken("ABILITY.FEAT.0.ASPECT.-5", character, eh)); + assertEquals("", tok.getToken("ABILITY.FEAT.0.ASPECT.5", character, eh)); + assertEquals("", tok.getToken("ABILITY.FEAT.0.ASPECT.500", character, + eh)); + assertEquals("", tok.getToken("ABILITY.FEAT.0.ASPECT.Attack Type", + character, eh)); + assertEquals("", tok.getToken("ABILITY.FEAT.0.ASPECT.Target", + character, eh)); + } + + /** + * Tests the HASASPECT subtoken of ABILITY. + */ + public void testHasAspect() + { + AbilityToken tok = new AbilityToken(); + ExportHandler eh = new ExportHandler(null); + PlayerCharacter character = getCharacter(); + + assertEquals("N", tok.getToken("ABILITY.FEAT.0.HASASPECT.3", character, + eh)); + assertEquals("N", tok.getToken("ABILITY.FEAT.0.HASASPECT.5", character, + eh)); + assertEquals("N", tok.getToken("ABILITY.FEAT.0.HASASPECT.Attack Type", + character, eh)); + assertEquals("Y", tok.getToken("ABILITY.FEAT.0.HASASPECT.Colour", + character, eh)); + assertEquals("Y", tok.getToken("ABILITY.FEAT.0.HASASPECT.Age In Years", + character, eh)); + } +} \ No newline at end of file Added: Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/AspectTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/AspectTokenTest.java (rev 0) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/ability/AspectTokenTest.java 2008-08-17 04:08:16 UTC (rev 7512) @@ -0,0 +1,143 @@ +/* + * AspectTokenTest.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 16/08/2008 18:42:10 + * + * $Id: $ + */ +package plugin.lsttokens.ability; + +import org.junit.Test; + +import pcgen.core.Ability; +import pcgen.persistence.PersistenceLayerException; +import pcgen.rules.persistence.CDOMLoader; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import plugin.lsttokens.testsupport.AbstractTokenTestCase; +import plugin.lsttokens.testsupport.CDOMTokenLoader; + +/** + * The Class <code>AspectTokenTest</code> is responsible for verifying that + * the Ability AspectToken is working properly + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class AspectTokenTest extends AbstractTokenTestCase<Ability> +{ + + /** The token being tested. */ + static AspectToken token = new AspectToken(); + + /** The token loader. */ + static CDOMTokenLoader<Ability> loader = new CDOMTokenLoader<Ability>( + Ability.class); + + @Override + public Class<Ability> getCDOMClass() + { + return Ability.class; + } + + @Override + public CDOMLoader<Ability> getLoader() + { + return loader; + } + + @Override + public CDOMPrimaryToken<Ability> getToken() + { + return token; + } + + @Test + public void testInvalidNoPipe() throws PersistenceLayerException + { + assertFalse(parse("NoPipe")); + assertNoSideEffects(); + } + + @Test + public void testValidTwoPipe() throws PersistenceLayerException + { + assertTrue(parse("One|Two|Three")); + } + + @Test + public void testInvalidDoublePipe() throws PersistenceLayerException + { + assertFalse(parse("Two||Pipe")); + assertNoSideEffects(); + } + + @Test + public void testInvalidEmpty() throws PersistenceLayerException + { + assertFalse(parse("")); + assertNoSideEffects(); + } + + @Test + public void testInvalidOnlyPipe() throws PersistenceLayerException + { + assertFalse(parse("|")); + assertNoSideEffects(); + } + + @Test + public void testInvalidEmptyKey() throws PersistenceLayerException + { + assertFalse(parse("|Value")); + assertNoSideEffects(); + } + + @Test + public void testInvalidEmptyValue() throws PersistenceLayerException + { + assertFalse(parse("Key|")); + assertNoSideEffects(); + } + + @Test + public void testRoundRobinSimple() throws PersistenceLayerException + { + runRoundRobin("QualityName|QualityValue"); + } + + @Test + public void testRoundRobinSpaces() throws PersistenceLayerException + { + runRoundRobin("Quality Name|Quality Value"); + } + + @Test + public void testRoundRobinInternational() throws PersistenceLayerException + { + runRoundRobin("Nieder\xF6sterreich Quality|Nieder\xF6sterreich"); + } + + @Test + public void testRoundRobinHyphen() throws PersistenceLayerException + { + runRoundRobin("Languedoc-Roussillon Quality|Languedoc-Roussillon"); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2008-09-08 11:52:10
|
Revision: 7681 http://pcgen.svn.sourceforge.net/pcgen/?rev=7681&view=rev Author: jdempsey Date: 2008-09-08 11:52:19 +0000 (Mon, 08 Sep 2008) Log Message: ----------- FReq: OS expansion of IIF to check GAMEMODE Issue#: 2100005 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/jepcommands/IsgamemodeCommand.java Trunk/pcgen/code/src/test/plugin/jepcommands/IsgamemodeCommandTest.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-09-07 21:26:23 UTC (rev 7680) +++ Trunk/pcgen/code/pluginbuild.xml 2008-09-08 11:52:19 UTC (rev 7681) @@ -5004,6 +5004,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${jepplugins.dir}/JepCommand-ISGAMEMODE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/jepcommands/IsgamemodeCommand.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${jepplugins.dir}/JepCommand-VAR.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Added: Trunk/pcgen/code/src/java/plugin/jepcommands/IsgamemodeCommand.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/jepcommands/IsgamemodeCommand.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/jepcommands/IsgamemodeCommand.java 2008-09-08 11:52:19 UTC (rev 7681) @@ -0,0 +1,108 @@ +/* + * IsgamemodeCommand.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 24/08/2008 13:48:39 + * + * $Id: $ + */ +package plugin.jepcommands; + +import java.util.Stack; + +import org.nfunk.jep.ParseException; + +import pcgen.core.SettingsHandler; +import pcgen.util.PCGenCommand; + +/** + * <p> + * If class; extends PostfixMathCommand. This class accepts one agrument. + * The argument is a game mode name. This is compared to the current game mode + * and a 1 returned if it is, or a 0 if not. + * </p> + * <p> + * So, given isgamemode("35e"), 1 is returned if the game mode is 35e and 0 + * otherwise. + * </p> + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class IsgamemodeCommand extends PCGenCommand +{ + + /** + * <p> + * Initializes the command, notably to set the number of parameters to 1. + * </p> + */ + public IsgamemodeCommand() + { + super(); + numberOfParameters = 1; + } + + /* (non-Javadoc) + * @see pcgen.util.PCGenCommand#getFunctionName() + */ + public String getFunctionName() + { + return "ISGAMEMODE"; + } + + /** + * <p> + * Evaluates the parameter, which must be a string. + * The argument is a game mode name. This is compared to the current game mode + * and a 1 returned if it is, or a 0 if not. + * </p> + * + * @param stack Stack of incoming arguments. + * + * @throws ParseException the parse exception + */ + @SuppressWarnings("unchecked") //Uses JEP, which doesn't use generics + public void run(final Stack stack) throws ParseException + { + // Check if stack is null + if (null == stack) + { + throw new ParseException("Stack argument null"); + } + + final String gameModeKey; + + final Object param1 = stack.pop(); + + if (param1 instanceof String) + { + gameModeKey = (String) param1; + } + else + { + throw new ParseException("Invalid parameter type for Parameter 1"); + } + + // push the result on the inStack + stack.push(SettingsHandler.getGame().getName().equalsIgnoreCase( + gameModeKey) ? 1 : 0); + } +} Added: Trunk/pcgen/code/src/test/plugin/jepcommands/IsgamemodeCommandTest.java =================================================================== --- Trunk/pcgen/code/src/test/plugin/jepcommands/IsgamemodeCommandTest.java (rev 0) +++ Trunk/pcgen/code/src/test/plugin/jepcommands/IsgamemodeCommandTest.java 2008-09-08 11:52:19 UTC (rev 7681) @@ -0,0 +1,124 @@ +/* + * IsgamemodeCommandTest.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 8/09/2008 21:22:24 + * + * $Id: $ + */ +package plugin.jepcommands; + +import java.util.Stack; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.nfunk.jep.ParseException; +import org.nfunk.jep.function.PostfixMathCommandI; + +import pcgen.PCGenTestCase; + +/** + * The Class <code>IsgamemodeCommandTest</code> is responsible for checking + * that IsgamemodeCommand is working correctly. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class IsgamemodeCommandTest extends PCGenTestCase +{ + + /** + * Quick test suite creation - adds all methods beginning with "test". + * + * @return The Test suite + */ + public static Test suite() + { + return new TestSuite(IsgamemodeCommandTest.class); + } + + /* + * @see TestCase#setUp() + */ + /* (non-Javadoc) + * @see pcgen.PCGenTestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + + } + + /** + * Run isgamemode. + * + * @param stack the stack + * + * @return true, if successful + */ + private static boolean runIsgamemode(final Stack stack) + { + final PostfixMathCommandI pCommand = new IsgamemodeCommand(); + boolean b; + try + { + pCommand.run(stack); + b = true; + } + catch (ParseException e) + { + b = false; + } + return b; + } + + /** + * Test is game mode true. + */ + public void testIsGameModeTrue() + { + final Stack<Object> s = new Stack<Object>(); + + s.push("3.5"); + + runIsgamemode(s); + + final Integer result = (Integer) s.pop(); + + is(result, eq(1), "isgamemode(\"3.5\") returns 1"); + } + + /** + * Test is game mode false. + */ + public void testIsGameModeFalse() + { + final Stack<Object> s = new Stack<Object>(); + + s.push("3e"); + + runIsgamemode(s); + + final Integer result = (Integer) s.pop(); + + is(result, eq(0), "isgamemode(\"3e\") returns 0"); + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2008-09-27 06:42:31
|
Revision: 7801 http://pcgen.svn.sourceforge.net/pcgen/?rev=7801&view=rev Author: jdempsey Date: 2008-09-27 06:42:23 +0000 (Sat, 27 Sep 2008) Log Message: ----------- FReq: Deprecate BONUS:MOVE Issue#: 2000438 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstUtils.java Trunk/pcgen/code/src/java/plugin/bonustokens/Move.java Trunk/pcgen/code/src/test/plugin/PluginBuildTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/MoveBonus.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-09-27 01:28:28 UTC (rev 7800) +++ Trunk/pcgen/code/pluginbuild.xml 2008-09-27 06:42:23 UTC (rev 7801) @@ -6308,6 +6308,14 @@ </patternset> </fileset> </jar> + <jar jarfile="${bonusplugins.dir}/BonusToken-DEPRECATED-MOVE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/deprecated/MoveBonus.class" /> + </patternset> + </fileset> + </jar> + </target> <target name="manifest" description="Write the Java manifest"> Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2008-09-27 01:28:28 UTC (rev 7800) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2008-09-27 06:42:23 UTC (rev 7801) @@ -28,6 +28,7 @@ import pcgen.cdom.base.Constants; import pcgen.core.bonus.BonusObj.StackType; import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.LstUtils; import pcgen.persistence.lst.prereq.PreParserFactory; import pcgen.util.Logging; @@ -318,6 +319,7 @@ aTok = new StringTokenizer(bonusInfo, ","); + LstUtils.deprecationCheck(aBonus, bonusName, bonusString); while (aTok.hasMoreTokens()) { final String token = aTok.nextToken(); Modified: Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2008-09-27 01:28:28 UTC (rev 7800) +++ Trunk/pcgen/code/src/java/pcgen/gui/prop/LanguageBundle.properties 2008-09-27 06:42:23 UTC (rev 7801) @@ -3790,6 +3790,7 @@ Warnings.LstTokens.Deprecated={0} deprecated. Tag was {1} in {2} of {3}. {4} Warnings.LstTokens.Deprecated.BabToken=Use BONUS:COMBAT|BAB|formula instead. Warnings.LstTokens.Deprecated.WeaponAutoToken=Use AUTO:WEAPONPROF instead. +Warnings.Bonus.Deprecated=BONUS:{0} is deprecated. Tag was BONUS:{1}. {2} in_plusSign=+ in_caretSymbol=^ Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstUtils.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstUtils.java 2008-09-27 01:28:28 UTC (rev 7800) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstUtils.java 2008-09-27 06:42:23 UTC (rev 7801) @@ -25,6 +25,7 @@ import java.net.URI; import pcgen.core.PObject; +import pcgen.core.bonus.BonusObj; import pcgen.util.Logging; import pcgen.util.PropertyFactory; @@ -78,6 +79,26 @@ } /** + * Checks to see if a bonus Token is deprecated + * @param token The token to be checked. + * @param name The tag name that was used + * @param value The value of the tag + */ + public static void deprecationCheck(BonusObj token, String name, + String value) + { + if (token instanceof DeprecatedToken) + { + final String msg = + PropertyFactory.getFormattedString( + "Warnings.Bonus.Deprecated", //$NON-NLS-1$ + name, value, ((DeprecatedToken) token).getMessage(null, + value)); + deprecationWarning(msg); + } + } + + /** * Log the deprecation warning. * @param tokenName The name of the deprecated token * @param name The tag name that was used Modified: Trunk/pcgen/code/src/java/plugin/bonustokens/Move.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/bonustokens/Move.java 2008-09-27 01:28:28 UTC (rev 7800) +++ Trunk/pcgen/code/src/java/plugin/bonustokens/Move.java 2008-09-27 06:42:23 UTC (rev 7801) @@ -36,7 +36,7 @@ public final class Move extends BonusObj { private static final String[] bonusHandled = - {"MOVE", "MOVEADD", "MOVEMULT", "POSTMOVEADD"}; + {"MOVEADD", "MOVEMULT", "POSTMOVEADD"}; private static final String[] bonusTags = {Load.LIGHT.toString(), Load.MEDIUM.toString(), Added: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/MoveBonus.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/MoveBonus.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/MoveBonus.java 2008-09-27 06:42:23 UTC (rev 7801) @@ -0,0 +1,101 @@ +/* + * Move.java + * Copyright 2002 (C) Greg Bingleman <by...@ho...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on December 13, 2002, 9:19 AM + * + * Current Ver: $Revision: 1777 $ + * Last Editor: $Author: jdempsey $ + * Last Edited: $Date: 2006-12-17 15:36:01 +1100 (Sun, 17 Dec 2006) $ + * + */ +package plugin.lsttokens.deprecated; + +import pcgen.core.PObject; +import pcgen.core.bonus.BonusObj; +import pcgen.persistence.lst.DeprecatedToken; +import pcgen.util.enumeration.Load; + +/** + * <code>Move</code> + * + * @author Greg Bingleman <by...@ho...> + **/ +public final class MoveBonus extends BonusObj implements DeprecatedToken +{ + private static final String[] bonusHandled = {"MOVE"}; + + private static final String[] bonusTags = + {Load.LIGHT.toString(), Load.MEDIUM.toString(), + Load.HEAVY.toString(), Load.OVERLOAD.toString()}; + + /* (non-Javadoc) + * @see pcgen.core.bonus.BonusObj#parseToken(java.lang.String) + */ + protected boolean parseToken(final String token) + { + for (int i = 0; i < bonusTags.length; ++i) + { + if (bonusTags[i].equals(token)) + { + addBonusInfo(Integer.valueOf(i)); + + return true; + } + } + + if (token.startsWith("TYPE=")) + { + addBonusInfo(token.replace('=', '.')); + } + else + { + addBonusInfo(token); + } + + return true; + } + + /* (non-Javadoc) + * @see pcgen.core.bonus.BonusObj#unparseToken(java.lang.Object) + */ + protected String unparseToken(final Object obj) + { + if (obj instanceof Integer) + { + return bonusTags[((Integer) obj).intValue()]; + } + + return (String) obj; + } + + /* (non-Javadoc) + * @see pcgen.core.bonus.BonusObj#getBonusesHandled() + */ + protected String[] getBonusesHandled() + { + return bonusHandled; + } + + /* (non-Javadoc) + * @see pcgen.persistence.lst.DeprecatedToken#getMessage(pcgen.core.PObject, java.lang.String) + */ + public String getMessage(PObject obj, String value) + { + return "The bonus will not be applied. You should use either BONUS:MOVEADD or BONUS:POSTMOVEADD instead."; + } +} Modified: Trunk/pcgen/code/src/test/plugin/PluginBuildTest.java =================================================================== --- Trunk/pcgen/code/src/test/plugin/PluginBuildTest.java 2008-09-27 01:28:28 UTC (rev 7800) +++ Trunk/pcgen/code/src/test/plugin/PluginBuildTest.java 2008-09-27 06:42:23 UTC (rev 7801) @@ -88,7 +88,7 @@ String jarPrefix = "^[a-zA-Z]*-DEPRECATED-"; String sourceSuffix = "Lst"; File sourceFolder = new File("code/src/java/plugin/lsttokens/deprecated"); - File jarFolder[] = new File[]{new File("plugins/lstplugins"), new File("plugins/preplugins")}; + File jarFolder[] = new File[]{new File("plugins/lstplugins"), new File("plugins/preplugins"), new File("plugins/bonusplugins")}; assertTrue("Source folder " + sourceFolder.getAbsolutePath() + " should be a directory", sourceFolder.isDirectory()); String[] sources = sourceFolder.list(); List<String> srcList = new ArrayList<String>(); @@ -97,6 +97,7 @@ srcList.remove("PreDefaultMonsterWriter.java"); sources = (String[]) srcList.toArray(sources); String [][] exceptions = new String[][] { + { "MoveBonus", "Move" } }; checkPluginJarsByRegex(jarPrefix, jarFolder, sourceSuffix, sources, exceptions); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2008-09-27 07:04:56
|
Revision: 7802 http://pcgen.svn.sourceforge.net/pcgen/?rev=7802&view=rev Author: jdempsey Date: 2008-09-27 07:04:45 +0000 (Sat, 27 Sep 2008) Log Message: ----------- FReq: Deprecate BONUS:TOHIT FReq: Deprecate BONUS:DAMAGE Issue#: 2000437,2000439 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/Damage.java Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/ToHit.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/bonustokens/Damage.java Trunk/pcgen/code/src/java/plugin/bonustokens/ToHit.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-09-27 06:42:23 UTC (rev 7801) +++ Trunk/pcgen/code/pluginbuild.xml 2008-09-27 07:04:45 UTC (rev 7802) @@ -1001,13 +1001,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${bonusplugins.dir}/BonusToken-DAMAGE.jar" manifest="${src.java.dir}/plugin/exporttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/bonustokens/Damage.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${bonusplugins.dir}/BonusToken-DC.jar" manifest="${src.java.dir}/plugin/exporttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> @@ -1282,13 +1275,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${bonusplugins.dir}/BonusToken-TOHIT.jar" manifest="${src.java.dir}/plugin/exporttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/bonustokens/ToHit.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${bonusplugins.dir}/BonusToken-UDAM.jar" manifest="${src.java.dir}/plugin/exporttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> @@ -6308,6 +6294,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${bonusplugins.dir}/BonusToken-DEPRECATED-DAMAGE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/deprecated/Damage.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${bonusplugins.dir}/BonusToken-DEPRECATED-MOVE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> @@ -6315,6 +6308,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${bonusplugins.dir}/BonusToken-DEPRECATED-TOHIT.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/deprecated/ToHit.class" /> + </patternset> + </fileset> + </jar> </target> Deleted: Trunk/pcgen/code/src/java/plugin/bonustokens/Damage.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/bonustokens/Damage.java 2008-09-27 06:42:23 UTC (rev 7801) +++ Trunk/pcgen/code/src/java/plugin/bonustokens/Damage.java 2008-09-27 07:04:45 UTC (rev 7802) @@ -1,62 +0,0 @@ -/* - * Damage.java - * Copyright 2002 (C) Greg Bingleman <by...@ho...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on December 13, 2002, 9:19 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package plugin.bonustokens; - -import pcgen.core.bonus.BonusObj; - -/** - * <code>Damage</code> - * - * @author Greg Bingleman <by...@ho...> - */ -public final class Damage extends BonusObj -{ - private static final String[] bonusHandled = {"DAMAGE"}; - - protected boolean parseToken(final String token) - { - if (token.startsWith("TYPE=")) - { - addBonusInfo(token.replace('=', '.')); - } - else - { - addBonusInfo(token); - } - - return true; - } - - protected String unparseToken(final Object obj) - { - return (String) obj; - } - - protected String[] getBonusesHandled() - { - return bonusHandled; - } -} Deleted: Trunk/pcgen/code/src/java/plugin/bonustokens/ToHit.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/bonustokens/ToHit.java 2008-09-27 06:42:23 UTC (rev 7801) +++ Trunk/pcgen/code/src/java/plugin/bonustokens/ToHit.java 2008-09-27 07:04:45 UTC (rev 7802) @@ -1,79 +0,0 @@ -/* - * ToHit.java - * Copyright 2002 (C) Greg Bingleman <by...@ho...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on December 13, 2002, 9:19 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package plugin.bonustokens; - -import pcgen.core.bonus.BonusObj; - -/** - * <code>ToHit</code> - * - * @author Greg Bingleman <by...@ho...> - */ -public final class ToHit extends BonusObj -{ - private static final String[] bonusHandled = {"TOHIT"}; - - private static final String[] bonusTags = {"TOHIT"}; - - protected boolean parseToken(final String token) - { - for (int i = 0; i < bonusTags.length; ++i) - { - if (bonusTags[i].equals(token)) - { - addBonusInfo(Integer.valueOf(i)); - - return true; - } - } - - if (token.startsWith("TYPE=")) - { - addBonusInfo(token.replace('=', '.')); - } - else - { - addBonusInfo(token); - } - - return true; - } - - protected String unparseToken(final Object obj) - { - if (obj instanceof Integer) - { - return bonusTags[((Integer) obj).intValue()]; - } - - return (String) obj; - } - - protected String[] getBonusesHandled() - { - return bonusHandled; - } -} Copied: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/Damage.java (from rev 7797, Trunk/pcgen/code/src/java/plugin/bonustokens/Damage.java) =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/Damage.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/Damage.java 2008-09-27 07:04:45 UTC (rev 7802) @@ -0,0 +1,72 @@ +/* + * Damage.java + * Copyright 2002 (C) Greg Bingleman <by...@ho...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on December 13, 2002, 9:19 AM + * + * Current Ver: $Revision$ + * Last Editor: $Author$ + * Last Edited: $Date$ + * + */ +package plugin.lsttokens.deprecated; + +import pcgen.core.PObject; +import pcgen.core.bonus.BonusObj; +import pcgen.persistence.lst.DeprecatedToken; + +/** + * <code>Damage</code> + * + * @author Greg Bingleman <by...@ho...> + */ +public final class Damage extends BonusObj implements DeprecatedToken +{ + private static final String[] bonusHandled = {"DAMAGE"}; + + protected boolean parseToken(final String token) + { + if (token.startsWith("TYPE=")) + { + addBonusInfo(token.replace('=', '.')); + } + else + { + addBonusInfo(token); + } + + return true; + } + + protected String unparseToken(final Object obj) + { + return (String) obj; + } + + protected String[] getBonusesHandled() + { + return bonusHandled; + } + + /* (non-Javadoc) + * @see pcgen.persistence.lst.DeprecatedToken#getMessage(pcgen.core.PObject, java.lang.String) + */ + public String getMessage(PObject obj, String value) + { + return "The bonus will not be applied. You should use BONUS:COMBAT|DAMAGE.x|y instead."; + } +} Property changes on: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/Damage.java ___________________________________________________________________ Added: svn:keywords + Date Author Revision Id Added: svn:mergeinfo + Added: svn:eol-style + native Copied: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/ToHit.java (from rev 7797, Trunk/pcgen/code/src/java/plugin/bonustokens/ToHit.java) =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/ToHit.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/ToHit.java 2008-09-27 07:04:45 UTC (rev 7802) @@ -0,0 +1,89 @@ +/* + * ToHit.java + * Copyright 2002 (C) Greg Bingleman <by...@ho...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on December 13, 2002, 9:19 AM + * + * Current Ver: $Revision$ + * Last Editor: $Author$ + * Last Edited: $Date$ + * + */ +package plugin.lsttokens.deprecated; + +import pcgen.core.PObject; +import pcgen.core.bonus.BonusObj; +import pcgen.persistence.lst.DeprecatedToken; + +/** + * <code>ToHit</code> + * + * @author Greg Bingleman <by...@ho...> + */ +public final class ToHit extends BonusObj implements DeprecatedToken +{ + private static final String[] bonusHandled = {"TOHIT"}; + + private static final String[] bonusTags = {"TOHIT"}; + + protected boolean parseToken(final String token) + { + for (int i = 0; i < bonusTags.length; ++i) + { + if (bonusTags[i].equals(token)) + { + addBonusInfo(Integer.valueOf(i)); + + return true; + } + } + + if (token.startsWith("TYPE=")) + { + addBonusInfo(token.replace('=', '.')); + } + else + { + addBonusInfo(token); + } + + return true; + } + + protected String unparseToken(final Object obj) + { + if (obj instanceof Integer) + { + return bonusTags[((Integer) obj).intValue()]; + } + + return (String) obj; + } + + protected String[] getBonusesHandled() + { + return bonusHandled; + } + + /* (non-Javadoc) + * @see pcgen.persistence.lst.DeprecatedToken#getMessage(pcgen.core.PObject, java.lang.String) + */ + public String getMessage(PObject obj, String value) + { + return "The bonus will not be applied. You should use BONUS:COMBAT|TOHIT|y instead."; + } +} Property changes on: Trunk/pcgen/code/src/java/plugin/lsttokens/deprecated/ToHit.java ___________________________________________________________________ Added: svn:keywords + Date Author Revision Id Added: svn:mergeinfo + Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-09-27 23:58:44
|
Revision: 7816 http://pcgen.svn.sourceforge.net/pcgen/?rev=7816&view=rev Author: thpr Date: 2008-09-27 23:58:34 +0000 (Sat, 27 Sep 2008) Log Message: ----------- Convert Associations into PlayerCharacter and Equipment (out of PObject) Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/cdom/base/TransitionChoice.java Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/AssociationKey.java Trunk/pcgen/code/src/java/pcgen/core/AssocStore.java Trunk/pcgen/code/src/java/pcgen/core/AssociationStore.java Trunk/pcgen/code/src/java/pcgen/core/AssociationSupport.java Trunk/pcgen/code/src/java/pcgen/core/Equipment.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/SpellListChoiceManager.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java Trunk/pcgen/code/src/test/pcgen/core/AbilityTest.java Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/base/util/FixedStringList.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/VfeatToken.java Trunk/pcgen/code/src/test/pcgen/persistence/lst/utils/ Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/pluginbuild.xml 2008-09-27 23:58:34 UTC (rev 7816) @@ -3259,13 +3259,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${lstplugins.dir}/ClassLstToken-VFEAT.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/pcclass/VfeatToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${lstplugins.dir}/ClassLstToken-VISIBLE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Added: Trunk/pcgen/code/src/java/pcgen/base/util/FixedStringList.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/base/util/FixedStringList.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/base/util/FixedStringList.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -0,0 +1,113 @@ +/* + * Copyright 2008 (C) Tom Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package pcgen.base.util; + +import java.util.AbstractList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.RandomAccess; + +public class FixedStringList extends AbstractList<String> implements + List<String>, RandomAccess +{ + + String[] array; + + public FixedStringList(int size) + { + array = new String[size]; + } + + public FixedStringList(Collection<String> c) + { + array = c.toArray(new String[c.size()]); + } + + public FixedStringList(String... a) + { + array = new String[a.length]; + System.arraycopy(a, 0, array, 0, a.length); + } + + @Override + public boolean add(String o) + { + for (int i = 0; i < array.length; i++) + { + if (array[i] == null) + { + array[i] = o; + return true; + } + } + return false; + } + + @Override + public boolean addAll(int index, Collection<? extends String> c) + { + for (String s : c) + { + if (!add(s)) + { + return false; + } + } + return true; + } + + @Override + public String remove(int index) + { + String old = array[index]; + array[index] = null; + return old; + } + + @Override + public String set(int index, String element) + { + String old = array[index]; + array[index] = element; + return old; + } + + @Override + public String get(int arg0) + { + return array[arg0]; + } + + @Override + public int size() + { + return array.length; + } + + @Override + public boolean equals(Object o) + { + if (o instanceof FixedStringList) + { + FixedStringList other = (FixedStringList) o; + return Arrays.deepEquals(array, other.array); + } + return super.equals(o); + } +} Modified: Trunk/pcgen/code/src/java/pcgen/cdom/base/TransitionChoice.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/base/TransitionChoice.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/cdom/base/TransitionChoice.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -22,6 +22,7 @@ import java.util.Set; import pcgen.base.formula.Formula; +import pcgen.cdom.enumeration.AssociationKey; import pcgen.core.PlayerCharacter; import pcgen.util.StringPClassUtil; import pcgen.util.chooser.ChooserFactory; @@ -136,7 +137,7 @@ for (T choice : driveChoice) { choiceActor.applyChoice(choice, apc); - apc.addAssoc(this, choice); + apc.addAssoc(this, AssociationKey.ADD, choice); } } Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/AssociationKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/AssociationKey.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/AssociationKey.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -29,6 +29,7 @@ import java.util.Map; import pcgen.base.util.CaseInsensitiveMap; +import pcgen.base.util.FixedStringList; import pcgen.cdom.base.CDOMObject; import pcgen.core.Ability; import pcgen.core.AbilityCategory; @@ -67,6 +68,10 @@ public static final AssociationKey<AbilityCategory> CATEGORY = new AssociationKey<AbilityCategory>(); + public static final AssociationKey<FixedStringList> CHOICES = new AssociationKey<FixedStringList>(); + + public static final AssociationKey<Object> ADD = new AssociationKey<Object>(); + private static CaseInsensitiveMap<AssociationKey<?>> map = null; private AssociationKey() Modified: Trunk/pcgen/code/src/java/pcgen/core/AssocStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AssocStore.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/AssocStore.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -1,3 +1,20 @@ +/* + * Copyright 2008 (C) Tom Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ package pcgen.core; import java.util.List; @@ -2,17 +19,19 @@ +import pcgen.cdom.enumeration.AssociationKey; + public interface AssocStore { - public void addAssoc(Object obj, Object o); + public <T> void addAssoc(Object obj, AssociationKey<T> ak, T o); - public void removeAssoc(Object obj, Object o); + public <T> void removeAssoc(Object obj, AssociationKey<T> ak, T o); - public List<Object> removeAllAssocs(Object obj); + public <T> List<T> removeAllAssocs(Object obj, AssociationKey<T> ak); - public int getAssocCount(Object obj); + public int getAssocCount(Object obj, AssociationKey<?> ak); - public boolean hasAssocs(Object obj); + public boolean hasAssocs(Object obj, AssociationKey<?> ak); - public List<Object> getAssocList(Object obj); + public <T> List<T> getAssocList(Object obj, AssociationKey<T> ak); - public boolean containsAssoc(Object obj, Object o); + public <T> boolean containsAssoc(Object obj, AssociationKey<T> ak, T o); } Modified: Trunk/pcgen/code/src/java/pcgen/core/AssociationStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AssociationStore.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/AssociationStore.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -1,3 +1,20 @@ +/* + * Copyright 2008 (C) Tom Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ package pcgen.core; import java.util.List; @@ -2,8 +19,14 @@ +import pcgen.base.util.FixedStringList; + public interface AssociationStore { - public void addAssociation(PObject obj, String... o); + public void addAssociation(PObject obj, String o); - public void removeAssociation(PObject obj, String... o); + public void removeAssociation(PObject obj, String o); + public void addAssociation(PObject obj, FixedStringList o); + + public void removeAssociation(PObject obj, FixedStringList o); + public List<String> removeAllAssociations(PObject obj); @@ -16,11 +39,13 @@ public boolean containsAssociated(PObject obj, String o); + public boolean containsAssociated(PObject obj, FixedStringList o); + public int getSelectCorrectedAssociationCount(PObject obj); public int getDetailedAssociationCount(PObject obj); - public List<String[]> getDetailedAssociations(PObject obj); + public List<FixedStringList> getDetailedAssociations(PObject obj); public List<String> getExpandedAssociations(PObject obj); Modified: Trunk/pcgen/code/src/java/pcgen/core/AssociationSupport.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/AssociationSupport.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/AssociationSupport.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -1,47 +1,65 @@ +/* + * Copyright 2008 (C) Tom Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ package pcgen.core; +import java.util.IdentityHashMap; import java.util.List; -import pcgen.base.util.HashMapToList; +import pcgen.base.util.DoubleKeyMapToList; +import pcgen.cdom.enumeration.AssociationKey; public class AssociationSupport implements AssocStore { - private final HashMapToList<Object, Object> assocMap = - new HashMapToList<Object, Object>(); + private final DoubleKeyMapToList assocMap = new DoubleKeyMapToList(IdentityHashMap.class, IdentityHashMap.class); - public void addAssoc(Object obj, Object o) + public <T> void addAssoc(Object obj, AssociationKey<T> ak, T o) { - assocMap.addToListFor(obj, o); + assocMap.addToListFor(obj, ak, o); } - public void removeAssoc(Object obj, Object o) + public <T> void removeAssoc(Object obj, AssociationKey<T> ak, T o) { - assocMap.removeFromListFor(obj, o); + assocMap.removeFromListFor(obj, ak, o); } - public List<Object> removeAllAssocs(Object obj) + public <T> List<T> removeAllAssocs(Object obj, AssociationKey<T> ak) { - return assocMap.removeListFor(obj); + return assocMap.removeListFor(obj, ak); } - public int getAssocCount(Object obj) + public int getAssocCount(Object obj, AssociationKey<?> ak) { - return assocMap.sizeOfListFor(obj); + return assocMap.sizeOfListFor(obj, ak); } - public boolean hasAssocs(Object obj) + public boolean hasAssocs(Object obj, AssociationKey<?> ak) { - return assocMap.containsListFor(obj); + return assocMap.containsListFor(obj, ak); } - public List<Object> getAssocList(Object obj) + public <T> List<T> getAssocList(Object obj, AssociationKey<T> ak) { - return assocMap.getListFor(obj); + return assocMap.getListFor(obj, ak); } - public boolean containsAssoc(Object obj, Object o) + public <T> boolean containsAssoc(Object obj, AssociationKey<T> ak, T o) { - return assocMap.containsInList(obj, o); + return assocMap.containsInList(obj, ak, o); } } Modified: Trunk/pcgen/code/src/java/pcgen/core/Equipment.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/Equipment.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -43,7 +43,9 @@ import pcgen.base.formula.Formula; import pcgen.base.lang.StringUtil; +import pcgen.base.util.FixedStringList; import pcgen.cdom.base.Constants; +import pcgen.cdom.enumeration.AssociationKey; import pcgen.cdom.enumeration.EqModFormatCat; import pcgen.cdom.enumeration.FormulaKey; import pcgen.cdom.enumeration.IntegerKey; @@ -174,6 +176,8 @@ locationStringList[NOT_CARRIED] = NOT_CARRIED_STR; } + private AssociationSupport assocSupt = new AssociationSupport(); + private BigDecimal costMod = BigDecimal.ZERO; private List<EquipmentModifier> eqModifierList = new ArrayList<EquipmentModifier>(); @@ -6048,33 +6052,44 @@ return null; } - public void addAssociation(PObject obj, String... o) + public void addAssociation(PObject obj, String o) { - obj.tempAddAssociated(o); + assocSupt.addAssoc(obj, AssociationKey.CHOICES, new FixedStringList(o)); } + public void addAssociation(PObject obj, FixedStringList o) + { + assocSupt.addAssoc(obj, AssociationKey.CHOICES, o); + } + public boolean containsAssociated(PObject obj, String o) { - return obj.tempContainsAssociated(o); + return assocSupt.containsAssoc(obj, AssociationKey.CHOICES, new FixedStringList(o)); } + public boolean containsAssociated(PObject obj, FixedStringList o) + { + return assocSupt.containsAssoc(obj, AssociationKey.CHOICES, o); + } + public int getSelectCorrectedAssociationCount(PObject obj) { //TODO Null here is probably a problem for the PC :/ int select = obj.getSafe(FormulaKey.SELECT).resolve(this, true, null, "").intValue(); - return obj.tempGetAssociatedCount() / select; + return assocSupt.getAssocCount(obj, AssociationKey.CHOICES) / select; } public List<String> getAssociationList(PObject obj) { List<String> list = new ArrayList<String>(); - ArrayList<String[]> assocList = obj.getAssociatedList(); + List<FixedStringList> assocList = assocSupt.getAssocList(obj, + AssociationKey.CHOICES); if (assocList != null) { - for (String[] ac : assocList) + for (FixedStringList ac : assocList) { - final String choiceStr = ac[0]; + final String choiceStr = ac.get(0); if (Constants.EMPTY_STRING.equals(choiceStr)) { list.add(null); @@ -6090,40 +6105,59 @@ public boolean hasAssociations(PObject obj) { - return obj.tempGetAssociatedCount() > 0; + return assocSupt.hasAssocs(obj, AssociationKey.CHOICES); } public List<String> removeAllAssociations(PObject obj) { List<String> list = getAssociationList(obj); - obj.tempClearAssociated(); + assocSupt.removeAllAssocs(obj, AssociationKey.CHOICES); return list; } - public void removeAssociation(PObject obj, String... o) + public void removeAssociation(PObject obj, String o) { - obj.tempRemoveAssociated(o); + assocSupt.removeAssoc(obj, AssociationKey.CHOICES, new FixedStringList(o)); } + public void removeAssociation(PObject obj, FixedStringList o) + { + assocSupt.removeAssoc(obj, AssociationKey.CHOICES, o); + } + public int getDetailedAssociationCount(PObject obj) { - return obj.tempGetAssociatedCount(true); + List<FixedStringList> assocs = assocSupt.getAssocList(obj, + AssociationKey.CHOICES); + int count = 0; + if (assocs != null) + { + for (FixedStringList choice : assocs) + { + count += choice.size(); + } + } + return count; } - public List<String[]> getDetailedAssociations(PObject obj) + public List<FixedStringList> getDetailedAssociations(PObject obj) { - return new ArrayList<String[]>(obj.getAssociatedList()); + return assocSupt.getAssocList(obj, AssociationKey.CHOICES); } public List<String> getExpandedAssociations(PObject obj) { - ArrayList<String[]> assocs = obj.getAssociatedList(); + List<FixedStringList> assocs = assocSupt.getAssocList(obj, + AssociationKey.CHOICES); List<String> list = new ArrayList<String>(); - for (String[] choice : assocs) + if (assocs != null) { - for (String s : choice) + for (FixedStringList choice : assocs) { - list.add(s); + for (String s : choice) + { + list.add(s); + } } } return list; @@ -6131,6 +6165,6 @@ public String getFirstAssociation(PObject obj) { - return obj.getAssociatedList().get(0)[0]; + return assocSupt.getAssocList(obj, AssociationKey.CHOICES).get(0).get(0); } } Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -97,9 +97,6 @@ /** A map of Lists for the object */ protected final MapKeyMapToList mapListChar = new MapKeyMapToList(); - /** List of associated items for the object */ - private ArrayList<String[]> assocList = null; - /** List of Level Abilities for the object */ private List<LevelAbility> levelAbilityList = null; @@ -132,42 +129,7 @@ /* ************ * Methods * ************/ - /** - * Get associated count, without expanding - * @return associated count - */ - public final int tempGetAssociatedCount() - { - return tempGetAssociatedCount(false); - } - - /** - * Get the associated count for the object - * @param expand - * @return associated count - */ - public final int tempGetAssociatedCount(final boolean expand) - { - if (assocList == null) - { - return 0; - } - - if (expand) - { - int count = 0; - for ( String[] choice : assocList ) - { - count += choice.length; - } - return count; - } - - return assocList.size(); - } - - /** * Adds entry to the CSkill list * @param entry skill to add */ @@ -433,20 +395,6 @@ } /** - * Add the item to the associated list for this object - * @param aString the string to add to the associated list - */ - public final void tempAddAssociated(final String... aString) - { - if (assocList == null) - { - assocList = new ArrayList<String[]>(); - } - - assocList.add(aString); - } - - /** * Add to the 'save' for the character list * @param aString */ @@ -524,31 +472,6 @@ } /** - * Returns true if the assocaited item is in the associated list for this object - * @param associated - * @return true if the assocaited item is in the associated list for this object - */ - public final boolean tempContainsAssociated(final String associated) - { - if (assocList == null) - { - return false; - } - - for ( String[] choice : assocList ) - { - for ( String val : choice ) - { - if ( val.equalsIgnoreCase(associated) ) - { - return true; - } - } - } - return false; - } - - /** * Add a natural weapon to the character list. * * @param weapon @@ -560,14 +483,6 @@ } /** - * Clear the associated list for this object - */ - public final void tempClearAssociated() - { - assocList = null; - } - - /** * if a class implements the Cloneable interface then it should have a * public" 'clone ()' method It should be declared to throw * CloneNotSupportedException', but subclasses do not need the "throws" @@ -604,11 +519,6 @@ // } retVal.theSource = theSource.clone(); - if (assocList != null) - { - retVal.assocList = new ArrayList<String[]>(assocList); - } - if (bonusList != null) { retVal.bonusList = new ArrayList<BonusObj>(); @@ -1197,35 +1107,6 @@ } /** - * remove the associated item from the list - * @param associated - * @return true if successful - */ - public final boolean tempRemoveAssociated(final String... associated) - { - boolean ret = false; - if (assocList == null) - { - return ret; - } - - for ( Iterator<String[]> i = assocList.iterator(); i.hasNext(); ) - { - if (i.next() == associated) - { - i.remove(); - } - } - - if (assocList.size() == 0) - { - assocList = null; - } - - return ret; - } - - /** * Remove the save * @param bonusString */ @@ -2097,19 +1978,6 @@ } /** - * Get the associated list - * @return the associated list - */ - public final ArrayList<String[]> getAssociatedList() - { - if (assocList == null) - { - return new ArrayList<String[]>(); - } - return assocList; - } - - /** * <p>Retrieves the unarmed damage information for this PObject. This * comes from the <code>UDAM</code> tag, and can be a simple die string * as in <code>1d20</code>, or a list of size-modified data like is Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -55,6 +55,7 @@ import pcgen.base.formula.Formula; import pcgen.base.lang.StringUtil; import pcgen.base.util.DoubleKeyMap; +import pcgen.base.util.FixedStringList; import pcgen.base.util.HashMapToList; import pcgen.cdom.base.AssociatedPrereqObject; import pcgen.cdom.base.CDOMObject; @@ -13032,8 +13033,7 @@ // Keep track of which bonuses have been calculated processedBonusList.add(bonus); - - for (BonusPair bp : bonus.getStringListFromBonus()) + for (BonusPair bp : bonus.getStringListFromBonus(this)) { final double iBonus = bp.resolve(this).doubleValue(); setActiveBonusStack(iBonus, bp.bonusKey, getActiveBonusMap()); @@ -13951,7 +13951,7 @@ } // calculate bonus and add to activeBonusMap - for (BonusPair bp : aBonus.getStringListFromBonus()) + for (BonusPair bp : aBonus.getStringListFromBonus(this)) { final double iBonus = bp.resolve(this).doubleValue(); setActiveBonusStack(iBonus, bp.bonusKey, getActiveBonusMap()); @@ -14558,9 +14558,9 @@ && bonus.getCreatorObject() instanceof PObject) { PObject creator = (PObject) bonus.getCreatorObject(); - for (String[] assoc : creator.getAssociatedList()) + for (FixedStringList assoc : getDetailedAssociations(creator)) { - if (Arrays.binarySearch(assoc, statAbbr) >= 0) + if (assoc.contains(statAbbr)) { found = true; break; @@ -14595,7 +14595,7 @@ // Grab the list of relevant types so that we can build up // the // bonuses with the stacking rules applied. - for (BonusPair bp : bonus.getStringListFromBonus()) + for (BonusPair bp : bonus.getStringListFromBonus(this)) { if (bp.bonusKey.startsWith(prefix)) { @@ -17867,31 +17867,42 @@ return cache.getSkillCost(this, sk, cl); } - public void addAssociation(PObject obj, String... o) + public void addAssociation(PObject obj, String o) { - obj.tempAddAssociated(o); + assocSupt.addAssoc(obj, AssociationKey.CHOICES, new FixedStringList(o)); } + public void addAssociation(PObject obj, FixedStringList o) + { + assocSupt.addAssoc(obj, AssociationKey.CHOICES, o); + } + public boolean containsAssociated(PObject obj, String o) { - return obj.tempContainsAssociated(o); + return assocSupt.containsAssoc(obj, AssociationKey.CHOICES, new FixedStringList(o)); } + public boolean containsAssociated(PObject obj, FixedStringList o) + { + return assocSupt.containsAssoc(obj, AssociationKey.CHOICES, o); + } + public int getSelectCorrectedAssociationCount(PObject obj) { - return obj.tempGetAssociatedCount() + return assocSupt.getAssocCount(obj, AssociationKey.CHOICES) / obj.getSafe(FormulaKey.SELECT).resolve(this, "").intValue(); } public List<String> getAssociationList(PObject obj) { List<String> list = new ArrayList<String>(); - ArrayList<String[]> assocList = obj.getAssociatedList(); + List<FixedStringList> assocList = assocSupt.getAssocList(obj, + AssociationKey.CHOICES); if (assocList != null) { - for (String[] ac : assocList) + for (FixedStringList ac : assocList) { - final String choiceStr = ac[0]; + final String choiceStr = ac.get(0); if (Constants.EMPTY_STRING.equals(choiceStr)) { list.add(null); @@ -17907,40 +17918,59 @@ public boolean hasAssociations(PObject obj) { - return obj.tempGetAssociatedCount() > 0; + return assocSupt.hasAssocs(obj, AssociationKey.CHOICES); } public List<String> removeAllAssociations(PObject obj) { List<String> list = getAssociationList(obj); - obj.tempClearAssociated(); + assocSupt.removeAllAssocs(obj, AssociationKey.CHOICES); return list; } - public void removeAssociation(PObject obj, String... o) + public void removeAssociation(PObject obj, String o) { - obj.tempRemoveAssociated(o); + assocSupt.removeAssoc(obj, AssociationKey.CHOICES, new FixedStringList(o)); } + public void removeAssociation(PObject obj, FixedStringList o) + { + assocSupt.removeAssoc(obj, AssociationKey.CHOICES, o); + } + public int getDetailedAssociationCount(PObject obj) { - return obj.tempGetAssociatedCount(true); + List<FixedStringList> assocs = assocSupt.getAssocList(obj, + AssociationKey.CHOICES); + int count = 0; + if (assocs != null) + { + for (FixedStringList choice : assocs) + { + count += choice.size(); + } + } + return count; } - public List<String[]> getDetailedAssociations(PObject obj) + public List<FixedStringList> getDetailedAssociations(PObject obj) { - return new ArrayList<String[]>(obj.getAssociatedList()); + return assocSupt.getAssocList(obj, AssociationKey.CHOICES); } public List<String> getExpandedAssociations(PObject obj) { - ArrayList<String[]> assocs = obj.getAssociatedList(); + List<FixedStringList> assocs = assocSupt.getAssocList(obj, + AssociationKey.CHOICES); List<String> list = new ArrayList<String>(); - for (String[] choice : assocs) + if (assocs != null) { - for (String s : choice) + for (FixedStringList choice : assocs) { - list.add(s); + for (String s : choice) + { + list.add(s); + } } } return list; @@ -17948,42 +17978,42 @@ public String getFirstAssociation(PObject obj) { - return obj.getAssociatedList().get(0)[0]; + return assocSupt.getAssocList(obj, AssociationKey.CHOICES).get(0).get(0); } - public void addAssoc(Object obj, Object o) + public <T> void addAssoc(Object obj, AssociationKey<T> ak, T o) { - assocSupt.addAssoc(obj, o); + assocSupt.addAssoc(obj, ak, o); } - public boolean containsAssoc(Object obj, Object o) + public <T> boolean containsAssoc(Object obj, AssociationKey<T> ak, T o) { - return assocSupt.containsAssoc(obj, o); + return assocSupt.containsAssoc(obj, ak, o); } - public int getAssocCount(Object obj) + public int getAssocCount(Object obj, AssociationKey<?> ak) { - return assocSupt.getAssocCount(obj); + return assocSupt.getAssocCount(obj, ak); } - public List<Object> getAssocList(Object obj) + public <T> List<T> getAssocList(Object obj, AssociationKey<T> ak) { - return assocSupt.getAssocList(obj); + return assocSupt.getAssocList(obj, ak); } - public boolean hasAssocs(Object obj) + public boolean hasAssocs(Object obj, AssociationKey<?> ak) { - return assocSupt.hasAssocs(obj); + return assocSupt.hasAssocs(obj, ak); } - public List<Object> removeAllAssocs(Object obj) + public <T> List<T> removeAllAssocs(Object obj, AssociationKey<T> ak) { - return assocSupt.removeAllAssocs(obj); + return assocSupt.removeAllAssocs(obj, ak); } - public void removeAssoc(Object obj, Object o) + public <T> void removeAssoc(Object obj, AssociationKey<T> ak, T o) { - assocSupt.removeAssoc(obj, o); + assocSupt.removeAssoc(obj, ak, o); } public boolean hasUnlockedStat(PCStat stat) Modified: Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillModifier.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillModifier.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillModifier.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -172,7 +172,7 @@ .contains(keyName.toUpperCase()); if (!include) { - for (BonusPair bp : bonus.getStringListFromBonus()) + for (BonusPair bp : bonus.getStringListFromBonus(aPC)) { String bpKey = bp.bonusKey.toUpperCase(); if (bpKey.startsWith(bonusKey)) @@ -186,7 +186,7 @@ if (include) { double iBonus = 0; - for (BonusPair bp : bonus.getStringListFromBonus()) + for (BonusPair bp : bonus.getStringListFromBonus(aPC)) { String bpKey = bp.bonusKey.toUpperCase(); if (bpKey.startsWith(bonusKey)) Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/BonusObj.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -35,6 +35,7 @@ import java.util.regex.Pattern; import pcgen.base.formula.Formula; +import pcgen.base.util.FixedStringList; import pcgen.cdom.base.ConcretePrereqObject; import pcgen.cdom.base.Constants; import pcgen.cdom.base.FormulaFactory; @@ -894,9 +895,9 @@ 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 String[] NO_ASSOC = new String[] { "" }; + private static final FixedStringList NO_ASSOC = new FixedStringList(""); - private static final List<String[]> NO_ASSOC_LIST = Collections + private static final List<FixedStringList> NO_ASSOC_LIST = Collections .singletonList(NO_ASSOC); /** @@ -909,17 +910,17 @@ * * @return List of bonus strings */ - public List<BonusPair> getStringListFromBonus() + public List<BonusPair> getStringListFromBonus(PlayerCharacter pc) { List<BonusPair> bonusList = new ArrayList<BonusPair>(); - List<String[]> associatedList; + List<FixedStringList> associatedList; PObject anObj = null; if (creatorObj instanceof PObject) { anObj = (PObject) creatorObj; - associatedList = (anObj).getAssociatedList(); - if (associatedList.isEmpty()) + associatedList = pc.getDetailedAssociations(anObj); + if (associatedList == null || associatedList.isEmpty()) { associatedList = NO_ASSOC_LIST; } @@ -959,16 +960,17 @@ } else { - for (String[] assoc : associatedList) + for (FixedStringList assoc : associatedList) { StringBuilder asb = new StringBuilder(); - if (assoc.length == 1) + int size = assoc.size(); + if (size == 1) { - asb.append(assoc[0]); + asb.append(assoc.get(0)); } else { - asb.append(assoc.length).append(':'); + asb.append(size).append(':'); int loc = asb.length(); int count = 0; for (String s : assoc) Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/SpellListChoiceManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/SpellListChoiceManager.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/SpellListChoiceManager.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -27,6 +27,7 @@ import java.util.Iterator; import java.util.List; +import pcgen.base.util.FixedStringList; import pcgen.cdom.base.Constants; import pcgen.cdom.enumeration.ObjectKey; import pcgen.core.Ability; @@ -46,8 +47,8 @@ */ public class SpellListChoiceManager extends AbstractBasicStringChoiceManager { - String[] selected = null; - String[] fmc = null; + FixedStringList selected = null; + FixedStringList fmc = null; int maxSpellListSelections = 0; @@ -89,7 +90,7 @@ if (selected != null) { fmc = selected; - setMaxChoices(fmc.length); + setMaxChoices(fmc.size()); } } else @@ -143,18 +144,11 @@ { if (fmc == null) { - fmc = new String[maxSpellListSelections]; + fmc = new FixedStringList(maxSpellListSelections); aPc.addAssociation(pobject, fmc); } - for (int i = 0; i < fmc.length; i++) - { - if (fmc[i] == null) - { - fmc[i] = item; - break; - } - } + fmc.add(item); } /** @@ -191,8 +185,8 @@ final StringBuffer sb = new StringBuffer(100); - List<String[]> origList = pc.getDetailedAssociations(anAbility); - for (String[] assoc : origList) + List<FixedStringList> origList = pc.getDetailedAssociations(anAbility); + for (FixedStringList assoc : origList) { sb.append(anAbility.getKeyName()).append(" ("); int chosen = 0; @@ -204,7 +198,7 @@ } } sb.append(chosen); - sb.append(" of ").append(assoc.length).append(") "); + sb.append(" of ").append(assoc.size()).append(") "); boolean needComma = false; for (String a : assoc) @@ -358,7 +352,7 @@ // Remove all previously selected items from the available list - for (String[] assoc : aPC.getDetailedAssociations(pobject)) + for (FixedStringList assoc : aPC.getDetailedAssociations(pobject)) { if (assoc == selected) { Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Creator.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -36,12 +36,14 @@ import java.util.StringTokenizer; import pcgen.base.lang.StringUtil; +import pcgen.base.util.FixedStringList; import pcgen.cdom.base.CDOMListObject; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.base.ChoiceSet; import pcgen.cdom.base.Constants; import pcgen.cdom.base.TransitionChoice; +import pcgen.cdom.enumeration.AssociationKey; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.list.ClassSpellList; @@ -1398,11 +1400,11 @@ if (ability.getSafe(ObjectKey.MULTIPLE_ALLOWED)) { buffer.append(TAG_APPLIEDTO).append(TAG_END); - List<String[]> assocList = thePC.getDetailedAssociations(ability); + List<FixedStringList> assocList = thePC.getDetailedAssociations(ability); boolean first = true; - for (String[] assocArray : assocList) + for (FixedStringList assocArray : assocList) { - if (assocArray.length > 1) + if (assocArray.size() > 1) { buffer.append(TAG_MULTISELECT).append(':'); } @@ -1412,6 +1414,7 @@ { buffer.append(Constants.COMMA); } + first = false; buffer.append(EntityEncoder.encode(assoc)); } } @@ -2586,7 +2589,7 @@ } for (TransitionChoice<?> tc : addList) { - List<Object> assocList = thePC.getAssocList(tc); + List<Object> assocList = thePC.getAssocList(tc, AssociationKey.ADD); if (assocList == null) { continue; Modified: Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/io/PCGVer2Parser.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -34,11 +34,13 @@ import java.util.Set; import java.util.StringTokenizer; +import pcgen.base.util.FixedStringList; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.ChoiceSet; import pcgen.cdom.base.Constants; import pcgen.cdom.base.TransitionChoice; import pcgen.cdom.content.LevelCommandFactory; +import pcgen.cdom.enumeration.AssociationKey; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.StringKey; @@ -1815,7 +1817,7 @@ } else { - thePC.addAssoc(tc, obj); + thePC.addAssoc(tc, AssociationKey.ADD, obj); } } } @@ -2358,12 +2360,10 @@ Integer.parseInt(sTok.nextToken()); sTok.nextToken(); // toss this--number of choices made - final String[] array = new String[maxChoices]; - - int index = 0; + final FixedStringList array = new FixedStringList(maxChoices); while (sTok.hasMoreTokens()) { - array[index++] = sTok.nextToken(); + array.add(sTok.nextToken()); } thePC.addAssociation(ability, array); @@ -2630,12 +2630,10 @@ .nextToken()); sTok.nextToken(); // toss this--number of choices made - final String[] array = new String[maxChoices]; - - int index = 0; + final FixedStringList array = new FixedStringList(maxChoices); while (sTok.hasMoreTokens()) { - array[index++] = sTok.nextToken(); + array.add(sTok.nextToken()); } thePC.addAssociation(aFeat, array); Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/FeatParser.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -1,187 +0,0 @@ -/* - * FeatLoader.java - * - * Copyright 2003 (C) Chris Ward <fr...@pu...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on 12-Jan-2004 - * - * Current Ver: $Revision$ - * - * Last Editor: $Author$ - * - * Last Edited: $Date$ - * - */ -package pcgen.persistence.lst.utils; - -import pcgen.cdom.base.PrereqObject; -import pcgen.core.*; -import pcgen.core.prereq.Prerequisite; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.prereq.PreParserFactory; -import pcgen.util.Logging; - -import java.util.*; - -/** - * Parses Feats - */ -public class FeatParser -{ - - /** - * Must be of the form: - * Feat1|Feat2|PRExx:abx - * or - * Feat1|Feat2|PREMULT:[PRExxx:abc],[PRExxx:xyz] - * - * @param aString The string to be parsed - * @return List of Feats - */ - public static List<Ability> parseVirtualFeatList(final String aString) - { - String preString = ""; - final List<Ability> aList = new ArrayList<Ability>(); - - final StringTokenizer aTok = new StringTokenizer(aString, "|"); - - while (aTok.hasMoreTokens()) - { - final String tok = aTok.nextToken(); - - if (tok.length() <= 0) - { - continue; - } - - if (PreParserFactory.isPreReqString(tok)) - { - // We have a PRExxx tag! - preString = tok; - } - else - { - final Collection<String> choices = new ArrayList<String>(); - final String abilityName = - AbilityUtilities.getUndecoratedName(tok, choices); - Ability anAbility = AbilityUtilities.getAbilityFromList( - aList, "FEAT", abilityName, Ability.Nature.ANY); - - if (anAbility == null) - { - anAbility = Globals.getAbilityKeyed("FEAT", abilityName); - if (anAbility != null) - { - anAbility = anAbility.clone(); - anAbility.setFeatType(Ability.Nature.VIRTUAL); - anAbility.clearPrerequisiteList(); - } - } - - if (anAbility != null) - { - for (final String choice : choices) - { - anAbility.tempAddAssociated(choice); - } - - aList.add(anAbility); - } - } - } - - if ((preString.length() > 0) && !aList.isEmpty()) - { - for (final PrereqObject prO : aList) - { - try - { - final PreParserFactory factory = PreParserFactory.getInstance(); - final Prerequisite prereq = factory.parse(preString); - prO.addPrerequisite(prereq); - } - catch (PersistenceLayerException ple) - { - Logging.errorPrint(ple.getMessage(), ple); - } - } - } - - return aList; - } - - /** - * Parse a virtual feat list definition. Must be of the form: - * Feat1|Feat2|PRExx:abx - * or - * Feat1|Feat2|PREMULT:[PRExxx:abc],[PRExxx:xyz] - * - * @param aString The string to parse - * @return List of Feat names and their prereqs - */ - public static List<QualifiedObject<String>> parseVirtualFeatListToQualObj( - final String aString) - { - String preString = ""; - final Collection<String> abilityList = new ArrayList<String>(); - - final StringTokenizer aTok = new StringTokenizer(aString, "|"); - - while (aTok.hasMoreTokens()) - { - final String tok = aTok.nextToken(); - - if (tok.length() <= 0) - { - continue; - } - - if (PreParserFactory.isPreReqString(tok)) - { - // We have a PRExxx tag! - preString = tok; - } - else - { - abilityList.add(tok); - } - } - - final List<QualifiedObject<String>> aList = - new ArrayList<QualifiedObject<String>>(); - for (final String ability : abilityList) - { - try - { - final List<Prerequisite> prereqList = new ArrayList<Prerequisite>(); - if (preString.length() > 0) - { - final PreParserFactory factory = PreParserFactory.getInstance(); - final Prerequisite prereq = factory.parse(preString); - prereqList.add(prereq); - } - aList.add(new QualifiedObject<String>(ability, prereqList)); - } - catch (PersistenceLayerException ple) - { - Logging.errorPrint(ple.getMessage(), ple); - } - } - - return aList; - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/VfeatToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/VfeatToken.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/VfeatToken.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -1,57 +0,0 @@ -package plugin.lsttokens.pcclass; - -import java.util.List; - -import pcgen.core.Ability; -import pcgen.core.AbilityCategory; -import pcgen.core.PCClass; -import pcgen.core.QualifiedObject; -import pcgen.core.prereq.Prerequisite; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.PCClassLstToken; -import pcgen.persistence.lst.prereq.PreParserFactory; -import pcgen.persistence.lst.utils.FeatParser; -import pcgen.util.Logging; - -/** - * Class deals with VFEAT Token - */ -public class VfeatToken implements PCClassLstToken -{ - - /* - * No need to convert this to a new token - only difference from global token is the PRExxx - */ - - public String getTokenName() - { - return "VFEAT"; - } - - public boolean parse(PCClass pcclass, String value, int level) - { - List<QualifiedObject<String>> vfeatList = - FeatParser.parseVirtualFeatListToQualObj(value); - for (final QualifiedObject<String> ability : vfeatList) - { - String preLevelString = ""; - try - { - PreParserFactory factory = PreParserFactory.getInstance(); - preLevelString = - "PRECLASS:1," + pcclass.getKeyName() + "=" + level; //$NON-NLS-1$ //$NON-NLS-2$ - Prerequisite r = factory.parse(preLevelString); - ability.addPrerequisite(r); - } - catch (PersistenceLayerException notUsed) - { - Logging.errorPrint("Failed to create level prereq for VFEAT " - + value + ". Prereq was " + preLevelString + ".", notUsed); - return false; - } - pcclass.addAbility(AbilityCategory.FEAT, Ability.Nature.VIRTUAL, - ability); - } - return true; - } -} Modified: Trunk/pcgen/code/src/test/pcgen/core/AbilityTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/AbilityTest.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/test/pcgen/core/AbilityTest.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -90,13 +90,13 @@ TestHelper.makeAbility("Weapon Throwing", "FEAT", "General.Fighter"); ab5.put(ObjectKey.MULTIPLE_ALLOWED, Boolean.TRUE); - ab5.tempAddAssociated("Wellies"); + //ab5.tempAddAssociated("Wellies"); Ability ab6 = ab5.clone(); - ab6.tempAddAssociated("Bar Stool"); + //ab6.tempAddAssociated("Bar Stool"); Ability ab7 = ab5.clone(); - ab7.tempAddAssociated("Tantrum"); + //ab7.tempAddAssociated("Tantrum"); ab7.setName("Weapon Throwing (Tantrum)"); ab7.setKeyName("KEY_Weapon Throwing (Tantrum)"); Modified: Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-09-27 22:53:24 UTC (rev 7815) +++ Trunk/pcgen/code/src/test/pcgen/core/bonus/BonusTest.java 2008-09-27 23:58:34 UTC (rev 7816) @@ -223,7 +223,7 @@ character.addAssociation(testBonus, "INT"); bonus.setCreatorObject(testBonus); character.addFeat(testBonus, null); - List<BonusPair> bonusPairs = bonus.getStringListFromBonus(); + List<BonusPair> bonusPairs = bonus.getStringListFromBonus(character); assertEquals(1, bonusPairs.size()); BonusPair bp = bonusPairs.get(0); assertEquals("VISION.DARKVISION:MAGICAL BOON", bp.bonusKey); @@ -248,7 +248,7 @@ bonus.setCreatorObject(testBonus); character.addFeat(testBonus, null); - List<BonusPair> bonusPairs = bonus.getStringListFromBonus(); + List<BonusPair> bonusPairs = bonus.getStringListFromBonus(character); assertEquals(2, bonusPairs.size()); int totalBonus = 0; BonusPair bp = bonusPairs.get(0); @@ -277,7 +277,7 @@ bonus.setCreatorObject(testBonus); character.addFeat(testBonus, null); - List<BonusPair> bonusPairs = bonus.getStringListFromBonus(); + List<BonusPair> bonusPairs = bonus.getStringListFromBonus(character); assertEquals(2, bonusPairs.size()); for (BonusPair bp : bonusPairs) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2009-07-13 23:48:35
|
Revision: 10086 http://pcgen.svn.sourceforge.net/pcgen/?rev=10086&view=rev Author: thpr Date: 2009-07-13 23:48:32 +0000 (Mon, 13 Jul 2009) Log Message: ----------- enable CHOOSE:ARMORPROFICIENCY Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/AssociationListKey.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/lsttokens/choose/ArmorProficiencyToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2009-07-13 23:44:15 UTC (rev 10085) +++ Trunk/pcgen/code/pluginbuild.xml 2009-07-13 23:48:32 UTC (rev 10086) @@ -2814,6 +2814,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${lstplugins.dir}/ChooseToken-ARMORPROFICIENCY.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/choose/ArmorProficiencyToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${lstplugins.dir}/ChooseToken-ARMORTYPE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/AssociationListKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/AssociationListKey.java 2009-07-13 23:44:15 UTC (rev 10085) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/AssociationListKey.java 2009-07-13 23:48:32 UTC (rev 10086) @@ -131,6 +131,8 @@ public static final AssociationListKey<Language> CHOOSE_LANGAUGE = new AssociationListKey<Language>(); public static final AssociationListKey<Equipment> CHOOSE_EQUIPMENT = new AssociationListKey<Equipment>(); + + public static final AssociationListKey<ArmorProf> CHOOSE_ARMORPROFICIENCY = new AssociationListKey<ArmorProf>(); private static CaseInsensitiveMap<AssociationListKey<?>> map = null; Added: Trunk/pcgen/code/src/java/plugin/lsttokens/choose/ArmorProficiencyToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/choose/ArmorProficiencyToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/choose/ArmorProficiencyToken.java 2009-07-13 23:48:32 UTC (rev 10086) @@ -0,0 +1,65 @@ +/* + * Copyright 2007 (C) Thomas Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package plugin.lsttokens.choose; + +import pcgen.cdom.enumeration.AssociationListKey; +import pcgen.core.ArmorProf; +import pcgen.core.Globals; +import pcgen.rules.persistence.token.AbstractQualifiedChooseToken; + +public class ArmorProficiencyToken extends + AbstractQualifiedChooseToken<ArmorProf> +{ + + private static final Class<ArmorProf> ARMORPROF_CLASS = ArmorProf.class; + + @Override + public String getTokenName() + { + return "ARMORPROFICIENCY"; + } + + @Override + protected Class<ArmorProf> getChooseClass() + { + return ARMORPROF_CLASS; + } + + @Override + protected String getDefaultTitle() + { + return "Armor Proficiency choice"; + } + + public ArmorProf decodeChoice(String s) + { + return Globals.getContext().ref.silentlyGetConstructedCDOMObject( + ARMORPROF_CLASS, s); + } + + public String encodeChoice(Object choice) + { + return ((ArmorProf) choice).getKeyName(); + } + + @Override + protected AssociationListKey<ArmorProf> getListKey() + { + return AssociationListKey.CHOOSE_ARMORPROFICIENCY; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2010-12-05 02:39:14
|
Revision: 14049 http://pcgen.svn.sourceforge.net/pcgen/?rev=14049&view=rev Author: thpr Date: 2010-12-05 02:39:06 +0000 (Sun, 05 Dec 2010) Log Message: ----------- Convert BaseDice in Game Mode to "new" style tokens and use Context Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/GameMode.java Trunk/pcgen/code/src/java/pcgen/core/Globals.java Trunk/pcgen/code/src/java/pcgen/core/RollInfo.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/BasediceToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/DownToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/UpToken.java Trunk/pcgen/code/src/test/pcgen/core/EquipmentTest.java Trunk/pcgen/code/src/test/pcgen/core/GlobalsTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/cdom/content/BaseDice.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseDiceLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseDiceLstToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/BasediceToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/pluginbuild.xml 2010-12-05 02:39:06 UTC (rev 14049) @@ -5642,13 +5642,6 @@ </fileset> </jar> <!-- GameMode: BaseDice tokens--> - <jar jarfile="${systemlstplugins.dir}/GameMode-BaseDiceLstToken-BASEDICE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/gamemode/basedice/BasediceToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${systemlstplugins.dir}/GameMode-BaseDiceLstToken-DOWN.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Added: Trunk/pcgen/code/src/java/pcgen/cdom/content/BaseDice.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/content/BaseDice.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/cdom/content/BaseDice.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -0,0 +1,103 @@ +/* + * Copyright 2010 (C) Tom Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package pcgen.cdom.content; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import pcgen.cdom.base.Loadable; +import pcgen.core.RollInfo; + +public class BaseDice implements Loadable +{ + + private URI sourceURI; + private String dieName; + private RollInfo diceInfo; + private List<RollInfo> downList = new ArrayList<RollInfo>(); + private List<RollInfo> upList = new ArrayList<RollInfo>(); + + public URI getSourceURI() + { + return sourceURI; + } + + public void setSourceURI(URI source) + { + sourceURI = source; + } + + public void setName(String name) + { + dieName = name; + diceInfo = new RollInfo(name); + } + + public String getDisplayName() + { + return dieName; + } + + public void setKeyName(String key) + { + setName(key); + } + + public String getKeyName() + { + return getDisplayName(); + } + + public String getLSTformat() + { + return getDisplayName(); + } + + public boolean isInternal() + { + return false; + } + + public boolean isType(String type) + { + return false; + } + + public void addToDownList(RollInfo rollInfo) + { + downList.add(rollInfo); + } + + public void addToUpList(RollInfo rollInfo) + { + upList.add(rollInfo); + } + + public List<RollInfo> getUpSteps() + { + return Collections.unmodifiableList(upList); + } + + public List<RollInfo> getDownSteps() + { + return Collections.unmodifiableList(downList); + } + +} Modified: Trunk/pcgen/code/src/java/pcgen/core/GameMode.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/GameMode.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/pcgen/core/GameMode.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -84,8 +84,6 @@ private List<WieldCategory> wieldCategoryList = new ArrayList<WieldCategory>(); private HashMapToList<String, ACControl> ACTypeAddMap = new HashMapToList<String, ACControl>(); private HashMapToList<String, ACControl> ACTypeRemoveMap = new HashMapToList<String, ACControl>(); - private Map<String, String> damageDownMap = new HashMap<String, String>(); - private Map<String, String> damageUpMap = new HashMap<String, String>(); private Map<String, String> plusCalcs; private Map<String, String> spellRangeMap = new HashMap<String, String>(); private String acAbbrev = ""; @@ -404,15 +402,6 @@ } /** - * Get Damage down map - * @return Map of damage downs - */ - public Map<String, String> getDamageDownMap() - { - return damageDownMap; - } - - /** * Set DR text * @param aString */ @@ -422,15 +411,6 @@ } /** - * Weapon size changes damage - * @return Map - */ - public Map<String, String> getDamageUpMap() - { - return damageUpMap; - } - - /** * Set the default spell book * @param aString */ Modified: Trunk/pcgen/code/src/java/pcgen/core/Globals.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/pcgen/core/Globals.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -59,6 +59,7 @@ import pcgen.cdom.base.CDOMReference; import pcgen.cdom.base.Constants; import pcgen.cdom.base.MasterListInterface; +import pcgen.cdom.content.BaseDice; import pcgen.cdom.enumeration.AssociationKey; import pcgen.cdom.enumeration.Gender; import pcgen.cdom.enumeration.ListKey; @@ -69,7 +70,6 @@ import pcgen.cdom.enumeration.StringKey; import pcgen.cdom.enumeration.Type; import pcgen.cdom.list.CompanionList; -import pcgen.cdom.reference.TransparentReferenceManufacturer; import pcgen.core.analysis.SizeUtilities; import pcgen.core.character.CompanionMod; import pcgen.core.character.EquipSlot; @@ -1499,44 +1499,68 @@ */ public static String adjustDamage(final String aDamage, int baseSize, final int finalSize) { - String result = aDamage; - int multiplier = 1; - int direction = 0; - String parseString = Constants.EMPTY_STRING; - if (baseSize < finalSize) + ReferenceContext ref = Globals.getContext().ref; + BaseDice bd = ref.silentlyGetConstructedCDOMObject(BaseDice.class, + aDamage); + int multiplier = 0; + List<RollInfo> steps = null; + if (bd == null) { - parseString = getDamageUpKey(aDamage); - direction = 1; + //Need to test for higher dice + final RollInfo aRollInfo = new RollInfo(aDamage); + final String baseDice = "1d" + Integer.toString(aRollInfo.sides); + bd = ref.silentlyGetConstructedCDOMObject(BaseDice.class, + baseDice); + if (bd != null) + { + multiplier = aRollInfo.times; + } } - else if ( baseSize > finalSize ) + else { - parseString = getDamageDownKey(aDamage); - direction = -1; + multiplier = 1; } - - if ( direction != 0 && parseString != null ) + RollInfo bi; + if (bd == null) { - StringTokenizer aTok = new StringTokenizer(parseString, Constants.PIPE); - multiplier = Integer.parseInt(aTok.nextToken()); - parseString = aTok.nextToken(); - aTok = new StringTokenizer(parseString, ","); + bi = new RollInfo(aDamage); + } + else + { + if (baseSize < finalSize) + { + steps = bd.getUpSteps(); + } + else if (baseSize > finalSize) + { + steps = bd.getDownSteps(); + } + else + { + // Not a warning? + return aDamage; + } + int difference = Math.abs(baseSize - finalSize); - while ((baseSize != finalSize) && aTok.hasMoreTokens()) + int index; + if (steps.size() > difference) { - result = aTok.nextToken(); - baseSize += direction; + index = difference - 1; } - + else + { + index = steps.size() - 1; + } + bi = steps.get(index); } - if (multiplier > 1) { - final RollInfo aRollInfo = new RollInfo(result); - aRollInfo.times *= multiplier; - result = aRollInfo.toString(); + // Ugh, have to do this for "cloning" to avoid polluting the master + // RollInfo + bi = new RollInfo(bi.toString()); + bi.times *= multiplier; } - - return result; + return bi.toString(); } /** @@ -2281,50 +2305,7 @@ getCustColumnWidth().addAll(l); } - private static String getDamageDownKey(final String aDamage) - { - if (SettingsHandler.getGame().getDamageDownMap().containsKey(aDamage)) - { - return "1|" + SettingsHandler.getGame().getDamageDownMap().get(aDamage); - } - - final RollInfo aRollInfo = new RollInfo(aDamage); - final String baseDice = "1d" + Integer.toString(aRollInfo.sides); - - if (SettingsHandler.getGame().getDamageDownMap().containsKey(baseDice)) - { - return Integer.toString(aRollInfo.times) + "|" - + SettingsHandler.getGame().getDamageDownMap().get(baseDice); - } - - return null; - } - /** - * How to change damage as weapon size changes is Contained in a Map - * @param aDamage - * @return String - */ - private static String getDamageUpKey(final String aDamage) - { - if (SettingsHandler.getGame().getDamageUpMap().containsKey(aDamage)) - { - return "1|" + SettingsHandler.getGame().getDamageUpMap().get(aDamage); - } - - final RollInfo aRollInfo = new RollInfo(aDamage); - final String baseDice = "1d" + Integer.toString(aRollInfo.sides); - - if (SettingsHandler.getGame().getDamageUpMap().containsKey(baseDice)) - { - return Integer.toString(aRollInfo.times) + "|" - + SettingsHandler.getGame().getDamageUpMap().get(baseDice); - } - - return null; - } - - /** * Get a writable path for storing files * First check to see if it's been set in-program * Then check user home directory Modified: Trunk/pcgen/code/src/java/pcgen/core/RollInfo.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/RollInfo.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/pcgen/core/RollInfo.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -299,7 +299,7 @@ { final StringBuffer buf = new StringBuffer(); - if (times > 1) + if (times > 0) { buf.append(times); } Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseDiceLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseDiceLoader.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseDiceLoader.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -1,98 +0,0 @@ -package pcgen.persistence.lst; - -import java.net.URI; -import java.util.HashMap; -import java.util.Map; -import java.util.StringTokenizer; - -import pcgen.core.GameMode; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.SystemLoader; -import pcgen.util.Logging; - -/** - * This class loads in and parses the BASEDICE tag - */ -public class BaseDiceLoader -{ - - /** BASEDICE = "baseDice" */ - public static final String BASEDICE = "baseDice"; - /** UP = "up" */ - public static final String UP = "up"; - /** DOWN = "down" */ - public static final String DOWN = "down"; - - /** Constructor */ - public BaseDiceLoader() - { - // Do Nothing - } - - /** - * Parses a line - * @param gameMode - * @param lstLine - * @throws PersistenceLayerException - */ - public void parseLine(GameMode gameMode, String lstLine, URI source) - throws PersistenceLayerException - { - //BASEDICE:1d6 UP:1d8,2d6,3d6,4d6 DOWN:1d4,1d3,1d2,1,0 - StringTokenizer colToken = - new StringTokenizer(lstLine, SystemLoader.TAB_DELIM); - Map<String, String> bonus = new HashMap<String, String>(); - bonus.put(BASEDICE, ""); - bonus.put(UP, ""); - bonus.put(DOWN, ""); - - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(BaseDiceLstToken.class); - while (colToken.hasMoreTokens()) - { - final String colString = colToken.nextToken().trim(); - final int idxColon = colString.indexOf(':'); - String key = ""; - try - { - key = colString.substring(0, idxColon); - } - catch (StringIndexOutOfBoundsException e) - { - // TODO Deal with this exception - } - - BaseDiceLstToken token = (BaseDiceLstToken) tokenMap.get(key); - - if (token != null) - { - final String value = colString.substring(idxColon + 1).trim(); - LstUtils.deprecationCheck(token, "Base Dice", source, value); - if (!token.parse(bonus, value)) - { - Logging.errorPrint("Error parsing base dice:" - + "miscinfo.lst from the " + gameMode.getName() - + " Game Mode" + ':' + colString + "\""); - } - } - else - { - Logging.errorPrint("Invalid sub tag " + key - + " on BASEDICE line"); - throw new PersistenceLayerException("Invalid sub tag " + key - + " on BASEDICE line"); - } - } - - if (!gameMode.getDamageUpMap().containsKey(bonus.get(BASEDICE))) - { - gameMode.getDamageUpMap().put(bonus.get(BASEDICE), bonus.get(UP)); - gameMode.getDamageDownMap().put(bonus.get(BASEDICE), - bonus.get(DOWN)); - } - else - { - Logging.errorPrint("Duplicate BASEDICE: tag on gamemode."); - } - } -} Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseDiceLstToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseDiceLstToken.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/BaseDiceLstToken.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -1,43 +0,0 @@ -/* - * BaceDiceLstToken.java - * Copyright 2005 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:16 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package pcgen.persistence.lst; - -import java.util.Map; - -/** - * <code>BaceDiceLstToken</code> - * - * @author Devon Jones <sou...@ev...> - */ -public interface BaseDiceLstToken extends LstToken -{ - /** - * @param baseDice - * @param value - * @return true if parse OK - */ - public abstract boolean parse(Map<String, String> baseDice, String value); -} Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -42,7 +42,6 @@ //miscinfo.lst tokenTypeList.add(GameModeLstToken.class); tokenTypeList.add(AbilityCategoryLstToken.class); - tokenTypeList.add(BaseDiceLstToken.class); tokenTypeList.add(WieldCategoryLstToken.class); //statsandchecks.lst Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/BasediceToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/BasediceToken.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/BasediceToken.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -2,9 +2,10 @@ import java.net.URI; +import pcgen.cdom.content.BaseDice; import pcgen.core.GameMode; -import pcgen.persistence.lst.BaseDiceLoader; import pcgen.persistence.lst.GameModeLstToken; +import pcgen.persistence.lst.SimpleLoader; import pcgen.util.Logging; /** @@ -18,13 +19,13 @@ return "BASEDICE"; } - //FLP WEAPONSIZEPENALTY3.5 public boolean parse(GameMode gameMode, String value, URI source) { try { - BaseDiceLoader baseDiceLoader = new BaseDiceLoader(); - baseDiceLoader.parseLine(gameMode, "BASEDICE:" + value, source); + SimpleLoader<BaseDice> baseDiceLoader = new SimpleLoader<BaseDice>( + BaseDice.class); + baseDiceLoader.parseLine(gameMode.getModeContext(), value, source); return true; } catch (Exception e) Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/BasediceToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/BasediceToken.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/BasediceToken.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -1,24 +0,0 @@ -package plugin.lsttokens.gamemode.basedice; - -import java.util.Map; - -import pcgen.persistence.lst.BaseDiceLoader; -import pcgen.persistence.lst.BaseDiceLstToken; - -/** - * Class deals with BASEDICE Token - */ -public class BasediceToken implements BaseDiceLstToken -{ - - public String getTokenName() - { - return "BASEDICE"; - } - - public boolean parse(Map<String, String> baseDice, String value) - { - baseDice.put(BaseDiceLoader.BASEDICE, value); - return true; - } -} Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/DownToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/DownToken.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/DownToken.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -1,24 +1,78 @@ +/* + * Copyright (c) 2010 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.gamemode.basedice; -import java.util.Map; +import java.util.StringTokenizer; -import pcgen.persistence.lst.BaseDiceLoader; -import pcgen.persistence.lst.BaseDiceLstToken; +import pcgen.base.lang.StringUtil; +import pcgen.cdom.base.Constants; +import pcgen.cdom.content.BaseDice; +import pcgen.core.RollInfo; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.AbstractTokenWithSeparator; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.rules.persistence.token.ParseResult; -/** - * Class deals with DOWN Token - */ -public class DownToken implements BaseDiceLstToken +public class DownToken extends AbstractTokenWithSeparator<BaseDice> implements + CDOMPrimaryToken<BaseDice> { + @Override public String getTokenName() { return "DOWN"; } - public boolean parse(Map<String, String> baseDice, String value) + @Override + protected ParseResult parseTokenWithSeparator(LoadContext context, + BaseDice bd, String value) { - baseDice.put(BaseDiceLoader.DOWN, value); - return true; + StringTokenizer st = new StringTokenizer(value, Constants.COMMA); + while (st.hasMoreTokens()) + { + String roll = st.nextToken(); + try + { + bd.addToDownList(new RollInfo(roll)); + } + catch (IllegalArgumentException e) + { + return new ParseResult.Fail("Invalid Roll provided: " + roll + + " in " + value); + } + } + return ParseResult.SUCCESS; } + + @Override + protected char separator() + { + return ','; + } + + public String[] unparse(LoadContext context, BaseDice bd) + { + return new String[] { StringUtil.join(bd.getDownSteps(), + Constants.COMMA) }; + } + + public Class<BaseDice> getTokenClass() + { + return BaseDice.class; + } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/UpToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/UpToken.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/gamemode/basedice/UpToken.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -1,24 +1,77 @@ +/* + * Copyright (c) 2010 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.gamemode.basedice; -import java.util.Map; +import java.util.StringTokenizer; -import pcgen.persistence.lst.BaseDiceLoader; -import pcgen.persistence.lst.BaseDiceLstToken; +import pcgen.base.lang.StringUtil; +import pcgen.cdom.base.Constants; +import pcgen.cdom.content.BaseDice; +import pcgen.core.RollInfo; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.AbstractTokenWithSeparator; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.rules.persistence.token.ParseResult; -/** - * Class deals with UP Token - */ -public class UpToken implements BaseDiceLstToken +public class UpToken extends AbstractTokenWithSeparator<BaseDice> implements + CDOMPrimaryToken<BaseDice> { + @Override public String getTokenName() { return "UP"; } - public boolean parse(Map<String, String> baseDice, String value) + @Override + protected ParseResult parseTokenWithSeparator(LoadContext context, + BaseDice bd, String value) { - baseDice.put(BaseDiceLoader.UP, value); - return true; + StringTokenizer st = new StringTokenizer(value, Constants.COMMA); + while (st.hasMoreTokens()) + { + String roll = st.nextToken(); + try + { + bd.addToUpList(new RollInfo(roll)); + } + catch (IllegalArgumentException e) + { + return new ParseResult.Fail("Invalid Roll provided: " + roll + + " in " + value); + } + } + return ParseResult.SUCCESS; } + + @Override + protected char separator() + { + return ','; + } + + public String[] unparse(LoadContext context, BaseDice bd) + { + return new String[] { StringUtil.join(bd.getUpSteps(), Constants.COMMA) }; + } + + public Class<BaseDice> getTokenClass() + { + return BaseDice.class; + } } Modified: Trunk/pcgen/code/src/test/pcgen/core/EquipmentTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/EquipmentTest.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/test/pcgen/core/EquipmentTest.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -37,6 +37,7 @@ import pcgen.PCGenTestCase; import pcgen.base.lang.UnreachableError; import pcgen.cdom.base.Constants; +import pcgen.cdom.content.BaseDice; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.StringKey; @@ -343,8 +344,19 @@ is(Globals.getContext().ref .getConstructedObjectCount(SizeAdjustment.class), gt(0), "size list initialised"); - gameMode.getDamageUpMap().put("1d6", "1d8,2d6,3d6,4d6,6d6,8d6,12d6"); - gameMode.getDamageDownMap().put("1d6", "1d4,1d3,1d2,1"); + BaseDice d6 = gameMode.getModeContext().ref.constructCDOMObject(BaseDice.class, "1d6"); + d6.addToDownList(new RollInfo("1d4")); + d6.addToDownList(new RollInfo("1d3")); + d6.addToDownList(new RollInfo("1d2")); + d6.addToDownList(new RollInfo("1")); + d6.addToUpList(new RollInfo("1d8")); + d6.addToUpList(new RollInfo("2d6")); + d6.addToUpList(new RollInfo("3d6")); + d6.addToUpList(new RollInfo("4d6")); + d6.addToUpList(new RollInfo("6d6")); + d6.addToUpList(new RollInfo("8d6")); + d6.addToUpList(new RollInfo("12d6")); + Globals.getContext().ref.importObject(d6); is(custEq.getSize(), eq("M"), "starting size"); is(custEq.getDamage(getCharacter()), eq("1d6"), "starting size"); Modified: Trunk/pcgen/code/src/test/pcgen/core/GlobalsTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/GlobalsTest.java 2010-12-05 00:07:39 UTC (rev 14048) +++ Trunk/pcgen/code/src/test/pcgen/core/GlobalsTest.java 2010-12-05 02:39:06 UTC (rev 14049) @@ -1,6 +1,7 @@ package pcgen.core; import pcgen.PCGenTestCase; +import pcgen.cdom.content.BaseDice; import pcgen.util.TestHelper; /** @@ -438,8 +439,19 @@ is(Globals.getContext().ref .getConstructedObjectCount(SizeAdjustment.class), gt(0), "size list initialised"); - gameMode.getDamageUpMap().put("1d6", "1d8,2d6,3d6,4d6,6d6,8d6,12d6"); - gameMode.getDamageDownMap().put("1d6", "1d4,1d3,1d2,1"); + BaseDice d6 = gameMode.getModeContext().ref.constructCDOMObject(BaseDice.class, "1d6"); + d6.addToDownList(new RollInfo("1d4")); + d6.addToDownList(new RollInfo("1d3")); + d6.addToDownList(new RollInfo("1d2")); + d6.addToDownList(new RollInfo("1")); + d6.addToUpList(new RollInfo("1d8")); + d6.addToUpList(new RollInfo("2d6")); + d6.addToUpList(new RollInfo("3d6")); + d6.addToUpList(new RollInfo("4d6")); + d6.addToUpList(new RollInfo("6d6")); + d6.addToUpList(new RollInfo("8d6")); + d6.addToUpList(new RollInfo("12d6")); + Globals.getContext().ref.importObject(d6); SizeAdjustment small = Globals.getContext().ref.getAbbreviatedObject( SizeAdjustment.class, "S"); SizeAdjustment medium = Globals.getContext().ref.getAbbreviatedObject( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2010-12-15 19:40:03
|
Revision: 14145 http://pcgen.svn.sourceforge.net/pcgen/?rev=14145&view=rev Author: thpr Date: 2010-12-15 19:39:55 +0000 (Wed, 15 Dec 2010) Log Message: ----------- reduce out loader references in tokens Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/SimpleLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/SizeAdjustmentLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/StatsAndChecksLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLstToken.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/StatsAndChecksLstToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/MethodToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/StatToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/AlignmentnameToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/BonusspelllevelToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/ChecknameToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/StatnameToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/pluginbuild.xml 2010-12-15 19:39:55 UTC (rev 14145) @@ -5901,20 +5901,6 @@ </fileset> </jar> <!-- PointBuy tokens--> - <jar jarfile="${systemlstplugins.dir}/PointBuyLstToken-METHOD.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/pointbuy/MethodToken.class" /> - </patternset> - </fileset> - </jar> - <jar jarfile="${systemlstplugins.dir}/PointBuyLstToken-STAT.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/pointbuy/StatToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${systemlstplugins.dir}/PointBuyMethodLstToken-BONUS.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> @@ -5988,34 +5974,6 @@ </fileset> </jar> <!-- StatsAndChecks tokens--> - <jar jarfile="${systemlstplugins.dir}/StatsAndChecksLstToken-ALIGNMENTNAME.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/statsandchecks/AlignmentnameToken.class" /> - </patternset> - </fileset> - </jar> - <jar jarfile="${systemlstplugins.dir}/StatsAndChecksLstToken-BONUSSPELLLEVEL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/statsandchecks/BonusspelllevelToken.class" /> - </patternset> - </fileset> - </jar> - <jar jarfile="${systemlstplugins.dir}/StatsAndChecksLstToken-CHECKNAME.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/statsandchecks/ChecknameToken.class" /> - </patternset> - </fileset> - </jar> - <jar jarfile="${systemlstplugins.dir}/StatsAndChecksLstToken-STATNAME.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/statsandchecks/StatnameToken.class" /> - </patternset> - </fileset> - </jar> <!-- StatsAndChecks: Alignment tokens--> <jar jarfile="${systemlstplugins.dir}/StatsAndChecks-AlignmentLstToken-ABB.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLoader.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLoader.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,6 +1,6 @@ /* * PointBuyLoader.java - * Copyright 2003 (C) David Hibbs <sag...@us...> + * Copyright 2010 (C) Tom Parker <th...@us...> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,68 +25,75 @@ package pcgen.persistence.lst; import java.net.URI; -import java.util.Map; -import pcgen.core.GameMode; -import pcgen.core.SystemCollections; +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.base.Loadable; +import pcgen.core.PointBuyCost; +import pcgen.core.PointBuyMethod; import pcgen.rules.context.LoadContext; import pcgen.util.Logging; /** * This class is a LstFileLoader used to load point-buy methods. - * - * <p> - * Current Ver: $Revision$ <br> - * Last Editor: $Author$ <br> - * Last Edited: $Date$ - * - * @author ad9c15 */ -public class PointBuyLoader extends LstLineFileLoader +public class PointBuyLoader extends SimpleLoader<CDOMObject> { - /** - * Constructor for PointBuyLoader. - */ + public PointBuyLoader() { - super(); + super(CDOMObject.class); } - /** - * @see pcgen.persistence.lst.LstLineFileLoader#parseLine(java.net.URL, java.lang.String) - */ @Override - public void parseLine(LoadContext context, String lstLine, URI sourceURI) + protected Loadable getLoadable(LoadContext context, String token, + URI sourceURI) { - GameMode thisGameMode = - SystemCollections.getGameModeNamed(getGameMode()); - final int idxColon = lstLine.indexOf(':'); - if (idxColon < 0) + final int colonLoc = token.indexOf(':'); + if (colonLoc == -1) { - return; + Logging.errorPrint("Invalid Token - does not contain a colon: '" + + token + "' in " + sourceURI); + return null; } - - final String key = lstLine.substring(0, idxColon); - final String value = lstLine.substring(idxColon + 1); - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(PointBuyLstToken.class); - PointBuyLstToken token = (PointBuyLstToken) tokenMap.get(key); - if (token != null) + else if (colonLoc == 0) { - LstUtils.deprecationCheck(token, thisGameMode.getName(), sourceURI, - value); - if (!token.parse(thisGameMode, value, sourceURI)) - { - Logging.errorPrint("Error parsing point buy method " - + thisGameMode.getName() + '/' + sourceURI.toString() + ':' - + " \"" + lstLine + "\""); - } + Logging.errorPrint("Invalid Token - starts with a colon: '" + token + + "' in " + sourceURI); + return null; } + else if (colonLoc == (token.length() - 1)) + { + Logging.errorPrint("Invalid Token - " + + "ends with a colon (no value): '" + token + "' in " + + sourceURI); + return null; + } + String key = token.substring(0, colonLoc); + Class<? extends Loadable> loadClass; + if ("METHOD".equals(key)) + { + loadClass = PointBuyMethod.class; + } + else if ("STAT".equals(key)) + { + loadClass = PointBuyCost.class; + } else { - Logging.errorPrint("Illegal point buy method info " - + thisGameMode.getName() + '/' + sourceURI.toString() + ':' - + " \"" + lstLine + "\""); + Logging.errorPrint("Invalid Token '" + key + + "' as the first key in " + sourceURI); + return null; } + String name = token.substring(colonLoc + 1); + if ((name == null) || (name.length() == 0)) + { + Logging.errorPrint("Invalid Token '" + key + "' had no value in " + + sourceURI); + return null; + } + Loadable loadable = context.ref.constructCDOMObject(loadClass, name); + loadable.setSourceURI(sourceURI); + return loadable; } + } Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLstToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLstToken.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PointBuyLstToken.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,45 +0,0 @@ -/* - * PointBuyLstToken.java - * Copyright 2005 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:16 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package pcgen.persistence.lst; - -import java.net.URI; - -import pcgen.core.GameMode; - -/** - * <code>PointBuyLstToken</code> - * - * @author Devon Jones <sou...@ev...> - */ -public interface PointBuyLstToken extends LstToken -{ - /** - * @param penalty - * @param value - * @return true if parse OK - */ - public abstract boolean parse(GameMode gameMode, String value, URI source); -} Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SimpleLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SimpleLoader.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SimpleLoader.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -46,7 +46,7 @@ StringTokenizer colToken = new StringTokenizer(lstLine, SystemLoader.TAB_DELIM); String firstToken = colToken.nextToken().trim(); - T loadable = getLoadable(context, firstToken, sourceURI); + Loadable loadable = getLoadable(context, firstToken, sourceURI); if (loadable == null) { return; @@ -59,8 +59,8 @@ } } - protected void processToken(LoadContext context, T loadable, String token, - URI sourceURI) throws PersistenceLayerException + protected void processToken(LoadContext context, Loadable loadable, + String token, URI sourceURI) throws PersistenceLayerException { int colonLoc = token.indexOf(':'); if (colonLoc == -1) @@ -96,7 +96,7 @@ Logging.clearParseMessages(); } - protected T getLoadable(LoadContext context, String firstToken, + protected Loadable getLoadable(LoadContext context, String firstToken, URI sourceURI) throws PersistenceLayerException { String name = processFirstToken(firstToken); @@ -104,7 +104,9 @@ { return null; } - return context.ref.constructCDOMObject(loadClass, name); + T loadable = context.ref.constructCDOMObject(loadClass, name); + loadable.setSourceURI(sourceURI); + return loadable; } protected String processFirstToken(String token) Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SizeAdjustmentLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SizeAdjustmentLoader.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SizeAdjustmentLoader.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,5 +1,6 @@ /* * SizeAdjustmentLoader.java + * Copyright 2010 (C) Tom Parker <th...@us...> * Copyright 2001 (C) Bryan McRoberts <mer...@ya...> * * This library is free software; you can redistribute it and/or @@ -23,97 +24,54 @@ package pcgen.persistence.lst; import java.net.URI; -import java.util.StringTokenizer; import pcgen.core.SizeAdjustment; import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.SystemLoader; import pcgen.rules.context.LoadContext; import pcgen.util.Logging; /** - * - * @author David Rice <dav...@jc...> + * + * @author David Rice <dav...@jc...> * @version $Revision$ */ public final class SizeAdjustmentLoader extends LstLineFileLoader { + private OverlapLoader<SizeAdjustment> loader = new OverlapLoader<SizeAdjustment>( + SizeAdjustment.class); - /** - * @see pcgen.persistence.lst.LstLineFileLoader#parseLine(java.net.URL, java.lang.String) - */ @Override public void parseLine(LoadContext context, String lstLine, URI sourceURI) - throws PersistenceLayerException + throws PersistenceLayerException { - final StringTokenizer colToken = new StringTokenizer(lstLine, - SystemLoader.TAB_DELIM); - - SizeAdjustment sa = new SizeAdjustment(); - if (colToken.hasMoreTokens()) + final int colonLoc = lstLine.indexOf(':'); + if (colonLoc == -1) { - String nameToken = colToken.nextToken(); - final int colonLoc = nameToken.indexOf(':'); - if (colonLoc == -1) - { - Logging.errorPrint("Invalid Token - does not contain a colon: " - + nameToken); - return; - } - else if (colonLoc == 0) - { - Logging.errorPrint("Invalid Token - starts with a colon: " - + nameToken); - return; - } - String key = nameToken.substring(0, colonLoc); - if (!"SIZENAME".equals(key)) - { - Logging - .errorPrint("Expected first token in SizeAdjustment to be SIZENAME"); - return; - } - String value = (colonLoc == nameToken.length() - 1) ? null - : nameToken.substring(colonLoc + 1); - sa = context.ref.silentlyGetConstructedCDOMObject(SizeAdjustment.class, value); - if (sa == null) - { - sa = new SizeAdjustment(); - sa.setName(value); - context.ref.importObject(sa); - } + Logging.errorPrint("Invalid Line - does not contain a colon: '" + + lstLine + "' in " + sourceURI); + return; } - - while (colToken.hasMoreTokens()) + else if (colonLoc == 0) { - final String token = colToken.nextToken().trim(); - final int colonLoc = token.indexOf(':'); - if (colonLoc == -1) - { - Logging.errorPrint("Invalid Token - does not contain a colon: " - + token); - continue; - } - else if (colonLoc == 0) - { - Logging.errorPrint("Invalid Token - starts with a colon: " - + token); - continue; - } - - String key = token.substring(0, colonLoc); - String value = (colonLoc == token.length() - 1) ? null : token - .substring(colonLoc + 1); - if (context.processToken(sa, key, value)) - { - context.commit(); - } - else - { - context.rollback(); - Logging.replayParsedMessages(); - } - Logging.clearParseMessages(); + Logging.errorPrint("Invalid Line - starts with a colon: '" + + lstLine + "' in " + sourceURI); + return; } + else if (colonLoc == (lstLine.length() - 1)) + { + Logging.errorPrint("Invalid Line - ends with a colon: '" + lstLine + + "' in " + sourceURI); + return; + } + String key = lstLine.substring(0, colonLoc); + String value = lstLine.substring(colonLoc + 1); + if (!"SIZENAME".equals(key)) + { + Logging.errorPrint("Invalid Line - " + + "expected 'SIZENAME' key to start the line: '" + + lstLine + "' in " + sourceURI); + return; + } + loader.parseLine(context, value, sourceURI); } } Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/StatsAndChecksLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/StatsAndChecksLoader.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/StatsAndChecksLoader.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,6 +1,6 @@ /* * StatsAndChecksLoader.java - * Copyright 2003 (C) David Hibbs <sag...@us...> + * Copyright 2010 (C) Tom Parker <th...@us...> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,60 +25,85 @@ package pcgen.persistence.lst; import java.net.URI; -import java.util.Map; +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.base.Loadable; +import pcgen.cdom.content.BonusSpellInfo; +import pcgen.core.PCAlignment; +import pcgen.core.PCCheck; +import pcgen.core.PCStat; import pcgen.rules.context.LoadContext; import pcgen.util.Logging; /** - * This class is a LstFileLoader that processes the statsandchecks.lst file, - * handing its multiple types of content off to the appropriate loader - * for Attributes, Bonus Spells, Checks, and Alignments. - * - * @author AD9C15 + * This class is a LstFileLoader that processes the statsandchecks.lst file */ -public class StatsAndChecksLoader extends LstLineFileLoader +public class StatsAndChecksLoader extends SimpleLoader<CDOMObject> { - /** - * StatsAndChecksLoader Constructor. - * - */ + public StatsAndChecksLoader() { - super(); + super(CDOMObject.class); } - /** - * @see pcgen.persistence.lst.LstLineFileLoader#parseLine(java.net.URL, java.lang.String) - */ @Override - public void parseLine(LoadContext context, String lstLine, URI sourceURI) + protected Loadable getLoadable(LoadContext context, String token, + URI sourceURI) { - final int idxColon = lstLine.indexOf(':'); - if (idxColon < 0) + final int colonLoc = token.indexOf(':'); + if (colonLoc == -1) { - return; + Logging.errorPrint("Invalid Token - does not contain a colon: '" + + token + "' in " + sourceURI); + return null; } - - final String key = lstLine.substring(0, idxColon); - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(StatsAndChecksLstToken.class); - StatsAndChecksLstToken token = - (StatsAndChecksLstToken) tokenMap.get(key); - if (token != null) + else if (colonLoc == 0) { - LstUtils - .deprecationCheck(token, key, sourceURI, lstLine); - if (!token.parse(context, lstLine, sourceURI)) - { - Logging.errorPrint("Error parsing StatsAndChecks object: " - + lstLine + '/' + sourceURI.toString()); - } + Logging.errorPrint("Invalid Token - starts with a colon: '" + token + + "' in " + sourceURI); + return null; } + else if (colonLoc == (token.length() - 1)) + { + Logging.errorPrint("Invalid Token - " + + "ends with a colon (no value): '" + token + "' in " + + sourceURI); + return null; + } + String key = token.substring(0, colonLoc); + Class<? extends Loadable> loadClass; + if ("STATNAME".equals(key)) + { + loadClass = PCStat.class; + } + else if ("CHECKNAME".equals(key)) + { + loadClass = PCCheck.class; + } + else if ("BONUSSPELLLEVEL".equals(key)) + { + loadClass = BonusSpellInfo.class; + } + else if ("ALIGNMENTNAME".equals(key)) + { + loadClass = PCAlignment.class; + } else { - Logging.errorPrint("Illegal StatsAndChecks object: " + lstLine - + '/' + sourceURI.toString()); + Logging.errorPrint("Invalid Token '" + key + + "' as the first key in " + sourceURI); + return null; } + String name = token.substring(colonLoc + 1); + if ((name == null) || (name.length() == 0)) + { + Logging.errorPrint("Invalid Token '" + key + "' had no value in " + + sourceURI); + return null; + } + Loadable loadable = context.ref.constructCDOMObject(loadClass, name); + loadable.setSourceURI(sourceURI); + return loadable; } + } Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/StatsAndChecksLstToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/StatsAndChecksLstToken.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/StatsAndChecksLstToken.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,46 +0,0 @@ -/* - * StatsAndChecksLstToken.java - * Copyright 2006 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:16 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package pcgen.persistence.lst; - -import java.net.URI; - -import pcgen.rules.context.LoadContext; - -/** - * <code>StatsAndChecksLstToken</code> - * - * @author Devon Jones <sou...@ev...> - */ -public interface StatsAndChecksLstToken extends LstToken -{ - /** - * Parse the token - * @param sourceURL - * @param value - * @return true if successful - */ - public abstract boolean parse(LoadContext context, String value, URI sourceURI); -} Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -43,12 +43,6 @@ tokenTypeList.add(GameModeLstToken.class); tokenTypeList.add(WieldCategoryLstToken.class); - //statsandchecks.lst - tokenTypeList.add(StatsAndChecksLstToken.class); - - //pointbuymethod.lst - tokenTypeList.add(PointBuyLstToken.class); - //level.lst tokenTypeList.add(LevelLstToken.class); Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/MethodToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/MethodToken.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/MethodToken.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,64 +0,0 @@ -/* - * StatToken.java - * Copyright 2006 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:02 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package plugin.lsttokens.pointbuy; - -import java.net.URI; - -import pcgen.core.GameMode; -import pcgen.core.PointBuyMethod; -import pcgen.persistence.lst.PointBuyLstToken; -import pcgen.persistence.lst.SimpleLoader; -import pcgen.util.Logging; - -/** - * <code>StatToken</code> - * - * @author Devon Jones <sou...@ev...> - */ -public class MethodToken implements PointBuyLstToken -{ - - public String getTokenName() - { - return "METHOD"; - } - - public boolean parse(GameMode gameMode, String value, URI source) - { - try - { - SimpleLoader<PointBuyMethod> loader = new SimpleLoader<PointBuyMethod>( - PointBuyMethod.class); - loader.parseLine(gameMode.getModeContext(), value, source); - return true; - } - catch (Exception e) - { - Logging.errorPrint(e.getMessage()); - return false; - } - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/StatToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/StatToken.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pointbuy/StatToken.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,64 +0,0 @@ -/* - * StatToken.java - * Copyright 2006 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:02 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package plugin.lsttokens.pointbuy; - -import java.net.URI; - -import pcgen.core.GameMode; -import pcgen.core.PointBuyCost; -import pcgen.persistence.lst.PointBuyLstToken; -import pcgen.persistence.lst.SimpleLoader; -import pcgen.util.Logging; - -/** - * <code>StatToken</code> - * - * @author Devon Jones <sou...@ev...> - */ -public class StatToken implements PointBuyLstToken -{ - - public String getTokenName() - { - return "STAT"; - } - - public boolean parse(GameMode gameMode, String value, URI source) - { - try - { - SimpleLoader<PointBuyCost> loader = new SimpleLoader<PointBuyCost>( - PointBuyCost.class); - loader.parseLine(gameMode.getModeContext(), value, source); - return true; - } - catch (Exception e) - { - Logging.errorPrint(e.getMessage()); - return false; - } - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/AlignmentnameToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/AlignmentnameToken.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/AlignmentnameToken.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,65 +0,0 @@ -/* - * StatnameToken.java - * Copyright 2006 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:02 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package plugin.lsttokens.statsandchecks; - -import java.net.URI; - -import pcgen.core.PCAlignment; -import pcgen.persistence.lst.GenericLoader; -import pcgen.persistence.lst.SourceEntry; -import pcgen.persistence.lst.StatsAndChecksLstToken; -import pcgen.rules.context.LoadContext; -import pcgen.util.Logging; - -/** - * Class deals with ALIGNMENTNAME Token - */ -public class AlignmentnameToken implements StatsAndChecksLstToken -{ - private static final Class<PCAlignment> PCALIGNMENT_CLASS = PCAlignment.class; - - public String getTokenName() - { - return "ALIGNMENTNAME"; - } - - public boolean parse(LoadContext context, String lstLine, URI sourceURI) - { - try - { - GenericLoader<PCAlignment> alignmentLoader = new GenericLoader<PCAlignment>( - PCALIGNMENT_CLASS); - alignmentLoader.parseLine(context, null, lstLine.substring(14), - new SourceEntry.URIOnly(sourceURI)); - return true; - } - catch (Exception e) - { - Logging.errorPrint(e.getMessage()); - return false; - } - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/BonusspelllevelToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/BonusspelllevelToken.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/BonusspelllevelToken.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,63 +0,0 @@ -/* - * StatnameToken.java - * Copyright 2006 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:02 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package plugin.lsttokens.statsandchecks; - -import java.net.URI; - -import pcgen.cdom.content.BonusSpellInfo; -import pcgen.persistence.lst.SimpleLoader; -import pcgen.persistence.lst.StatsAndChecksLstToken; -import pcgen.rules.context.LoadContext; -import pcgen.util.Logging; - -/** - * Class deals with BONUSSPELLLEVEL Token - */ -public class BonusspelllevelToken implements StatsAndChecksLstToken -{ - private static final Class<BonusSpellInfo> BONUS_SPELL_INFO_CLASS = BonusSpellInfo.class; - - public String getTokenName() - { - return "BONUSSPELLLEVEL"; - } - - public boolean parse(LoadContext context, String lstLine, URI sourceURI) - { - try - { - SimpleLoader<BonusSpellInfo> bonusSpellLoader = new SimpleLoader<BonusSpellInfo>( - BONUS_SPELL_INFO_CLASS); - bonusSpellLoader.parseLine(context, lstLine.substring(16), sourceURI); - return true; - } - catch (Exception e) - { - Logging.errorPrint(e.getMessage()); - return false; - } - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/ChecknameToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/ChecknameToken.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/ChecknameToken.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,65 +0,0 @@ -/* - * StatnameToken.java - * Copyright 2006 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:02 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package plugin.lsttokens.statsandchecks; - -import java.net.URI; - -import pcgen.core.PCCheck; -import pcgen.persistence.lst.GenericLoader; -import pcgen.persistence.lst.SourceEntry; -import pcgen.persistence.lst.StatsAndChecksLstToken; -import pcgen.rules.context.LoadContext; -import pcgen.util.Logging; - -/** - * Class deals with CHECKNAME Token - */ -public class ChecknameToken implements StatsAndChecksLstToken -{ - private static final Class<PCCheck> PCCHECK_CLASS = PCCheck.class; - - public String getTokenName() - { - return "CHECKNAME"; - } - - public boolean parse(LoadContext context, String lstLine, URI sourceURI) - { - try - { - GenericLoader<PCCheck> checkLoader = new GenericLoader<PCCheck>( - PCCHECK_CLASS); - checkLoader.parseLine(context, null, lstLine.substring(10), - new SourceEntry.URIOnly(sourceURI)); - return true; - } - catch (Exception e) - { - Logging.errorPrint(e.getMessage()); - return false; - } - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/StatnameToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/StatnameToken.java 2010-12-15 18:39:42 UTC (rev 14144) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/statsandchecks/StatnameToken.java 2010-12-15 19:39:55 UTC (rev 14145) @@ -1,65 +0,0 @@ -/* - * StatnameToken.java - * Copyright 2006 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:02 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package plugin.lsttokens.statsandchecks; - -import java.net.URI; - -import pcgen.core.PCStat; -import pcgen.persistence.lst.GenericLoader; -import pcgen.persistence.lst.SourceEntry; -import pcgen.persistence.lst.StatsAndChecksLstToken; -import pcgen.rules.context.LoadContext; -import pcgen.util.Logging; - -/** - * Class deals with STATNAME Token - */ -public class StatnameToken implements StatsAndChecksLstToken -{ - private static final Class<PCStat> PCSTAT_CLASS = PCStat.class; - - public String getTokenName() - { - return "STATNAME"; - } - - public boolean parse(LoadContext context, String lstLine, URI sourceURI) - { - try - { - GenericLoader<PCStat> statLoader = new GenericLoader<PCStat>( - PCSTAT_CLASS); - statLoader.parseLine(context, null, lstLine.substring(9), - new SourceEntry.URIOnly(sourceURI)); - return true; - } - catch (Exception e) - { - Logging.errorPrint(e.getMessage()); - return false; - } - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <za...@us...> - 2013-07-30 06:16:28
|
Revision: 20955 http://sourceforge.net/p/pcgen/code/20955 Author: zaister Date: 2013-07-30 06:16:25 +0000 (Tue, 30 Jul 2013) Log Message: ----------- * Restore jep function count() function to behavior previous to implementation of CODE-2170 * Add new jep function countdistinct() for new behavior. This function must be used for loops over abilities in output or preview sheets. Issue#: CODE-2214 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/plugin/jepcommands/CountCommand.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/jepcommands/CountDistinctCommand.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2013-07-30 02:12:06 UTC (rev 20954) +++ Trunk/pcgen/code/pluginbuild.xml 2013-07-30 06:16:25 UTC (rev 20955) @@ -5258,6 +5258,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${jepplugins.dir}/JepCommand-COUNTDISTINCT.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/jepcommands/CountDistinctCommand*.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${jepplugins.dir}/JepCommand-FLOOR.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/plugin/jepcommands/CountCommand.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/jepcommands/CountCommand.java 2013-07-30 02:12:06 UTC (rev 20954) +++ Trunk/pcgen/code/src/java/plugin/jepcommands/CountCommand.java 2013-07-30 06:16:25 UTC (rev 20955) @@ -125,9 +125,24 @@ getData(pc); - return (double) doFilterP(pt).size(); + //return (double) doFilterP(pt).size(); + final Set<? extends CDOMObject> filtered = doFilterP(pt); + return countData(filtered, pc); } + protected Object countData(final Iterable<? extends CDOMObject> filtered, + PlayerCharacter pc) + { + double accum = 0; + + for (final CDOMObject ab : filtered) + { + final double ac = pc.getSelectCorrectedAssociationCount(ab); + accum += 1.01 >= ac ? 1 : ac; + } + return accum; + } + @Override protected Set<? extends CDOMObject> filterSetP(final String c) { Copied: Trunk/pcgen/code/src/java/plugin/jepcommands/CountDistinctCommand.java (from rev 20925, Trunk/pcgen/code/src/java/plugin/jepcommands/CountCommand.java) =================================================================== --- Trunk/pcgen/code/src/java/plugin/jepcommands/CountDistinctCommand.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/jepcommands/CountDistinctCommand.java 2013-07-30 06:16:25 UTC (rev 20955) @@ -0,0 +1,1246 @@ +/* + * CountCommand.java + * Copyright 2006 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 23/11/2006 + * + * $Id$ + */ + +package plugin.jepcommands; + +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Stack; + +import org.nfunk.jep.ParseException; + +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.enumeration.AspectName; +import pcgen.cdom.enumeration.MapKey; +import pcgen.cdom.enumeration.Nature; +import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.enumeration.RaceSubType; +import pcgen.cdom.helper.Aspect; +import pcgen.cdom.helper.ClassSource; +import pcgen.core.Ability; +import pcgen.core.AbilityUtilities; +import pcgen.core.Domain; +import pcgen.core.Equipment; +import pcgen.core.Language; +import pcgen.core.PCClass; +import pcgen.core.PCTemplate; +import pcgen.core.PlayerCharacter; +import pcgen.core.Skill; +import pcgen.core.VariableProcessor; +import pcgen.core.character.Follower; +import pcgen.util.Logging; +import pcgen.util.PCGenCommand; +import pcgen.util.ParameterTree; +import pcgen.util.enumeration.Visibility; + + +/** + * <code>CountCommand</code> deals with the count() JEP command. The first parameter will + * be the type of object being counted and further parameters will specify the criteria. + * <p/> Last Editor: $Author$ Last Edited: $Date: 2007-10-26 21:23:23 +0100 (Fri, + * 26 Oct 2007) $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision$ + */ +public class CountDistinctCommand extends PCGenCommand +{ + + public enum JepAbilityCountEnum + { + CATEGORY, + NAME, + NATURE, + TYPE, + VISIBILITY, + ASPECT, + CAT, + NAM, + NAT, + TYP, + VIS, + KEY + } + + public enum JepEquipmentCountEnum + { + TYPE, + WIELDCATEGORY, + LOCATION, + TYP, + WDC, + LOC + } + + public enum JepCountEnum + { + ABILITIES + { + // Abilities are PObjects, we can implement the filterSet directly + // i.e. without using PObject proxies. + + public Map<Nature, Set<Ability>> abdata; + + @Override + protected void getData(final PlayerCharacter pc) + { + abdata = pc.getAbilitiesSet(); + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + + final Object[] par = validateParams(params); + + final ParameterTree pt = convertParams(par); + + getData(pc); + + return (double) doFilterP(pt).size(); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) + { + final String[] keyValue = c.split("="); + final JepAbilityCountEnum en; + + try + { + en = JepAbilityCountEnum.valueOf(keyValue[0]); + } + catch (IllegalArgumentException ex) + { + Logging.errorPrint( + "Bad parameter to count(\"Ability\"), " + c); + return new HashSet<CDOMObject>(); + } + + Set<Ability> cs = null; + Ability a; + final Iterator<? extends CDOMObject> abIt; + + switch (en) + { + case CATEGORY: + case CAT: + final String cat = keyValue[1]; + cs = new HashSet<Ability>(abdata.get(Nature.ANY)); + + abIt = cs.iterator(); + + while (abIt.hasNext()) + { + a = (Ability) abIt.next(); + if (!a.getCategory().equalsIgnoreCase(cat)) + { + abIt.remove(); + } + } + break; + + case NAME: + case NAM: + cs = filterAbilitiesByName(keyValue); + break; + + case KEY: + cs = filterAbilitiesByKeyName(keyValue); + break; + + case NATURE: + case NAT: + Nature n; + try + { + n = Nature.valueOf(keyValue[1]); + } + catch (IllegalArgumentException ex) + { + Logging.errorPrint( + "Bad parameter to count(\"Ability\"), no such NATURE " + + c); + n = Nature.ANY; + } + cs = new HashSet<Ability>(abdata.get(n)); + break; + + case TYPE: + case TYP: + cs = new HashSet<Ability>(abdata.get(Nature.ANY)); + abIt = cs.iterator(); + + filterPObjectByType(abIt, keyValue[1]); + break; + + case VISIBILITY: + case VIS: + cs = new HashSet<Ability>(abdata.get(Nature.ANY)); + + try + { + final Visibility vi = Visibility.valueOf(keyValue[1]); + abIt = cs.iterator(); + + while (abIt.hasNext()) + { + a = (Ability) abIt.next(); + if (!a.getSafe(ObjectKey.VISIBILITY).equals(vi)) + { + abIt.remove(); + } + } + } + catch (IllegalArgumentException ex) + { + Logging.errorPrint( + "Bad parameter to count(\"Ability\"), no such Visibility " + + keyValue[1]); + } + break; + + case ASPECT: + cs = filterAbilitiesByAspect(keyValue); + break; + } + + return cs; + } + + /** + * Filter the abilities by their display name. + * @param keyValue The count parameters. The 2nd entry is the name to be matched. + * @return The set of abilities matching the name. + */ + private Set<Ability> filterAbilitiesByName(final String[] keyValue) + { + Set<Ability> cs; + final Iterator<? extends CDOMObject> abIt; + cs = new HashSet<Ability>(abdata.get(Nature.ANY)); + abIt = cs.iterator(); + + while (abIt.hasNext()) + { + final Ability ab = (Ability) abIt.next(); + + final String name = (ab.getSafe(ObjectKey.MULTIPLE_ALLOWED)) ? + AbilityUtilities.getUndecoratedName( + ab.getDisplayName(), + new ArrayList<String>()) : + ab.getDisplayName(); + + if (!name.equalsIgnoreCase(keyValue[1])) + { + abIt.remove(); + } + } + return cs; + } + + /** + * Filter the abilities by their key name. + * @param keyValue The count parameters. The 2nd entry is the key to be matched. + * @return The set of abilities matching the key. + */ + private Set<Ability> filterAbilitiesByKeyName(final String[] keyValue) + { + Set<Ability> cs; + final Iterator<? extends CDOMObject> abIt; + cs = new HashSet<Ability>(abdata.get(Nature.ANY)); + abIt = cs.iterator(); + + while (abIt.hasNext()) + { + final Ability ab = (Ability) abIt.next(); + + final String name = ab.getKeyName(); + + if (!name.equalsIgnoreCase(keyValue[1])) + { + abIt.remove(); + } + } + return cs; + } + + /** + * Filter the abilities by aspect. + * @param keyValue The count parameters. The 2nd entry is the aspect to be matched. + * @return The set of abilities matching the key. + */ + private Set<Ability> filterAbilitiesByAspect(final String[] keyValue) + { + Set<Ability> cs; + final Iterator<? extends CDOMObject> abIt; + cs = new HashSet<Ability>(abdata.get(Nature.ANY)); + abIt = cs.iterator(); + + while (abIt.hasNext()) + { + final Ability ab = (Ability) abIt.next(); + + List<Aspect> target = ab.get(MapKey.ASPECT, AspectName.getConstant(keyValue[1])); + if (target == null) + { + abIt.remove(); + } + } + return cs; + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException( + "Ability is a PObject, should be calling filterSetP"); + } + }, + + CLASSES + { + // Classes are PObjects, we can implement the filterSet directly + // i.e. without using PObject proxies. + + public Set<PCClass> objdata; + + @Override + protected void getData(final PlayerCharacter pc) + { + objdata = new HashSet<PCClass>(); + objdata.addAll(pc.getDisplay().getClassSet()); + } + + @Override + public Object count( + final PlayerCharacter pc, final Object[] params) throws + ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(pc); + final Set<? extends CDOMObject> filtered = doFilterP(pt); + + return (double) filtered.size(); + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException( + "PCClass is a PObject, should be calling filterSetP"); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + final String[] keyValue = c.split("="); + + if (!"TYPE".equalsIgnoreCase(keyValue[0])) + { + throw new ParseException( + "Bad parameter to count(\"CLASSES\" ... )" + c); + } + + final Set<PCClass> cs = new HashSet<PCClass>(objdata); + final Iterator<? extends CDOMObject> it = cs.iterator(); + + filterPObjectByType(it, keyValue[1]); + + return cs; + } + }, + + DOMAINS + { + // Domains are not PObjects + + public PlayerCharacter pc; + + @Override + protected void getData(final PlayerCharacter aPc) + { + this.pc = aPc; + } + + @Override + public Object count(final PlayerCharacter aPc, + final Object[] params) throws ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(aPc); + final Set<String> filtered = doFilterS(pt); + + return (double) filtered.size(); + } + + @Override + protected Set<String> filterSetS(final String kv) throws + ParseException + { + final String[] keyValue = kv.split("="); + + if (!"TYPE".equalsIgnoreCase(keyValue[0])) + { + throw new ParseException( + "Bad parameter to count(\"" + this + "\" ... )" + kv); + } + + final Set<String> pSet = new HashSet<String>(); + + // Hack (should allow various values, but PCGen can only do PCClass) + if (keyValue[1].equals("PCClass")) + { + // at this point we have a set of character domains + // which meet the + // selection criteria of this leaf node of the parameter tree. + // we now convert this to a set of Strings so that the generic doFilterS + // can perform set operations on them + for (Domain d : pc.getDisplay().getDomainSet()) + { + ClassSource source = pc.getDomainSource(d); + pSet.add(source.getPcclass().getKeyName()); + } + } + + return pSet; + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + throw new ParseException( + "CharacterDomain is not a PObject, should be calling filterSetS"); + } + }, + + EQUIPMENT + { + // Equipment is/are PObjects, we can implement the filterSet directly + + public Set<Equipment> objdata; + + @Override + protected void getData(final PlayerCharacter pc) + { + objdata = new HashSet<Equipment>(); + objdata.addAll(pc.getEquipmentListInOutputOrder()); + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(pc); + final Set<? extends CDOMObject> filtered = doFilterP(pt); + + return (double) filtered.size(); + } + + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException( + "Equipment is a PObject, should be calling filterSetP"); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + final String[] keyValue = c.split("="); + + final JepEquipmentCountEnum en; + + try + { + en = JepEquipmentCountEnum.valueOf(keyValue[0]); + } + catch (IllegalArgumentException ex) + { + Logging.errorPrint( + "Bad parameter to count(\"Equipment\"), " + c); + return new HashSet<CDOMObject>(); + } + + final Set<Equipment> cs = new HashSet<Equipment>(objdata); + final Iterator<? extends CDOMObject> it = cs.iterator(); + + switch (en) + { + case TYPE: + filterPObjectByType(it, keyValue[1]); + break; + + case WIELDCATEGORY: + while (it.hasNext()) + { + final Equipment e = (Equipment) it.next(); + if (!e.getWieldName().equalsIgnoreCase(keyValue[1])) + { + it.remove(); + } + } + break; + + // TODO have no idea how to get a suitable list of equipment + // and test for this. + + case LOCATION: + if ("CARRIED".equalsIgnoreCase(keyValue[1]) + || "Equipped".equalsIgnoreCase(keyValue[1])) + { +// while (it.hasNext()) +// { +// Equipment e = (Equipment) it.next(); +// if (! e.getParent().equalsIgnoreCase(keyValue[1])); +// { +// it.remove(); +// } +// } + } + case LOC: + break; + case TYP: + break; + case WDC: + break; + } + + return cs; + } + }, + + FOLLOWERS + { + // Followers are not PObjects. + + public Map<Follower, String> objdata; + + @Override + protected void getData(final PlayerCharacter pc) + { + for (final Follower f : pc.getDisplay().getFollowerList()) + { + + // map each follower to an empty string. Each of these + // Strings is unique and is mapped to exactly one Follower. + + objdata.put(f, ""); + } + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(pc); + final Set<String> filtered = doFilterS(pt); + + return countDataS(filtered); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + throw new ParseException( + "Follower is not a PObject, should be calling filterSetS"); + } + + // If we need to be able to filter out any of these followers, + // this is where it should be done. + @Override + protected Set<String> filterSetS(final String c) + { + return (Set<String>) objdata.values(); + } + }, + + LANGUAGES + { + // Languages are PObjects, we can implement the filterSet directly + // i.e. without using PObject proxies. + + public Set<Language> objdata; + + @Override + protected void getData(final PlayerCharacter pc) + { + objdata = new HashSet<Language>(); + objdata.addAll(pc.getDisplay().getLanguageSet()); + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(pc); + final Set<? extends CDOMObject> filtered = doFilterP(pt); + + return (double) filtered.size(); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + final String[] keyValue = c.split("="); + + if (!"TYPE".equalsIgnoreCase(keyValue[0])) + { + throw new ParseException( + MessageFormat.format( + "Bad parameter to count(\"CLASSES\" ... ){0}", + c)); + } + + final Set<Language> cs = new HashSet<Language>(objdata); + final Iterator<? extends CDOMObject> it = cs.iterator(); + + filterPObjectByType(it, keyValue[1]); + + return cs; + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException( + "Language is a PObject, should be calling filterSetP"); + } + }, + + RACESUBTYPES + { + // RaceSubTypes are not PObjects + + public Set<RaceSubType> objdata = new HashSet<RaceSubType>(); + + @Override + protected void getData(final PlayerCharacter pc) + { + objdata.addAll(pc.getDisplay().getRacialSubTypes()); + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(pc); + final Set<String> filtered = doFilterS(pt); + + return (double) filtered.size(); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + throw new ParseException( + "RaceSubType is not a PObject, should be calling filterSetS"); + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + final String[] keyValue = c.split("="); + + if (!"TYPE".equalsIgnoreCase(keyValue[0])) + { + throw new ParseException( + MessageFormat.format( + "Bad parameter to count(\"CLASSES\" ... ){0}", + c)); + } + + final Set<String> rSet = new HashSet<String>(); + for (RaceSubType rst : objdata) + { + rSet.add(rst.toString()); + } + + // If we want all then we don't need to filter. + if (!"ALL".equalsIgnoreCase(keyValue[1])) + { + + final Iterator<String> pcRaceSubTypeIterator = + rSet.iterator(); + + // Make a List of all the types that each RaceSubType should match + final Collection<String> typeList = new ArrayList<String>(); + Collections.addAll(typeList, keyValue[1].split("\\.")); + + // These nested loops remove all raceSubTypes from rSet that do not + // match all of the types in typeList + while (pcRaceSubTypeIterator.hasNext()) + { + final String pcRaceSubType = pcRaceSubTypeIterator.next(); + + for (final String aType : typeList) + { + if (!pcRaceSubType.equals(aType)) + { + pcRaceSubTypeIterator.remove(); + break; + } + } + } + } + + return rSet; + } + }, + + SKILLS + { + // Skill is a PObject + public Set<Skill> objdata; + + @Override + protected void getData(final PlayerCharacter pc) + { + objdata = new HashSet<Skill>(); + pc.refreshSkillList(); + objdata.addAll(pc.getDisplay().getSkillSet()); + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(pc); + final Set<? extends CDOMObject> filtered = doFilterP(pt); + + return (double) filtered.size(); + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException( + "Skill is a PObject, should be calling filterSetP"); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + final String[] keyValue = c.split("="); + + if (!"TYPE".equalsIgnoreCase(keyValue[0])) + { + throw new ParseException( + "Bad parameter to count(\"CLASSES\" ... )" + c); + } + + final Set<Skill> cs = new HashSet<Skill>(objdata); + final Iterator<? extends CDOMObject> it = cs.iterator(); + + filterPObjectByType(it, keyValue[1]); + + return cs; + } + }, + + SPELLBOOKS + { + + /** + * Count a character's Spell Books. + * + * @param pc The character being counted. + * @param params The parameters determining which spell books get counted. + * @return A Double with the number of matching spell books. + * @throws ParseException If any invalid parameters are encountered. + */ + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + return pc.getDisplay().getSpellBookCount(); + } + + @Override + protected void getData(final PlayerCharacter pc) + { + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) + { + return new HashSet<CDOMObject>(); + } + @Override + protected Set<String> filterSetS(final String c) + { + return new HashSet<String>(); + } + }, + + SPELLS + { + @Override + protected void getData(final PlayerCharacter pc) + { + } + + @Override + public Object count( + final PlayerCharacter pc, final Object[] params) throws + ParseException + { + return Double.valueOf("0.0"); + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException("Not implemented yet"); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + throw new ParseException("Not implemented yet"); + } + }, + + SPELLSINBOOK + { + + @Override + protected void getData(final PlayerCharacter pc) + { + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + return Double.valueOf("0.0"); + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException("Not implemented yet"); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + throw new ParseException("Not implemented yet"); + } + }, + + SPELLSKNOWN + { + @Override + protected void getData(final PlayerCharacter pc) + { + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + return Double.valueOf("0.0"); + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException("Not implemented yet"); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + throw new ParseException("Not implemented yet"); + } + }, + + TEMPLATES + { + public Set<PCTemplate> objdata = new HashSet<PCTemplate>(); + + @Override + protected void getData(final PlayerCharacter pc) + { + objdata.addAll(pc.getDisplay().getTemplateSet()); + } + + @Override + public Object count(final PlayerCharacter pc, + final Object[] params) throws ParseException + { + return Double.valueOf("0.0"); + } + + @Override + protected Set<String> filterSetS(final String c) throws ParseException + { + throw new ParseException( + "PCTemplate is a PObject, should be calling filterSetP"); + } + + @Override + protected Set<? extends CDOMObject> filterSetP(final String c) throws + ParseException + { + final String[] keyValue = c.split("="); + + if (!"TYPE".equalsIgnoreCase(keyValue[0])) + { + throw new ParseException( + "Bad parameter to count(\"CLASSES\" ... )" + c); + } + + final Set<PCTemplate> cs = new HashSet<PCTemplate>(objdata); + final Iterator<? extends CDOMObject> it = cs.iterator(); + + filterPObjectByType(it, keyValue[1]); + return cs; + } + + }; + + public static String CountType = ""; + + private static ParameterTree convertParams(final Object[] params) + { + ParameterTree pt = null; + + for (final Object param : params) + { + try + { + if (pt == null) + { + pt = ParameterTree.makeTree((String) param); + } + else + { + final ParameterTree npt = + ParameterTree.makeTree(ParameterTree.andString); + npt.setLeftTree(pt); + pt = npt; + final ParameterTree npt1 = ParameterTree.makeTree((String) param); + pt.setRightTree(npt1); + } + } + catch (ParseException pe) + { + Logging.errorPrint( + MessageFormat.format( + "Malformed parameter to count {0}", param), pe); + } + } + return pt; + } + + private static void filterPObjectByType(final Iterator<? extends CDOMObject> it, final String tString) + { + // If we want all then we don't need to filter. + if (!"ALL".equalsIgnoreCase(tString)) + { + + // Make a List of all the types that each PObject should match + final Collection<String> typeList = new ArrayList<String>(); + Collections.addAll(typeList, tString.split("\\.")); + + // These nested loops remove all PObjects from the collection being + // iterated that do not match all of the types in typeList + while (it.hasNext()) + { + final CDOMObject pObj = it.next(); + + for (final String type : typeList) + { + if (!pObj.isType(type)) + { + it.remove(); + break; + } + } + } + } + } + + + // By adding this it means that we can call count with just the object to be + // counted and get a count of all e.g. count("ABILITIES") will return a + // count of all abilities with no filtering at all. + protected Object[] validateParams(final Object[] params) throws ParseException + { + Object[] p = new Object[1]; + if (1 > params.length) + { + p[0] = "TYPE=ALL"; + } + else + { + p = params; + } + return p; + } + + public abstract Object count(PlayerCharacter pc, Object[] params) throws + ParseException; + + public Object countP(final PlayerCharacter pc, final Object[] params) throws + ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(pc); + final Set<? extends CDOMObject> filtered = doFilterP(pt); + + return (double) filtered.size(); + } + + //@SuppressWarnings("unchecked") //Uses JEP, which doesn't use generics + protected Set<? extends CDOMObject> doFilterP(final ParameterTree pt) throws ParseException + { + final String c = pt.getContents(); + + if (c.equalsIgnoreCase(ParameterTree.orString) || c.equalsIgnoreCase( + ParameterTree.andString)) + { + final Set<CDOMObject> a = new HashSet<CDOMObject>(doFilterP(pt.getLeftTree())); + final Set<? extends CDOMObject> b = doFilterP(pt.getRightTree()); + if (c.equalsIgnoreCase(ParameterTree.orString)) + { + a.addAll(b); + } + else + { + a.retainAll(b); + } + return a; + } + + return filterSetP(c); + } + + public Object countS(final PlayerCharacter pc, final Object[] params) throws + ParseException + { + final Object[] par = validateParams(params); + final ParameterTree pt = convertParams(par); + + getData(pc); + final Set<String> filtered = doFilterS(pt); + + return countDataS(filtered); + } + + protected Object countDataS(final Collection<String> filtered) + { + return (double) filtered.size(); + } + + //@SuppressWarnings("unchecked") //Uses JEP, which doesn't use generics + protected Set<String> doFilterS(final ParameterTree pt) throws ParseException + { + final String c = pt.getContents(); + + if (c.equalsIgnoreCase(ParameterTree.orString) || c.equalsIgnoreCase( + ParameterTree.andString)) + { + final Set<String> a = doFilterS(pt.getLeftTree()); + final Set<String> b = doFilterS(pt.getRightTree()); + if (c.equalsIgnoreCase(ParameterTree.orString)) + { + a.addAll(b); + } + else + { + a.retainAll(b); + } + return a; + } + + return filterSetS(c); + } + + + protected abstract void getData(PlayerCharacter pc); + + protected abstract Set<? extends CDOMObject> filterSetP(String c) throws ParseException; + + protected abstract Set<String> filterSetS(String c) throws ParseException; + } + + /** + * Constructor. + */ + public CountDistinctCommand() + { + numberOfParameters = -1; + } + + /** + * Gets the name of the function handled by this class. + * @return The name of the function. + */ + @Override + public String getFunctionName() + { + return "COUNTDISTINCT"; + } + + /** + * Get the PC that will be used to do the counting. + * + * @return the pc + */ + private PlayerCharacter getPC() + { + PlayerCharacter pc = null; + if (parent instanceof VariableProcessor) + { + pc = ((VariableProcessor) parent).getPc(); + } + else + if (parent instanceof PlayerCharacter) + { + pc = (PlayerCharacter) parent; + } + return pc; + } + + /** + * pop maxParam parameters off the stack and populate the array. Note, this method + * leaves one parameter on the stack + * + * @param inStack the stack of Objects + * @param maxParam number of entries to pop from the stack + * + * @return an array of Objects in reverse order, i.e. the last param popped is element + * 0 of the array. + */ + private Object[] paramStackToArray(final Stack inStack, final int maxParam) + { + final Object[] par = new Object[maxParam]; + + if (0 < maxParam) + { + for (int i = maxParam - 1; 0 <= i; i--) + { + par[i] = inStack.pop(); + } + } + + return par; + } + + /** + * Runs count on the inStack. The parameter is popped off the <code>inStack</code>, + * and the variable's value is pushed back to the top of <code>inStack</code>. + * + * @param inStack The jep stack that the count command will process + * + * @throws ParseException + */ + @Override + @SuppressWarnings("unchecked") + //Uses JEP, which doesn't use generics + public void run(final Stack inStack) throws ParseException + { + // Grab the character under scrutiny + final PlayerCharacter pc = getPC(); + + if (pc == null) + { + throw new ParseException( + "Invalid parent (no PC): " + + parent.getClass().getName()); + } + + // check the stack + checkStack(inStack); + + if (1 <= curNumberOfParameters) + { + // move all but the first parameter from the stack into and array of Objects + final Object[] params = paramStackToArray(inStack, curNumberOfParameters - 1); + + // retrieve the first Object, this should be a String which will map directly to + // a JepCountEnum, this specifies the type of count to perform + final Object toCount = inStack.pop(); + + if (toCount instanceof String) + { + final JepCountEnum CountEnum = JepCountEnum.valueOf((String) toCount); + + // Count the requested object type. + final Double result = (Double) CountEnum.count(pc, params); + + inStack.push(result); + } + else + { + throw new ParseException("Invalid parameter type"); + } + } + else + { + throw new ParseException("missing parameter, nothing to count"); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-10-04 18:56:42
|
Revision: 7916 http://pcgen.svn.sourceforge.net/pcgen/?rev=7916&view=rev Author: thpr Date: 2008-10-04 18:56:32 +0000 (Sat, 04 Oct 2008) Log Message: ----------- [ 2146709 ] SubClass with reference based items may fail Issue#: 2146709 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml 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/SubClass.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/DeferredLine.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclasslevelToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-04 18:09:20 UTC (rev 7915) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-04 18:56:32 UTC (rev 7916) @@ -4256,7 +4256,7 @@ <target name="jar-lst-subclass-plugins" depends="makeplugindirs" description="Build (Link) SubClass Lst Token plugin jar files"> <!-- SubClass tokens: - CHOICE, COST, PROHIBITCOST, SUBCLASSLEVEL, SUBCLASS + CHOICE, COST, PROHIBITCOST, SUBCLASS --> <jar jarfile="${lstplugins.dir}/SubClassLstToken-CHOICE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> @@ -4279,13 +4279,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${lstplugins.dir}/SubClassLstToken-SUBCLASSLEVEL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/subclass/SubclasslevelToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${lstplugins.dir}/SubClassLstToken-SUBCLASS.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-10-04 18:09:20 UTC (rev 7915) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-10-04 18:56:32 UTC (rev 7916) @@ -65,6 +65,7 @@ import pcgen.core.WeaponProf; import pcgen.core.bonus.BonusObj; import pcgen.persistence.lst.CampaignSourceEntry; +import pcgen.persistence.lst.utils.DeferredLine; /** * @author Tom Parker <th...@us...> @@ -228,6 +229,7 @@ public static final ListKey<SpecialAbility> SAB = new ListKey<SpecialAbility>(); public static final ListKey<SubClass> SUB_CLASS = new ListKey<SubClass>(); public static final ListKey<SubstitutionClass> SUBSTITUTION_CLASS = new ListKey<SubstitutionClass>(); + public static final ListKey<DeferredLine> SUB_CLASS_LEVEL = new ListKey<DeferredLine>(); /** Private constructor to prevent instantiation of this class */ private ListKey() { Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-10-04 18:09:20 UTC (rev 7915) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-10-04 18:56:32 UTC (rev 7916) @@ -83,7 +83,9 @@ import pcgen.core.utils.MessageType; import pcgen.core.utils.ShowMessageDelegate; import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.PCClassLoader; import pcgen.persistence.lst.prereq.PreParserFactory; +import pcgen.persistence.lst.utils.DeferredLine; import pcgen.rules.context.AbstractReferenceContext; import pcgen.util.InputFactory; import pcgen.util.InputInterface; @@ -4342,8 +4344,13 @@ } } + /* + * TODO This is a clone problem, but works for now - thpr 10/3/08 + */ if (otherClass instanceof SubClass) { + levelMap.clear(); + copyLevelsFrom(otherClass); ((SubClass) otherClass).applyLevelArrayModsTo(this); } @@ -4643,6 +4650,22 @@ return Collections.unmodifiableCollection(levelMap.values()); } + public void copyLevelsFrom(PCClass cl) + { + for (Map.Entry<Integer, PCClassLevel> me : cl.levelMap.entrySet()) + { + try + { + levelMap.put(me.getKey(), me.getValue().clone()); + } + catch (CloneNotSupportedException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + public int getPCClassLevel(PCClassLevel pcl) { if (this.equals(pcl.get(ObjectKey.PARENT))) @@ -4720,4 +4743,30 @@ { return "0|"; } + + /* + * This exists solely due to the token transition. The new load method + * is during LST load (not deferred), so it can resolve references. The + * problem is that this means old tokens load into the SubClass, not + * the PCClass and are lost. So this is a hack to restore them + * into the PCClass when the SubClass is applied, without disrupting + * the class levels that are in the PCClass. (which would cause duplication + * or other errors) + */ + public void performReallyBadHackForOldTokens(DeferredLine line) + { + SortedMap<Integer, PCClassLevel> saveLevelMap = levelMap; + levelMap = new TreeMap<Integer, PCClassLevel>(); + final PCClassLoader classLoader = new PCClassLoader(); + try + { + classLoader.parseLine(Globals.getContext(), this, line.lstLine, line.source); + } + catch (PersistenceLayerException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + levelMap = saveLevelMap; + } } Modified: Trunk/pcgen/code/src/java/pcgen/core/SubClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SubClass.java 2008-10-04 18:09:20 UTC (rev 7915) +++ Trunk/pcgen/code/src/java/pcgen/core/SubClass.java 2008-10-04 18:56:32 UTC (rev 7916) @@ -22,17 +22,13 @@ */ package pcgen.core; -import java.util.ArrayList; import java.util.List; import pcgen.cdom.base.CategorizedCDOMObject; import pcgen.cdom.base.Category; import pcgen.cdom.enumeration.IntegerKey; import pcgen.cdom.enumeration.ListKey; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.lst.CampaignSourceEntry; -import pcgen.persistence.lst.PCClassLoader; -import pcgen.util.Logging; +import pcgen.persistence.lst.utils.DeferredLine; /** * <code>SubClass</code>. @@ -42,7 +38,6 @@ */ public final class SubClass extends PCClass implements CategorizedCDOMObject<SubClass> { - private List<String> levelArray = null; private String choice = null; /** @@ -132,48 +127,21 @@ } /** - * Add sub class to the level array - * @param arg - */ - public void addToLevelArray(final String arg) - { - if (levelArray == null) - { - levelArray = new ArrayList<String>(); - } - - levelArray.add(arg); - } - - /** * Apply the level mods to a class * @param aClass */ public void applyLevelArrayModsTo(final PCClass aClass) { + List<DeferredLine> levelArray = getListFor(ListKey.SUB_CLASS_LEVEL); if (levelArray == null) { return; } - try + for ( DeferredLine line : levelArray ) { - final Campaign customCampaign = new Campaign(); - customCampaign.setName("Custom"); - customCampaign.addToListFor(ListKey.DESCRIPTION, new Description("Custom data")); - - final CampaignSourceEntry tempSource = new CampaignSourceEntry(customCampaign, aClass.getSourceURI()); - - for ( String line : levelArray ) - { - final PCClassLoader classLoader = new PCClassLoader(); - classLoader.parseLine(Globals.getContext(), aClass, line, tempSource); - } + aClass.performReallyBadHackForOldTokens(line); } - catch (PersistenceLayerException exc) - { - Logging.errorPrint(exc.getMessage()); - } } public String getSupplementalDisplayInfo() { Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2008-10-04 18:09:20 UTC (rev 7915) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2008-10-04 18:56:32 UTC (rev 7916) @@ -536,6 +536,8 @@ // Add default EQ mods eqModLoader.addDefaultEquipmentMods(context); + + classLoader.loadSubLines(context); context.resolveDeferredTokens(); context.ref.buildDeferredObjects(); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-04 18:09:20 UTC (rev 7915) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-04 18:56:32 UTC (rev 7916) @@ -22,6 +22,7 @@ */ package pcgen.persistence.lst; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.StringTokenizer; @@ -37,6 +38,7 @@ import pcgen.core.prereq.Prerequisite; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.SystemLoader; +import pcgen.persistence.lst.utils.DeferredLine; import pcgen.rules.context.LoadContext; import pcgen.util.Logging; @@ -102,7 +104,7 @@ if (subClassList != null) { subClass = subClassList.get(subClassList.size() - 1); - subClass.addToLevelArray(lstLine.substring(14)); + subClass.addToListFor(ListKey.SUB_CLASS_LEVEL, new DeferredLine(source, lstLine.substring(14))); return pcClass; } @@ -214,55 +216,62 @@ } else { - try + parseFullClassLevelLine(context, source, pcClass, lineIdentifier, + restOfLine); + } + return pcClass; + } + + private void parseFullClassLevelLine(LoadContext context, + CampaignSourceEntry source, PCClass pcClass, String lineIdentifier, + String restOfLine) throws PersistenceLayerException + { + try + { + String repeatTag = null; + String thisLevel; + int rlLoc = lineIdentifier.indexOf(":REPEATLEVEL:"); + if (rlLoc == -1) { - String repeatTag = null; - String thisLevel; - int rlLoc = lineIdentifier.indexOf(":REPEATLEVEL:"); - if (rlLoc == -1) + thisLevel = lineIdentifier; + } + else + { + thisLevel = lineIdentifier.substring(0, rlLoc); + repeatTag = lineIdentifier.substring(rlLoc + 13); + } + int iLevel = Integer.parseInt(thisLevel); + if (iLevel == 0) + { + /* + * This is for backwards compatibility with PCGen 5.14 + * getPCCText which writes out things to level 0 :P + */ + parseLineIntoClass(context, pcClass, source, restOfLine); + } + else if (iLevel > 0) + { + parseClassLevelLine(context, pcClass, iLevel, source, restOfLine); + if (repeatTag != null) { - thisLevel = lineIdentifier; + parseRepeatClassLevel(context, restOfLine, source, pcClass, iLevel, repeatTag); } - else - { - thisLevel = lineIdentifier.substring(0, rlLoc); - repeatTag = lineIdentifier.substring(rlLoc + 13); - } - int iLevel = Integer.parseInt(thisLevel); - if (iLevel == 0) - { - /* - * This is for backwards compatibility with PCGen 5.14 - * getPCCText which writes out things to level 0 :P - */ - parseLineIntoClass(context, pcClass, source, restOfLine); - } - else if (iLevel > 0) - { - parseClassLevelLine(context, pcClass, iLevel, source, restOfLine); - if (repeatTag != null) - { - parseRepeatClassLevel(context, restOfLine, source, pcClass, iLevel, repeatTag); - } - } - else - { - Logging.errorPrint("Invalid Level Identifier: " + thisLevel - + " for " + pcClass.getDisplayName() - + ". Value must be greater than zero"); - } } - catch (NumberFormatException nfe) + else { - // I think we can ignore this, as - // it's supposed to be the level # - // but could be almost anything else - Logging.errorPrint("Expected a level value, but got '" - + lineIdentifier + "' instead in " + source.getURI(), nfe); + Logging.errorPrint("Invalid Level Identifier: " + thisLevel + + " for " + pcClass.getDisplayName() + + ". Value must be greater than zero"); } - } - return pcClass; + catch (NumberFormatException nfe) + { + // I think we can ignore this, as + // it's supposed to be the level # + // but could be almost anything else + Logging.errorPrint("Expected a level value, but got '" + + lineIdentifier + "' instead in " + source.getURI(), nfe); + } } public void parseClassLevelLine(LoadContext context, PCClass pcClass, @@ -537,4 +546,49 @@ return new StringBuffer().append(aInt).append("|").append(colString) .toString(); } + + public void loadSubLines(LoadContext context) + { + Collection<PCClass> allClasses = context.ref + .getConstructedCDOMObjects(PCClass.class); + for (PCClass cl : allClasses) + { + List<SubClass> subClasses = cl.getListFor(ListKey.SUB_CLASS); + if (subClasses != null) + { + for (SubClass sc : subClasses) + { + sc.copyLevelsFrom(cl); + for (DeferredLine dl : sc.getSafeListFor(ListKey.SUB_CLASS_LEVEL)) + { + String lstLine = dl.lstLine; + try + { + int tabLoc = lstLine.indexOf(SystemLoader.TAB_DELIM); + String lineIdentifier; + String restOfLine; + if (tabLoc == -1) + { + lineIdentifier = lstLine; + restOfLine = null; + } + else + { + lineIdentifier = lstLine.substring(0, tabLoc); + restOfLine = lstLine.substring(tabLoc + 1); + } + parseFullClassLevelLine(context, dl.source, sc, lineIdentifier, restOfLine); + } + catch (PersistenceLayerException ple) + { + Logging.log(Logging.LST_ERROR, + "Error parsing SubClass line: " + + cl.getKeyName() + " " + + sc.getKeyName() + " " + lstLine, ple); + } + } + } + } + } + } } Added: Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/DeferredLine.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/DeferredLine.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/utils/DeferredLine.java 2008-10-04 18:56:32 UTC (rev 7916) @@ -0,0 +1,16 @@ +package pcgen.persistence.lst.utils; + +import pcgen.persistence.lst.CampaignSourceEntry; + +public class DeferredLine +{ + + public final CampaignSourceEntry source; + public final String lstLine; + + public DeferredLine(CampaignSourceEntry source, String line) + { + this.source = source; + this.lstLine = line; + } +} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclasslevelToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclasslevelToken.java 2008-10-04 18:09:20 UTC (rev 7915) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclasslevelToken.java 2008-10-04 18:56:32 UTC (rev 7916) @@ -1,22 +0,0 @@ -package plugin.lsttokens.subclass; - -import pcgen.core.SubClass; -import pcgen.persistence.lst.SubClassLstToken; - -/** - * Class deals with SUBCLASSLEVEL Token - */ -public class SubclasslevelToken implements SubClassLstToken -{ - - public String getTokenName() - { - return "SUBCLASSLEVEL"; - } - - public boolean parse(SubClass subclass, String value) - { - subclass.addToLevelArray(value); - return true; - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-10-04 20:05:21
|
Revision: 7919 http://pcgen.svn.sourceforge.net/pcgen/?rev=7919&view=rev Author: thpr Date: 2008-10-04 20:05:11 +0000 (Sat, 04 Oct 2008) Log Message: ----------- [ 2146710 ] SubstitutionClass may fail with reference based token Issue#: 2146710 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/substitutionlevel/SubstitutionlevelToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-04 19:39:29 UTC (rev 7918) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-04 20:05:11 UTC (rev 7919) @@ -4290,7 +4290,7 @@ <target name="jar-lst-substitutionlevel-plugins" depends="makeplugindirs" description="Build (Link) SubstitutionLevel Lst Token plugin jar files"> <!-- SubstitutionClass tokens: - SUBSTITUTIONCLASS, SUBSTITUTIONLEVEL + SUBSTITUTIONCLASS --> <jar jarfile="${lstplugins.dir}/SubstitutionLevelLstToken-SUBSTITUTIONCLASS.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> @@ -4299,13 +4299,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${lstplugins.dir}/SubstitutionLevelLstToken-SUBSTITUTIONLEVEL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/substitutionlevel/SubstitutionlevelToken.class" /> - </patternset> - </fileset> - </jar> </target> <target name="jar-lst-template-plugins" depends="makeplugindirs" description="Build (Link) Weapon Prof Lst Token plugin jar files"> Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-10-04 19:39:29 UTC (rev 7918) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-10-04 20:05:11 UTC (rev 7919) @@ -4640,11 +4640,6 @@ return levelMap.size(); } - public void resetClassLevel(int lvl) - { - levelMap.remove(lvl); - } - public Collection<PCClassLevel> getClassLevelCollection() { return Collections.unmodifiableCollection(levelMap.values()); @@ -4769,4 +4764,17 @@ } levelMap = saveLevelMap; } + + public void stealClassLevel(PCClass pcc, int cl) + { + try + { + levelMap.put(cl, pcc.getClassLevel(cl).clone()); + } + catch (CloneNotSupportedException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } } Modified: Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java 2008-10-04 19:39:29 UTC (rev 7918) +++ Trunk/pcgen/code/src/java/pcgen/core/SubstitutionClass.java 2008-10-04 20:05:11 UTC (rev 7919) @@ -29,6 +29,7 @@ import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.CampaignSourceEntry; import pcgen.persistence.lst.PCClassLoader; +import pcgen.persistence.lst.utils.DeferredLine; import pcgen.util.Logging; /** @@ -39,7 +40,6 @@ */ public final class SubstitutionClass extends PCClass { - private List<String> levelArray = null; private List<Integer> modLevels = null; /** Constructor */ @@ -48,83 +48,54 @@ } /** - * Add substitution class to the level array - * @param arg - */ - public void addToLevelArray(final String arg) - { - if (levelArray == null) - { - levelArray = new ArrayList<String>(); - modLevels = new ArrayList<Integer>(); - } - - levelArray.add(arg); - - final Integer level = Integer.valueOf(arg.substring(0, arg.indexOf("\t"))); - modLevels.add(level); - } - - /** * Apply the level mods to a class * @param aClass */ public void applyLevelArrayModsToLevel(final PCClass aClass, final int aLevel, final PlayerCharacter aPC) { + List<DeferredLine> levelArray = getListFor(ListKey.SUB_CLASS_LEVEL); if (levelArray == null) { return; } - try + List<DeferredLine> newLevels = new ArrayList<DeferredLine>(); + for (DeferredLine line : levelArray) { - final Campaign customCampaign = new Campaign(); - customCampaign.setName("Custom"); - customCampaign.addToListFor(ListKey.DESCRIPTION, new Description("Custom data")); + String aLine = line.lstLine; + final int modLevel = Integer.parseInt(aLine.substring(0, aLine + .indexOf("\t"))); - final CampaignSourceEntry tempSource = new CampaignSourceEntry(customCampaign, aClass.getSourceURI()); - - ArrayList<String> newLevels = new ArrayList<String>(); - final PCClassLoader classLoader = new PCClassLoader(); - - // find all qualifying level lines for this level - // and put into newLevels list. - for (String aLine : levelArray) + if (aLevel == modLevel) { - final int modLevel = Integer.parseInt(aLine.substring(0, aLine.indexOf("\t"))); - - if (aLevel == modLevel) - { - if (levelArrayQualifies(aPC, aLine, tempSource)) - { - newLevels.add(aLine); - } - } - } - if (!newLevels.isEmpty()) - { - // remove all stuff from the original level - aClass.resetClassLevel(aLevel); - aClass.removeAllBonuses(aLevel); - aClass.removeAllAutoAbilites(aLevel); - aClass.removeAllVirtualAbilites(aLevel); - aClass.removeAllLevelAbilities(aLevel); - - // Now add in each new level line in turn. - for (String theLine: newLevels) + if (levelArrayQualifies(aPC, aLine, line.source)) { - classLoader.parseLine(Globals.getContext(), aClass, theLine, tempSource); + newLevels.add(line); } } } - catch (PersistenceLayerException exc) + + // find all qualifying level lines for this level + // and put into newLevels list. + if (!newLevels.isEmpty()) { - Logging.errorPrint(exc.getMessage()); + // remove all stuff from the original level + aClass.stealClassLevel(this, aLevel); + aClass.removeAllBonuses(aLevel); + aClass.removeAllAutoAbilites(aLevel); + aClass.removeAllVirtualAbilites(aLevel); + aClass.removeAllLevelAbilities(aLevel); + // Now add in each new level line in turn. + for (DeferredLine line : levelArray) + { + aClass.performReallyBadHackForOldTokens(line); + } } } /** * Get the level mods for a specific level + * * @param aClass */ public boolean hasLevelArrayModsForLevel(final int aLevel) @@ -134,26 +105,28 @@ public boolean qualifiesForSubstitutionLevel(PlayerCharacter pc, int level) { - boolean passes =false; - for (String aLine : levelArray) - { - final int modLevel = Integer.parseInt(aLine.substring(0, aLine.indexOf("\t"))); - final Campaign customCampaign = new Campaign(); - customCampaign.setName("Custom"); - customCampaign.addToListFor(ListKey.DESCRIPTION, new Description("Custom data")); + List<DeferredLine> levelArray = getListFor(ListKey.SUB_CLASS_LEVEL); + if (levelArray == null) + { + return false; + } - final CampaignSourceEntry tempSource = new CampaignSourceEntry(customCampaign, this.getSourceURI()); + for (DeferredLine line : levelArray) + { + String aLine = line.lstLine; + final int modLevel = Integer.parseInt(aLine.substring(0, aLine + .indexOf("\t"))); - if (level == modLevel) - { - passes = levelArrayQualifies(pc, aLine, tempSource); - if (passes) + if (level == modLevel) + { + if (!levelArrayQualifies(pc, aLine, line.source)) { - return passes; - } - } - } - return passes; + return false; + } + } + } + + return true; } /** Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-04 19:39:29 UTC (rev 7918) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-04 20:05:11 UTC (rev 7919) @@ -156,7 +156,7 @@ { substitutionClass = substitutionClassList .get(substitutionClassList.size() - 1); - substitutionClass.addToLevelArray(lstLine.substring(18)); + substitutionClass.addToListFor(ListKey.SUB_CLASS_LEVEL, new DeferredLine(source, lstLine.substring(18))); return pcClass; } @@ -559,36 +559,50 @@ for (SubClass sc : subClasses) { sc.copyLevelsFrom(cl); - for (DeferredLine dl : sc.getSafeListFor(ListKey.SUB_CLASS_LEVEL)) - { - String lstLine = dl.lstLine; - try - { - int tabLoc = lstLine.indexOf(SystemLoader.TAB_DELIM); - String lineIdentifier; - String restOfLine; - if (tabLoc == -1) - { - lineIdentifier = lstLine; - restOfLine = null; - } - else - { - lineIdentifier = lstLine.substring(0, tabLoc); - restOfLine = lstLine.substring(tabLoc + 1); - } - parseFullClassLevelLine(context, dl.source, sc, lineIdentifier, restOfLine); - } - catch (PersistenceLayerException ple) - { - Logging.log(Logging.LST_ERROR, - "Error parsing SubClass line: " - + cl.getKeyName() + " " - + sc.getKeyName() + " " + lstLine, ple); - } - } + processSubLevelLines(context, cl, sc); } } + List<SubstitutionClass> substClasses = cl.getListFor(ListKey.SUBSTITUTION_CLASS); + if (substClasses != null) + { + for (SubstitutionClass sc : substClasses) + { + processSubLevelLines(context, cl, sc); + } + } } } + + private void processSubLevelLines(LoadContext context, PCClass cl, + PCClass sc) + { + for (DeferredLine dl : sc.getSafeListFor(ListKey.SUB_CLASS_LEVEL)) + { + String lstLine = dl.lstLine; + try + { + int tabLoc = lstLine.indexOf(SystemLoader.TAB_DELIM); + String lineIdentifier; + String restOfLine; + if (tabLoc == -1) + { + lineIdentifier = lstLine; + restOfLine = null; + } + else + { + lineIdentifier = lstLine.substring(0, tabLoc); + restOfLine = lstLine.substring(tabLoc + 1); + } + parseFullClassLevelLine(context, dl.source, sc, lineIdentifier, restOfLine); + } + catch (PersistenceLayerException ple) + { + Logging.log(Logging.LST_ERROR, + "Error parsing " + sc.getClass().getSimpleName() + " line: " + + cl.getKeyName() + " " + + sc.getKeyName() + " " + lstLine, ple); + } + } + } } Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/substitutionlevel/SubstitutionlevelToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/substitutionlevel/SubstitutionlevelToken.java 2008-10-04 19:39:29 UTC (rev 7918) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/substitutionlevel/SubstitutionlevelToken.java 2008-10-04 20:05:11 UTC (rev 7919) @@ -1,22 +0,0 @@ -package plugin.lsttokens.substitutionlevel; - -import pcgen.core.SubstitutionClass; -import pcgen.persistence.lst.SubstitutionClassLstToken; - -/** - * Class deals with SUBSTITUTIONLEVEL Token - */ -public class SubstitutionlevelToken implements SubstitutionClassLstToken -{ - - public String getTokenName() - { - return "SUBSTITUTIONLEVEL"; - } - - public boolean parse(SubstitutionClass substitutionclass, String value) - { - substitutionclass.addToLevelArray(value); - return true; - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2008-10-04 09:01:38
|
Revision: 7900 http://pcgen.svn.sourceforge.net/pcgen/?rev=7900&view=rev Author: jdempsey Date: 2008-10-04 09:01:35 +0000 (Sat, 04 Oct 2008) Log Message: ----------- FReq: Assigning Languages via kits Part2 - SKILL SELECTION support Issue#: 2016425 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillLanguage.java Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillRankControl.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkill.java Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkillAdd.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/lsttokens/kit/skill/SelectionToken.java Trunk/pcgen/code/src/test/pcgen/core/prereq/PreCampaignTest.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-04 08:56:16 UTC (rev 7899) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-04 09:01:35 UTC (rev 7900) @@ -4881,6 +4881,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${lstplugins.dir}/KitSkillLstToken-SELECTION.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/kit/skill/SelectionToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${lstplugins.dir}/KitSkillLstToken-SKILL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillLanguage.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillLanguage.java 2008-10-04 08:56:16 UTC (rev 7899) +++ Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillLanguage.java 2008-10-04 09:01:35 UTC (rev 7900) @@ -56,7 +56,7 @@ List<Skill> skillList = new ArrayList<Skill>(aPC.getSkillList()); for (Skill aSkill : skillList) { - if (aSkill.getChoiceString().toLowerCase().indexOf("language") >= 0) + if (isLanguage(aSkill)) { languageSkill = aSkill; } @@ -66,6 +66,16 @@ } /** + * Identify if the supplied skill is a language skill + * @param aSkill The skill to be checked. + * @return true if the skill is a language, false otherwise + */ + public static boolean isLanguage(Skill aSkill) + { + return aSkill.getChoiceString().toLowerCase().indexOf("language") >= 0; + } + + /** * Choose the language that is to be gained for the specified language * skill. Note: This pops up a chooser so should not be used in batch mode. * @@ -94,139 +104,216 @@ List<Language> available = new ArrayList<Language>(); List<Language> excludedLangs = new ArrayList<Language>(); - String reqType = null; - if (languageSkill.getChoiceString().toLowerCase().indexOf( - "language(") >= 0) + buildLanguageListsForSkill(aPC, languageSkill, selected, available, + excludedLangs); + + Globals.sortChooserLists(available, selected); + + ChooserInterface lc = ChooserFactory.getChooserInstance(); + lc.setVisible(false); + lc.setAvailableList(available); + lc.setSelectedList(selected); + lc.setTotalChoicesAvail(numLanguages); + lc.setPoolFlag(false); + lc.setVisible(true); + + aPC.clearLanguages(); + aPC.addLanguages(selected); + + // Add in all choice-excluded languages + aPC.addLanguages(excludedLangs); + aPC.removeAllAssociations(languageSkill); + // TODO Fix this to allow Language objects. + for (Iterator<?> i = lc.getSelectedList().iterator(); i.hasNext();) { - // We expect to have a choice string like Language(foo) - // where foo is the type we have to limit choices by. - String choiceParts[] = languageSkill.getChoiceString().split( - "[\\(\\)]"); - if (choiceParts.length >= 2) - { - reqType = choiceParts[1]; - } + aPC.addAssociation(languageSkill, ((Language) i.next()).getKeyName()); } + aPC.setDirty(true); - String[][] reqTypeArray; - if (reqType == null) + return true; + } + + return false; + } + + /** + * Build up the lists of available, already selected and excluded + * languages for the skill and character. + * + * @param aPC The character to build the lists for. + * @param languageSkill The skill to build the lists for. + * @param selected The list of already selected languages + * @param available The list of languages that can be selected from + * @param excludedLangs The list of languages that cannot be selected. + */ + private static void buildLanguageListsForSkill(PlayerCharacter aPC, + Skill languageSkill, List<Language> selected, List<Language> available, + List<Language> excludedLangs) + { + String reqType = null; + if (languageSkill.getChoiceString().toLowerCase().indexOf( + "language(") >= 0) + { + // We expect to have a choice string like Language(foo) + // where foo is the type we have to limit choices by. + String choiceParts[] = languageSkill.getChoiceString().split( + "[\\(\\)]"); + if (choiceParts.length >= 2) { - reqTypeArray = null; + reqType = choiceParts[1]; } - else + } + + String[][] reqTypeArray; + if (reqType == null) + { + reqTypeArray = null; + } + else + { + String[] rta = reqType.split(","); + reqTypeArray = new String[rta.length][]; + for (int i = 0; i < rta.length; i++) { - String[] rta = reqType.split(","); - reqTypeArray = new String[rta.length][]; - for (int i = 0; i < rta.length; i++) - { - reqTypeArray[i] = rta[i].split("\\."); - } + reqTypeArray[i] = rta[i].split("\\."); } + } - for (String aString : aPC.getAssociationList(languageSkill)) + for (String aString : aPC.getAssociationList(languageSkill)) + { + Language aLang = Globals.getContext().ref + .silentlyGetConstructedCDOMObject(Language.class, + aString); + + if (aLang == null) { - Language aLang = Globals.getContext().ref - .silentlyGetConstructedCDOMObject(Language.class, - aString); - - if (aLang == null) + continue; + } + if (reqTypeArray == null) + { + selected.add(aLang); + continue; + } + SELARRAY: for (String[] types : reqTypeArray) + { + for (String type : types) { - continue; - } - if (reqTypeArray == null) - { - selected.add(aLang); - continue; - } - SELARRAY: for (String[] types : reqTypeArray) - { - for (String type : types) + if (!aLang.isType(type)) { - if (!aLang.isType(type)) - { - continue SELARRAY; - } + continue SELARRAY; } - selected.add(aLang); } + selected.add(aLang); } + } - for (Language lang : Globals.getContext().ref - .getConstructedCDOMObjects(Language.class)) + for (Language lang : Globals.getContext().ref + .getConstructedCDOMObjects(Language.class)) + { + if (!PrereqHandler.passesAll(lang.getPrerequisiteList(), aPC, lang)) { - if (!PrereqHandler.passesAll(lang.getPrerequisiteList(), aPC, lang)) + continue; + } + if (reqTypeArray == null) + { + available.add(lang); + continue; + } + AVARRAY: for (String[] types : reqTypeArray) + { + for (String type : types) { - continue; - } - if (reqTypeArray == null) - { - available.add(lang); - continue; - } - AVARRAY: for (String[] types : reqTypeArray) - { - for (String type : types) + if (!lang.isType(type)) { - if (!lang.isType(type)) - { - continue AVARRAY; - } + continue AVARRAY; } - available.add(lang); } + available.add(lang); } + } - // - // Do not give choice of automatic languages - // - for (Language lang : aPC.getAutoLanguages()) + // + // Do not give choice of automatic languages + // + for (Language lang : aPC.getAutoLanguages()) + { + available.remove(lang); + excludedLangs.add(lang); + } + + // + // Do not give choice of selected bonus languages + // + for (Language lang : aPC.getLanguagesList()) + { + if (!selected.contains(lang)) { - available.remove(lang); + if ((reqType == null || lang.isType(reqType))) + { + available.remove(lang); + } excludedLangs.add(lang); } + } + } - // - // Do not give choice of selected bonus languages - // - for (Language lang : aPC.getLanguagesList()) + /** + * Gets the list of languages from the langKeyList that are + * valid to add to the character for the given skill. No more + * than the specified number of languages will be returned. + * + * @param langKeyList The list of language keys + * @param skill The language skill + * @param aPC The character being processed + * @param maxNumLangs The maximum number of languages to add + * + * @return the language list + */ + public static List<Language> getLanguageList(List<String> langKeyList, + Skill skill, PlayerCharacter aPC, int maxNumLangs) + { + List<Language> selected = new ArrayList<Language>(); + List<Language> available = new ArrayList<Language>(); + List<Language> excludedLangs = new ArrayList<Language>(); + + buildLanguageListsForSkill(aPC, skill, selected, available, + excludedLangs); + + List<Language> theLanguages = new ArrayList<Language>(maxNumLangs); + for (String langKey : langKeyList) + { + Language lang = findLanguageInListByKey(available, langKey); + if (lang != null) { - if (!selected.contains(lang)) + theLanguages.add(lang); + if (theLanguages.size() >= maxNumLangs) { - if ((reqType == null || lang.isType(reqType))) - { - available.remove(lang); - } - excludedLangs.add(lang); + break; } } + } + + return theLanguages; + } - Globals.sortChooserLists(available, selected); - - ChooserInterface lc = ChooserFactory.getChooserInstance(); - lc.setVisible(false); - lc.setAvailableList(available); - lc.setSelectedList(selected); - lc.setTotalChoicesAvail(numLanguages); - lc.setPoolFlag(false); - lc.setVisible(true); - - aPC.clearLanguages(); - aPC.addLanguages(selected); - - // Add in all choice-excluded languages - aPC.addLanguages(excludedLangs); - aPC.removeAllAssociations(languageSkill); - // TODO Fix this to allow Language objects. - for (Iterator<?> i = lc.getSelectedList().iterator(); i.hasNext();) + /** + * Retrieve a language from a list based on its key. + * + * @param langList The list of languages + * @param langKey The key of the language to be retrieved. + * @return The language, or null if there is no match. + */ + private static Language findLanguageInListByKey( + final List<Language> langList, String langKey) + { + for (Language language : langList) + { + if (langKey.equalsIgnoreCase(language.getKeyName())) { - aPC.addAssociation(languageSkill, ((Language) i.next()).getKeyName()); + return language; } - aPC.setDirty(true); - - return true; } - - return false; + return null; } } Modified: Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillRankControl.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillRankControl.java 2008-10-04 08:56:16 UTC (rev 7899) +++ Trunk/pcgen/code/src/java/pcgen/core/analysis/SkillRankControl.java 2008-10-04 09:01:35 UTC (rev 7900) @@ -288,7 +288,10 @@ { if (choiceString.startsWith("Language")) { - active.addWeight(g); + if (active != null) + { + active.addWeight(g); + } if (!SkillLanguage.chooseLanguageForSkill(aPC, sk)) { newRank = curRank; @@ -304,7 +307,10 @@ newRank = curRank; } } - active.removeWeight(g); + if (active != null) + { + active.removeWeight(g); + } g = newRank - curRank; } } Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkill.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkill.java 2008-10-04 08:56:16 UTC (rev 7899) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkill.java 2008-10-04 09:01:35 UTC (rev 7900) @@ -25,7 +25,9 @@ import java.io.Serializable; import java.util.*; +import pcgen.base.lang.StringUtil; import pcgen.core.*; +import pcgen.core.analysis.SkillLanguage; import pcgen.core.analysis.SkillRankControl; import pcgen.core.pclevelinfo.PCLevelInfo; import pcgen.gui.CharacterInfo; @@ -47,6 +49,7 @@ private String className = null; private boolean free = false; private double rank = 1.0; + private List<String> selection = new ArrayList<String>(); private transient List<KitWrapper> skillsToAdd = new ArrayList<KitWrapper>(); @@ -104,6 +107,24 @@ } /** + * Get the language selection value. + * @return selection + */ + public List<String> getSelection() + { + return selection; + } + + /** + * Set the language selection. + * @param selection The new selection value. + */ + public void setSelection(List<String> selection) + { + this.selection = selection; + } + + /** * Get the name of the skill * @return name */ @@ -157,6 +178,12 @@ info.append("/free"); } + if (selection != null && !selection.isEmpty()) + { + info.append("/"); + info.append(StringUtil.join(selection, ", ")); + } + info.append(')'); return info.toString(); @@ -215,6 +242,8 @@ } // Try and find a class we can add them from. + boolean oldImporting = aPC.isImporting(); + aPC.setImporting(true); for ( PCClass pcClass : classList ) { final KitSkillAdd sta = addRanks(aPC, pcClass, skill, @@ -232,6 +261,7 @@ } } } + aPC.setImporting(oldImporting); if (ranksLeftToAdd > 0.0) { warnings.add("SKILL: Could not add " + ranksLeftToAdd @@ -248,7 +278,8 @@ for ( KitWrapper wrapper : skillsToAdd ) { KitSkillAdd ksa = (KitSkillAdd)wrapper.getObject(); - updatePCSkills(aPC, ksa.getSkill(), (int)ksa.getRanks(), ksa.getCost(), (PCClass)wrapper.getPObject()); + updatePCSkills(aPC, ksa.getSkill(), (int) ksa.getRanks(), ksa + .getCost(), ksa.getLanguages(), (PCClass) wrapper.getPObject()); } } @@ -259,17 +290,21 @@ * @param aSkill Skill to update * @param aRank Number of ranks to add * @param aCost Cost of added ranks + * @param langList Languages to be selected for a language skill * @param pcClass skills apply to this class * * @return <code>true</code> for success * TODO What about throwing on failure? */ private boolean updatePCSkills(final PlayerCharacter pc, final Skill aSkill, - final int aRank, final double aCost, final PCClass pcClass) + final int aRank, final double aCost, List<Language> langList, final PCClass pcClass) { final Skill skill = pc.addSkill(aSkill); + boolean oldImporting = pc.isImporting(); + pc.setImporting(true); final String aString = SkillRankControl.modRanks(aRank, pcClass, true, pc, skill); + pc.setImporting(oldImporting); if (aString.length() > 0) { @@ -277,6 +312,17 @@ return false; } + // Add any supplied languages + if (!langList.isEmpty()) + { + pc.addLanguages(langList); + + for (Iterator<Language> i = langList.iterator(); i.hasNext();) + { + pc.addAssociation(skill, i.next().getKeyName()); + } + + } // // Fix up the skill pools to reflect what we just spent. // @@ -460,6 +506,14 @@ } } - return new KitSkillAdd(aSkill, ranksToAdd, ptsToSpend); + List<Language> langList = new ArrayList<Language>(); + if (SkillLanguage.isLanguage(aSkill) && selection != null + && !selection.isEmpty()) + { + langList = + SkillLanguage.getLanguageList(selection, aSkill, pc, + (int) ranksToAdd); + } + return new KitSkillAdd(aSkill, ranksToAdd, ptsToSpend, langList); } } Modified: Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkillAdd.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkillAdd.java 2008-10-04 08:56:16 UTC (rev 7899) +++ Trunk/pcgen/code/src/java/pcgen/core/kit/KitSkillAdd.java 2008-10-04 09:01:35 UTC (rev 7900) @@ -20,6 +20,9 @@ */ package pcgen.core.kit; +import java.util.List; + +import pcgen.core.Language; import pcgen.core.Skill; /** @@ -33,18 +36,21 @@ private Skill skill = null; private double ranks = 0.0; private int cost = 0; + private List<Language> languages; /** * Constructor * @param argSkill * @param aRanks * @param aCost + * @param aLanguages The languages which should be selected. */ - public KitSkillAdd(final Skill argSkill, double aRanks, int aCost) + public KitSkillAdd(final Skill argSkill, double aRanks, int aCost, List<Language> aLanguages) { skill = argSkill; ranks = aRanks; cost = aCost; + languages = aLanguages; } /** @@ -74,4 +80,13 @@ return cost; } + /** + * Gets the list of languages. + * @return the languages + */ + public List<Language> getLanguages() + { + return languages; + } + } Added: Trunk/pcgen/code/src/java/plugin/lsttokens/kit/skill/SelectionToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/kit/skill/SelectionToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/kit/skill/SelectionToken.java 2008-10-04 09:01:35 UTC (rev 7900) @@ -0,0 +1,78 @@ +/* + * SelectionToken.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 4/10/2008 15:58:41 + * + * $Id: $ + */ + + +package plugin.lsttokens.kit.skill; + +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +import pcgen.cdom.base.Constants; +import pcgen.core.kit.KitSkill; +import pcgen.persistence.lst.KitSkillLstToken; + +/** + * SELECTION token for KitSkill + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class SelectionToken implements KitSkillLstToken +{ + + /** + * Gets the name of the tag this class will parse. + * + * @return Name of the tag this class handles + */ + public String getTokenName() + { + return "SELECTION"; + } + + /** + * Parse the selection tag. + * + * @param kitSkill The skill tag being modified + * @param value String The value of the tag. + * + * @return boolean true if the value could be parsed. + */ + public boolean parse(KitSkill kitSkill, String value) + { + List<String> langKeys = new ArrayList<String>(); + final StringTokenizer langToken = + new StringTokenizer(value, Constants.COMMA); + while (langToken.hasMoreTokens()) + { + langKeys.add(langToken.nextToken()); + } + + kitSkill.setSelection(langKeys); + return true; + } +} Added: Trunk/pcgen/code/src/test/pcgen/core/prereq/PreCampaignTest.java =================================================================== --- Trunk/pcgen/code/src/test/pcgen/core/prereq/PreCampaignTest.java (rev 0) +++ Trunk/pcgen/code/src/test/pcgen/core/prereq/PreCampaignTest.java 2008-10-04 09:01:35 UTC (rev 7900) @@ -0,0 +1,125 @@ +/* + * PreCampaignTest.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 27/07/2008 15:46:38 + * + * $Id: $ + */ +package pcgen.core.prereq; + +import java.net.URI; +import java.net.URISyntaxException; + +import junit.framework.Test; +import junit.framework.TestSuite; +import junit.textui.TestRunner; +import pcgen.PCGenTestCase; +import pcgen.base.lang.UnreachableError; +import pcgen.cdom.enumeration.ObjectKey; +import pcgen.core.Ability; +import pcgen.core.Campaign; +import pcgen.core.Globals; +import pcgen.core.PlayerCharacter; +import pcgen.core.SettingsHandler; +import pcgen.gui.utils.SwingChooser; +import pcgen.persistence.PersistenceLayerException; +import pcgen.persistence.lst.CampaignSourceEntry; +import pcgen.persistence.lst.FeatLoader; +import pcgen.persistence.lst.prereq.PreParserFactory; +import pcgen.util.chooser.ChooserFactory; +import plugin.pretokens.parser.PreFeatParser; + +/** + * The Class <code>PreCampaignTest</code> checks the procesing + * of the PRECAMPAIGN tag. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class PreCampaignTest extends PCGenTestCase +{ + + /** + * The main method. + * + * @param args the arguments + */ + public static void main(final String[] args) + { + TestRunner.run(PreCampaignTest.class); + } + + /** + * Suite. + * + * @return Test + */ + public static Test suite() + { + return new TestSuite(PreCampaignTest.class); + } + + /** + * Test966023c. + * + * @throws Exception the exception + */ + public void test966023c() throws Exception + { + ChooserFactory.setInterfaceClassname(SwingChooser.class.getName()); + + SettingsHandler.getGame().addToSchoolList("Conjuration"); + SettingsHandler.getGame().addToSchoolList("Evocation"); + SettingsHandler.getGame().addToSchoolList("Illusion"); + SettingsHandler.getGame().addToSchoolList("Necromany"); +// final PlayerCharacter character = getCharacter(); + final Ability spellFocus = new Ability(); + + CampaignSourceEntry cse; + try + { + cse = new CampaignSourceEntry(new Campaign(), + new URI("file:/" + getClass().getName() + ".java")); + } + catch (URISyntaxException e) + { + throw new UnreachableError(e); + } + +// final String spellFocusStr = +// "Spell Focus TYPE:General DESC:See Text STACK:NO MULT:YES CHOOSE:SCHOOLS|1 BONUS:DC|SCHOOL.%LIST|1 SOURCEPAGE:Feats.rtf"; +// final FeatLoader featLoader = new FeatLoader(); +// featLoader.parseLine(Globals.getContext(), spellFocus, spellFocusStr, cse); +// character.addFeat(spellFocus, null); +// spellFocus.addAssociated("Evocation"); +// +// final Prerequisite preSpellFocus = new Prerequisite(); +// preSpellFocus.setKind("FEAT"); +// preSpellFocus.setKey("Spell Focus"); +// preSpellFocus.setSubKey("Conjuration"); +// preSpellFocus.setOperand("1"); +// preSpellFocus.setOperator(PrerequisiteOperator.EQ); +// +// final boolean passes = +// PrereqHandler.passes(preSpellFocus, character, null); +// assertFalse(passes); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2008-10-05 22:17:31
|
Revision: 7954 http://pcgen.svn.sourceforge.net/pcgen/?rev=7954&view=rev Author: jdempsey Date: 2008-10-05 22:17:25 +0000 (Sun, 05 Oct 2008) Log Message: ----------- Move java 1.6 files out of the code base temporarily Added Paths: ----------- Trunk/pcgen/code/inactive/ Trunk/pcgen/code/inactive/pcgen/ Trunk/pcgen/code/inactive/pcgen/base/ Trunk/pcgen/code/inactive/pcgen/base/term/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nu...@us...> - 2008-10-07 23:29:10
|
Revision: 7991 http://pcgen.svn.sourceforge.net/pcgen/?rev=7991&view=rev Author: nuance Date: 2008-10-07 23:29:02 +0000 (Tue, 07 Oct 2008) Log Message: ----------- Move the term evaluators into core. Move TermEvaulatorException into core. Remove java 1.6 functions. Debug some of the evaluators. Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/VariableProcessorPC.java Trunk/pcgen/code/src/java/pcgen/util/TermUtilities.java Trunk/pcgen/code/src/test/pcgen/util/TermUtilitiesTest.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/core/term/ Trunk/pcgen/code/src/java/pcgen/core/term/BaseEQTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/BasePCCountAbilitiesNatureTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/BasePCCountAbilitiesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/BasePCCountAbilitiesTypeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/BasePCTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/ConstantZeroTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQACCheckTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQBaseCostTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQCritMultTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQDamageDiceTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQDamageDieTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQEquipSizeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQHandsTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQRaceReachTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQRangeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQReachMultTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQReachTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQSizeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQSpellFailureTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EQWeightTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/EvaluatorFactory.java Trunk/pcgen/code/src/java/pcgen/core/term/PCACcheckTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCArmourACcheckTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCBABTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCBLTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCBaseSpellStatTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCLBeforeLevelTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCLTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCarriedWeightTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCasterLevelClassTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCasterLevelRaceTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCasterLevelTotalTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAbilitiesNatureAllTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAbilitiesNatureAutoTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAbilitiesNatureNormalTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAbilitiesNatureVirtualTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAbilitiesTypeNatureAllTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAbilitiesTypeNatureAutoTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAbilitiesTypeNatureVirtualTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAbilityNameTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountAttacksTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountChecksTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountClassesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountContainersTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountDomainsTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountEqTypeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountEquipmentTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountFollowerTypeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountFollowerTypeTransitiveTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountFollowersTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountLanguagesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountMiscCompanionsTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountMiscFundsTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountMiscMagicTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountMoveTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountNotesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountRaceSubTypesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSABTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSkillsTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSpellClassesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSpellRaceTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSpellTimesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSpellbookTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSpellsInbookTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSpellsKnownTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountSpellsLevelsInBookTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountStatsTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountTempBonusNamesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountTemplatesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountVisibleTemplatesTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCCountVisionTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCEncumberanceTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCEqTypeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCHDTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCHasClassTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCHasDeityTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCHasFeatTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCHeightTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCMaxCastableAnyTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCMaxCastableClassTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCMaxCastableDomainTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCMaxCastableSpellTypeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCModEquipTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCMoveBaseTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCMovementTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCProfACCheckTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCRaceSizeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSPellBaseStatScoreEvaluatorTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSPellBaseStatTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCScoreTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCShieldACcheckTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSizeIntEQTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSizeIntTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSizeModEvaluatorTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSizeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSkillRankTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSkillTotalTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSkillTypeTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCSpellLevelTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCStatBaseTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCStatModTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCStatTotalTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCTLTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCTotalWeightTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCVarDefinedTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCVerbatimTextTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/PCWeightTermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/TermEvaluator.java Trunk/pcgen/code/src/java/pcgen/core/term/TermEvaluatorBuilder.java Trunk/pcgen/code/src/java/pcgen/core/term/TermEvaluatorBuilderEQVar.java Trunk/pcgen/code/src/java/pcgen/core/term/TermEvaluatorBuilderPCStat.java Trunk/pcgen/code/src/java/pcgen/core/term/TermEvaluatorBuilderPCVar.java Trunk/pcgen/code/src/java/pcgen/core/term/TermEvaulatorException.java Trunk/pcgen/code/src/test/pcgen/core/term/ Trunk/pcgen/code/src/test/pcgen/core/term/EvaluatorFactoryTest.java Removed Paths: ------------- Trunk/pcgen/code/inactive/pcgen/base/term/BaseEQTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesNatureTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesTypeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/BasePCTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/ConstantZeroTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQACCheckTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQBaseCostTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQCritMultTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQDamageDiceTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQDamageDieTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQEquipSizeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQHandsTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQRaceReachTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQRangeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQReachMultTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQReachTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQSizeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQSpellFailureTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EQWeightTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/EvaluatorFactory.java Trunk/pcgen/code/inactive/pcgen/base/term/PCACcheckTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCArmourACcheckTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCBABTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCBLTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCBaseSpellStatTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCLBeforeLevelTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCLTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCarriedWeightTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCasterLevelClassTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCasterLevelRaceTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCasterLevelTotalTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAbilitiesNatureAllTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAbilitiesNatureAutoTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAbilitiesNatureNormalTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAbilitiesNatureVirtualTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAbilitiesTypeNatureAllTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAbilitiesTypeNatureAutoTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAbilitiesTypeNatureVirtualTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAbilityNameTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountAttacksTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountChecksTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountClassesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountContainersTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountDomainsTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountEquipmentTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountFollowerTypeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountFollowerTypeTransitiveTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountFollowersTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountLanguagesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountMiscCompanionsTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountMiscFundsTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountMiscMagicTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountMoveTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountNotesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountRaceSubTypesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSABTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSkillsTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSpellClassesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSpellRaceTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSpellTimesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSpellbookTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSpellsInbookTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSpellsKnownTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountSpellsLevelsInBookTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountStatsTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountTempBonusNamesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountTemplatesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountVisibleTemplatesTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCCountVisionTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCEncumberanceTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCEqTypeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCHDTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCHasClassTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCHasDeityTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCHasFeatTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCHeightTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCMaxCastableAnyTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCMaxCastableClassTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCMaxCastableDomainTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCMaxCastableSpellTypeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCModEquipTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCMoveBaseTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCMovementTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCProfACCheckTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCRaceSizeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCSPellBaseStatScoreEvaluatorTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCSPellBaseStatTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCScoreTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCShieldACcheckTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCSizeModEvaluatorTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCSizeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCSkillRankTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCSkillTotalTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCSkillTypeTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCSpellLevelTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCStatBaseTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCStatModTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCStatTotalTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCTLTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCTotalWeightTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCVarDefinedTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCVerbatimTextTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/PCWeightTermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/TermEvaluator.java Trunk/pcgen/code/inactive/pcgen/base/term/TermEvaluatorBuilder.java Trunk/pcgen/code/inactive/pcgen/base/term/TermEvaluatorBuilderEQVar.java Trunk/pcgen/code/inactive/pcgen/base/term/TermEvaluatorBuilderPCStat.java Trunk/pcgen/code/inactive/pcgen/base/term/TermEvaluatorBuilderPCVar.java Trunk/pcgen/code/inactive/pcgen/base/term-tests/ Trunk/pcgen/code/src/java/pcgen/base/term/TermEvaulatorException.java Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/BaseEQTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/BaseEQTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/BaseEQTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,65 +0,0 @@ -/** - * pcgen.base.term.BaseEQTermEvaluator.java - * Copyright 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03 October 2008 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.PlayerCharacter; -import pcgen.core.Equipment; -import pcgen.core.spell.Spell; - -public abstract class BaseEQTermEvaluator -{ - protected String originalText; - - public String evaluate(PlayerCharacter pc) { - return Float.toString(resolve(pc)); - } - - public Float resolve(PlayerCharacter pc) - { - return 0f; - } - - public Float resolve(PlayerCharacter pc, final Spell aSpell) { - return resolve(pc); - } - - public Float getDefault () - { - return 1f; - } - - public String getOriginal () - { - return originalText; - } - - public int getLength () - { - return originalText.length(); - } -} - Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesNatureTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesNatureTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesNatureTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,51 +0,0 @@ -/** - * pcgen.base.term.PCCountAbilitiesNatureBaseEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 09-Aug-2008 19:06:01 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import java.util.List; - -import pcgen.core.PlayerCharacter; -import pcgen.core.Ability; -import pcgen.core.spell.Spell; - -public abstract class BasePCCountAbilitiesNatureTermEvaluator - extends BasePCCountAbilitiesTermEvaluator -{ - protected boolean visible; - protected boolean hidden; - - public BasePCCountAbilitiesNatureTermEvaluator() - { - } - - public Float resolve(PlayerCharacter pc) - { - List<Ability> lAb = getAbilities(pc); - - return countVisibleAbilities(pc, lAb, visible, hidden); - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,118 +0,0 @@ -/** - * pcgen.base.term.PCCountFeatsBaseEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 09-Aug-2008 16:08:40 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import java.util.List; - -import pcgen.core.Ability; -import pcgen.core.PlayerCharacter; -import pcgen.core.AbilityCategory; -import pcgen.core.AssociationStore; -import pcgen.cdom.enumeration.ObjectKey; -import pcgen.util.enumeration.Visibility; - -public abstract class BasePCCountAbilitiesTermEvaluator extends BasePCTermEvaluator -{ - protected AbilityCategory abCat; - protected boolean visible; - protected boolean hidden; - - abstract List<Ability> getAbilities(PlayerCharacter pc); - - /** - * This function takes a list of feats and returns the number of visible, - * or hidden feats that are in the list The visible flag determines if - * the result should be the number of hidden feats, or the number of - * visible feats - * - * @param pc the Character with the abilities - * @param aList a list of the feats to look through. - * @param visible Count visible abilities - * @param hidden Count hidden abilities @return An int containing the number of feats in the list - * @return the number of matching abilities - */ - protected Float countVisibleAbilities( - AssociationStore pc, - final Iterable<Ability> aList, - final boolean visible, - final boolean hidden) - { - Float count = 0f; - - for (Ability ability : aList) - { - count += countVisibleAbility(pc, ability, visible, hidden, true); - } - - return count; - } - - /** - * Count the number of times the character has the ability. This can be - * limited to either hidden or visible Abilities, and can be limited to only - * counting once per ability rather than once per time taken (e.g. - * Weapon Specialisation in two weapons would count as 2 unless the onceOnly - * flag was true). - * - * @param pc the Character with the abilities - * @param ability The feat to be counted. - * @param visible Should it be counted if it is visible? - * @param hidden Should it be counted if it is hidden? - * @param onceOnly Should it be counted as one if was taken multiple times? - * @return The number of occurrences of the ability. - */ - protected Float countVisibleAbility( - AssociationStore pc, - final Ability ability, - final boolean visible, - final boolean hidden, - final boolean onceOnly) - { - Visibility v = ability.getSafe(ObjectKey.VISIBILITY); - - boolean abilityInvisibile = (v == Visibility.DISPLAY_ONLY) || - (v == Visibility.HIDDEN); - int count = 0; - - if (abilityInvisibile) - { - if (hidden) - { - count += (onceOnly) ? 1 : Math.max(1, pc.getSelectCorrectedAssociationCount(ability)); - } - } - else - { - if (visible) - { - count += (onceOnly) ? 1 : Math.max(1, pc.getSelectCorrectedAssociationCount(ability)); - } - } - - return (float) count; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesTypeTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesTypeTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/BasePCCountAbilitiesTypeTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,61 +0,0 @@ -/** - * pcgen.base.term.PCCountAbilitiesTypeBaseEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 09-Aug-2008 19:37:53 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import java.util.List; - -import pcgen.core.PlayerCharacter; -import pcgen.core.Ability; - -public abstract class BasePCCountAbilitiesTypeTermEvaluator extends BasePCCountAbilitiesTermEvaluator -{ - protected String[] types; - - public Float resolve(PlayerCharacter pc) - { - Float count = 0f; - - List<Ability> abilityList = getAbilities(pc); - - for ( Ability anAbility : abilityList ) - { - // for each feat, look to see if it has any of the required types. - for ( String type : types) - { - if (anAbility.isType(type)) - { - count += countVisibleAbility( - pc, anAbility, visible, hidden, false); - - break; - } - } - } - - return count; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/BasePCTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/BasePCTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/BasePCTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,68 +0,0 @@ -/** - * pcgen.base.term.BasePCTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 07-Aug-2008 20:49:05 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.PlayerCharacter; -import pcgen.core.Equipment; -import pcgen.core.spell.Spell; - -public abstract class BasePCTermEvaluator -{ - protected String originalText; - - public String evaluate(PlayerCharacter pc) { - return Float.toString(resolve(pc)); - } - - public abstract Float resolve(PlayerCharacter pc); - - public Float resolve(PlayerCharacter pc, final Spell aSpell) { - return resolve(pc); - } - - public Float resolve( - Equipment equipment, - boolean primary, - PlayerCharacter pc) { - return resolve(pc); - } - - public Float getDefault () - { - return 1.0f; - } - - public String getOriginal () - { - return originalText; - } - - public int getLength () - { - return originalText.length(); - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/ConstantZeroTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/ConstantZeroTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/ConstantZeroTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,51 +0,0 @@ -/** - * pcgen.base.term.ConstantZeroTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 22-Sep-2008 01:31:27 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.PlayerCharacter; - -public class ConstantZeroTermEvaluator - extends BasePCTermEvaluator implements TermEvaluator { - - public ConstantZeroTermEvaluator(String originalText) - { - this.originalText = originalText; - } - - public Float resolve(PlayerCharacter pc) { - return 0f; - } - - public boolean isSourceDependant() { - return false; - } - - public boolean isStatic() - { - return true; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQACCheckTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQACCheckTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQACCheckTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,58 +0,0 @@ -/** - * pcgen.base.term.EQACCheckTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:38:19 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.cdom.enumeration.IntegerKey; - -public class EQACCheckTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQACCheckTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) eq.getSafe(IntegerKey.AC_CHECK); - } - - public boolean isSourceDependant() - { - return false; - } - - public boolean isStatic() - { - return false; - } -} - Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQBaseCostTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQBaseCostTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQBaseCostTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,58 +0,0 @@ -/** - * pcgen.base.term.EQBaseCostTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 01:55:27 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.cdom.enumeration.ObjectKey; -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; - -public class EQBaseCostTermEvaluator - extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQBaseCostTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return eq.getSafe(ObjectKey.COST).floatValue(); - } - - public boolean isSourceDependant() - { - return false; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQCritMultTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQCritMultTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQCritMultTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,61 +0,0 @@ -/** - * pcgen.base.term.EQCritMultTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:14:17 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; - -public class EQCritMultTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQCritMultTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - if (primary) - { - return (float) eq.getCritMultiplier(); - } - - return (float) eq.getAltCritMultiplier(); - } - - public boolean isSourceDependant() - { - return false; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQDamageDiceTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQDamageDiceTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQDamageDiceTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,57 +0,0 @@ -/** - * pcgen.base.term.EQDamageDiceTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:23:47 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.core.RollInfo; - -public class EQDamageDiceTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQDamageDiceTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) new RollInfo(eq.getDamage(pc)).getTimes(); - } - - public boolean isSourceDependant() - { - return false; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQDamageDieTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQDamageDieTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQDamageDieTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,57 +0,0 @@ -/** - * pcgen.base.term.EQDamageDieTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:36:29 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.core.RollInfo; - -public class EQDamageDieTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQDamageDieTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) new RollInfo(eq.getDamage(pc)).getSides(); - } - - public boolean isSourceDependant() - { - return false; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQEquipSizeTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQEquipSizeTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQEquipSizeTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,56 +0,0 @@ -/** - * pcgen.base.term.EQEquipSizeTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:45:23 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; - -public class EQEquipSizeTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQEquipSizeTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return Float.valueOf(eq.getSize()); - } - - public boolean isSourceDependant() - { - return false; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQHandsTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQHandsTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQHandsTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,58 +0,0 @@ -/** - * pcgen.base.term.EQHandsTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:40:23 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.cdom.enumeration.IntegerKey; - -public class EQHandsTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQHandsTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) eq.getSafe(IntegerKey.SLOTS); - } - - public boolean isSourceDependant() - { - return false; - } - - public boolean isStatic() - { - return false; - } - -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQRaceReachTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQRaceReachTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQRaceReachTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,59 +0,0 @@ -/** - * pcgen.base.term.EQRaceReachTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:51:58 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; - -public class EQRaceReachTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - private final String source; - - public EQRaceReachTermEvaluator(String expressionString, String src) - { - this.originalText = expressionString; - this.source = src; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return pc.getVariableValue("REACH.VAL", source); - } - - public boolean isSourceDependant() - { - return true; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQRangeTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQRangeTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQRangeTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,57 +0,0 @@ -/** - * pcgen.base.term.EQRangeTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:57:13 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.cdom.enumeration.IntegerKey; - -public class EQRangeTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQRangeTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) eq.getSafe(IntegerKey.RANGE); - } - - public boolean isSourceDependant() - { - return true; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQReachMultTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQReachMultTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQReachMultTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,57 +0,0 @@ -/** - * pcgen.base.term.EQReachMultTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 03:01:55 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.cdom.enumeration.IntegerKey; - -public class EQReachMultTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQReachMultTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) eq.getSafe(IntegerKey.REACH_MULT); - } - - public boolean isSourceDependant() - { - return true; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQReachTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQReachTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQReachTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,56 +0,0 @@ -/** - * pcgen.base.term.EQReachTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:59:53 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.cdom.enumeration.IntegerKey; - -public class EQReachTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQReachTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) eq.getSafe(IntegerKey.REACH); - } - - public boolean isSourceDependant() - { - return true; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQSizeTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQSizeTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQSizeTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,57 +0,0 @@ -/** - * pcgen.base.term.EQSizeTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 03:03:04 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.cdom.enumeration.IntegerKey; - -public class EQSizeTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQSizeTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) eq.sizeInt(); - } - - public boolean isSourceDependant() - { - return true; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQSpellFailureTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQSpellFailureTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQSpellFailureTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,57 +0,0 @@ -/** - * pcgen.base.term.EQSpellFailureTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 02:42:03 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.cdom.enumeration.IntegerKey; - -public class EQSpellFailureTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQSpellFailureTermEvaluator(String expressionString) - { - this.originalText =expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - return (float) eq.getSafe(IntegerKey.SPELL_FAILURE); - } - - public boolean isSourceDependant() - { - return false; - } - - public boolean isStatic() - { - return false; - } -} Deleted: Trunk/pcgen/code/inactive/pcgen/base/term/EQWeightTermEvaluator.java =================================================================== --- Trunk/pcgen/code/inactive/pcgen/base/term/EQWeightTermEvaluator.java 2008-10-07 02:26:51 UTC (rev 7990) +++ Trunk/pcgen/code/inactive/pcgen/base/term/EQWeightTermEvaluator.java 2008-10-07 23:29:02 UTC (rev 7991) @@ -1,75 +0,0 @@ -/** - * pcgen.base.term.EQWeightTermEvaluator.java - * Copyright \xA9 2008 Andrew Wilson <nu...@us...>. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created 03-Oct-2008 03:10:04 - * - * Current Ver: $Revision:$ - * Last Editor: $Author:$ - * Last Edited: $Date:$ - * - */ - -package pcgen.base.term; - -import java.math.BigDecimal; - -import pcgen.core.Equipment; -import pcgen.core.PlayerCharacter; -import pcgen.cdom.enumeration.IntegerKey; - -public class EQWeightTermEvaluator extends BaseEQTermEvaluator implements TermEvaluator -{ - public EQWeightTermEvaluator(String expressionString) - { - this.originalText = expressionString; - } - - public Float resolve( - Equipment eq, - boolean primary, - PlayerCharacter pc) - { - if (eq.isCalculatingCost() && eq.isWeightAlreadyUsed()) - { - return 0f; - } - - BigDeci... [truncated message content] |
From: <th...@us...> - 2008-10-08 21:30:41
|
Revision: 7997 http://pcgen.svn.sourceforge.net/pcgen/?rev=7997&view=rev Author: thpr Date: 2008-10-08 21:30:31 +0000 (Wed, 08 Oct 2008) Log Message: ----------- finish dead code removal Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/choose/CCSkillListToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-08 21:27:27 UTC (rev 7996) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-08 21:30:31 UTC (rev 7997) @@ -2793,13 +2793,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${lstplugins.dir}/ChooseToken-CCSKILLLIST.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/choose/CCSkillListToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${lstplugins.dir}/ChooseToken-CSKILLS.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/choose/CCSkillListToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/choose/CCSkillListToken.java 2008-10-08 21:27:27 UTC (rev 7996) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/choose/CCSkillListToken.java 2008-10-08 21:30:31 UTC (rev 7997) @@ -1,79 +0,0 @@ -/* - * Copyright 2007 (C) Thomas Parker <th...@us...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package plugin.lsttokens.choose; - -import pcgen.core.PObject; -import pcgen.persistence.lst.ChooseLstToken; -import pcgen.util.Logging; - -public class CCSkillListToken implements ChooseLstToken -{ - - public boolean parse(PObject po, String prefix, String value) - { - if (value == null) - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " requires additional arguments"); - return false; - } - if (value.indexOf('|') != -1) - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments may not contain | : " + value); - return false; - } - if (value.indexOf('[') != -1) - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments may not contain [] : " + value); - return false; - } - if (value.charAt(0) == ',') - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments may not start with , : " + value); - return false; - } - if (value.charAt(value.length() - 1) == ',') - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments may not end with , : " + value); - return false; - } - if (value.indexOf(",,") != -1) - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments uses double separator ,, : " + value); - return false; - } - StringBuilder sb = new StringBuilder(); - if (prefix.length() > 0) - { - sb.append(prefix).append('|'); - } - sb.append(getTokenName()).append('|').append(value); - po.setChoiceString(sb.toString()); - return true; - } - - public String getTokenName() - { - return "CCSKILLLIST"; - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-10-10 23:47:16
|
Revision: 8029 http://pcgen.svn.sourceforge.net/pcgen/?rev=8029&view=rev Author: thpr Date: 2008-10-10 23:47:11 +0000 (Fri, 10 Oct 2008) Log Message: ----------- clean up SubstitutionClass loading to new token system Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubstitutionClassLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubstitutionClassLstToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/substitutionlevel/SubstitutionclassToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-10 23:19:11 UTC (rev 8028) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-10 23:47:11 UTC (rev 8029) @@ -4283,15 +4283,7 @@ <target name="jar-lst-substitutionlevel-plugins" depends="makeplugindirs" description="Build (Link) SubstitutionLevel Lst Token plugin jar files"> <!-- SubstitutionClass tokens: - SUBSTITUTIONCLASS --> - <jar jarfile="${lstplugins.dir}/SubstitutionLevelLstToken-SUBSTITUTIONCLASS.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/substitutionlevel/SubstitutionclassToken.class" /> - </patternset> - </fileset> - </jar> </target> <target name="jar-lst-template-plugins" depends="makeplugindirs" description="Build (Link) Weapon Prof Lst Token plugin jar files"> Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-10 23:19:11 UTC (rev 8028) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-10 23:47:11 UTC (rev 8029) @@ -77,17 +77,18 @@ if (lstLine.startsWith("SUBCLASS:") || lstLine.startsWith("SUBCLASSLEVEL:")) { + int tabLoc = lstLine.indexOf("\t"); SubClass subClass = null; if (lstLine.startsWith("SUBCLASS:")) { - if (lstLine.indexOf("\t") == -1) + if (tabLoc == -1) { Logging.errorPrint("Expected SUBCLASS to have " + "additional Tags in " + source.getURI() + " (e.g. COST is a required Tag in a SUBCLASS)"); } - final String n = lstLine.substring(9, lstLine.indexOf("\t")); + final String n = lstLine.substring(9, tabLoc); subClass = pcClass.getSubClassKeyed(n); if (subClass == null) @@ -121,30 +122,34 @@ if (lstLine.startsWith("SUBSTITUTIONCLASS:") || lstLine.startsWith("SUBSTITUTIONLEVEL:")) { + int tabLoc = lstLine.indexOf("\t"); SubstitutionClass substitutionClass = null; if (lstLine.startsWith("SUBSTITUTIONCLASS:")) { - if (lstLine.indexOf("\t") > 0) + String name; + String restOfLine; + if (tabLoc > 0) { - substitutionClass = - pcClass.getSubstitutionClassKeyed(lstLine - .substring(18, lstLine.indexOf("\t"))); + name = lstLine.substring(18, tabLoc); + restOfLine = lstLine.substring(tabLoc); } else { - substitutionClass = - pcClass.getSubstitutionClassKeyed(lstLine - .substring(18)); + name = lstLine.substring(18); + restOfLine = null; } + substitutionClass = pcClass.getSubstitutionClassKeyed(name); if (substitutionClass == null) { substitutionClass = new SubstitutionClass(); + substitutionClass.setName(name); substitutionClass.setSourceCampaign(source.getCampaign()); substitutionClass.setSourceURI(source.getURI()); pcClass.addSubstitutionClass(substitutionClass); } + parseLineIntoClass(context, substitutionClass, source, restOfLine); } else { @@ -162,12 +167,6 @@ } } - if (substitutionClass != null) - { - SubstitutionClassLoader.parseLine(context, substitutionClass, lstLine, - source); - } - return pcClass; } Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubstitutionClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubstitutionClassLoader.java 2008-10-10 23:19:11 UTC (rev 8028) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubstitutionClassLoader.java 2008-10-10 23:47:11 UTC (rev 8029) @@ -1,114 +0,0 @@ -/* - * SubstitutionClassLoader.java - * Copyright 2002 (C) Bryan McRoberts <mer...@ya...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on November 19, 2002, 10:29 PM - * - * $Id: SubstitutionClassLoader.java 197 2006-03-14 22:59:43 +0000 (Tue, 14 Mar 2006) nuance $ - */ -package pcgen.persistence.lst; - -import java.util.Map; -import java.util.StringTokenizer; - -import pcgen.core.PObject; -import pcgen.core.SubstitutionClass; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.SystemLoader; -import pcgen.rules.context.LoadContext; -import pcgen.util.Logging; - -/** - * - * @author David Rice <dav...@jc...> - * @version $Revision: 197 $ - */ -public final class SubstitutionClassLoader -{ - private static PCClassLoader classLoader = new PCClassLoader(); - - /** Creates a new instance of PCClassLoader */ - private SubstitutionClassLoader() - { - // TODO: Exception needs to be handled - } - - /** - * This method is static so it can be used by PCClassLoader. - * @param target - * @param lstLine - * @param source - * @return PObject - substitutionclass - * @throws PersistenceLayerException - * @see pcgen.persistence.lst.LstObjectFileLoader#parseLine(LoadContext, pcgen.core.PObject, java.lang.String, pcgen.persistence.lst.CampaignSourceEntry) - */ - public static PObject parseLine(LoadContext context, PObject target, String lstLine, - CampaignSourceEntry source) throws PersistenceLayerException - { - SubstitutionClass substitutionclass = (SubstitutionClass) target; - - if (substitutionclass == null) - { - return substitutionclass; - } - - if (!lstLine.startsWith("SUBSTITUTIONCLASS:")) - { - return substitutionclass; - } - - final StringTokenizer colToken = - new StringTokenizer(lstLine, SystemLoader.TAB_DELIM); - - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(SubstitutionClassLstToken.class); - while (colToken.hasMoreTokens()) - { - final String colString = colToken.nextToken().trim(); - final int idxColon = colString.indexOf(':'); - String key = ""; - try - { - key = colString.substring(0, idxColon); - } - catch (Exception e) - { - // TODO Handle Exception - } - SubstitutionClassLstToken token = - (SubstitutionClassLstToken) tokenMap.get(key); - - if (token != null) - { - final String value = colString.substring(idxColon + 1).trim(); - LstUtils.deprecationCheck(token, substitutionclass, value); - if (!token.parse(substitutionclass, value)) - { - Logging.errorPrint("Error parsing ability " - + substitutionclass.getDisplayName() + ':' - + source.getURI() + ':' + colString + "\""); - } - } - else - { - classLoader.parseLineIntoClass(context, substitutionclass, source, colString); - } - } - - return substitutionclass; - } -} Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubstitutionClassLstToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubstitutionClassLstToken.java 2008-10-10 23:19:11 UTC (rev 8028) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubstitutionClassLstToken.java 2008-10-10 23:47:11 UTC (rev 8029) @@ -1,45 +0,0 @@ -/* - * SubClassLstToken - * Copyright 2005 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:16 AM - * - * Current Ver: $Revision: 197 $ - * Last Editor: $Author: nuance $ - * Last Edited: $Date: 2006-03-14 22:59:43 +0000 (Tue, 14 Mar 2006) $ - * - */ -package pcgen.persistence.lst; - -import pcgen.core.SubstitutionClass; - -/** - * <code>SubClassLstToken</code> - * - * @author Devon Jones <sou...@ev...> - */ -public interface SubstitutionClassLstToken extends LstToken -{ - /** - * Parses an SubClass object - * @param subclass - * @param value - * @return true if parse OK - */ - public abstract boolean parse(SubstitutionClass substitutionclass, - String value); -} Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2008-10-10 23:19:11 UTC (rev 8028) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2008-10-10 23:47:11 UTC (rev 8029) @@ -50,7 +50,6 @@ tokenTypeList.add(RaceLstToken.class); tokenTypeList.add(SourceLstToken.class); tokenTypeList.add(SubClassLstToken.class); - tokenTypeList.add(SubstitutionClassLstToken.class); //Kits tokenTypeList.add(KitLstToken.class); tokenTypeList.add(BaseKitLstToken.class); Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/substitutionlevel/SubstitutionclassToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/substitutionlevel/SubstitutionclassToken.java 2008-10-10 23:19:11 UTC (rev 8028) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/substitutionlevel/SubstitutionclassToken.java 2008-10-10 23:47:11 UTC (rev 8029) @@ -1,22 +0,0 @@ -package plugin.lsttokens.substitutionlevel; - -import pcgen.core.SubstitutionClass; -import pcgen.persistence.lst.SubstitutionClassLstToken; - -/** - * Class deals with SUBSTITUTIONCLASS Token - */ -public class SubstitutionclassToken implements SubstitutionClassLstToken -{ - - public String getTokenName() - { - return "SUBSTITUTIONCLASS"; - } - - public boolean parse(SubstitutionClass substitutionclass, String value) - { - substitutionclass.setName(value); - return true; - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-10-11 00:26:33
|
Revision: 8031 http://pcgen.svn.sourceforge.net/pcgen/?rev=8031&view=rev Author: thpr Date: 2008-10-11 00:26:22 +0000 (Sat, 11 Oct 2008) Log Message: ----------- clean up SubClass loading to new token system CHOICE, COST, PROHIBITCOST Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/IntegerKey.java 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/SubClass.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/ChoiceToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/CostToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/ProhibitcostToken.java Removed Paths: ------------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubClassLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubClassLstToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclassToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-11 00:26:22 UTC (rev 8031) @@ -4249,7 +4249,7 @@ <target name="jar-lst-subclass-plugins" depends="makeplugindirs" description="Build (Link) SubClass Lst Token plugin jar files"> <!-- SubClass tokens: - CHOICE, COST, PROHIBITCOST, SUBCLASS + CHOICE, COST, PROHIBITCOST --> <jar jarfile="${lstplugins.dir}/SubClassLstToken-CHOICE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> @@ -4272,13 +4272,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${lstplugins.dir}/SubClassLstToken-SUBCLASS.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/subclass/SubclassToken.class" /> - </patternset> - </fileset> - </jar> </target> <target name="jar-lst-substitutionlevel-plugins" depends="makeplugindirs" description="Build (Link) SubstitutionLevel Lst Token plugin jar files"> Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/IntegerKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/IntegerKey.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/IntegerKey.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -60,6 +60,8 @@ public static final IntegerKey CASTING_THRESHOLD = getConstant("CASTING_THRESHOLD"); + public static final IntegerKey COST = getConstant("COST"); + public static final IntegerKey CRIT_MULT = getConstant("CRIT_MULT"); public static final IntegerKey CRIT_RANGE = getConstant("CRIT_RANGE"); @@ -99,6 +101,8 @@ public static final IntegerKey PP_COST = getConstant("PP_COST"); + public static final IntegerKey PROHIBIT_COST = getConstant("PROHIBIT_COST"); + public static final IntegerKey RANGE = getConstant("RANGE"); public static final IntegerKey CAMPAIGN_RANK = getConstant("CAMPAIGN_RANK", Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ObjectKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ObjectKey.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ObjectKey.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -53,6 +53,7 @@ import pcgen.core.SettingsHandler; import pcgen.core.ShieldProf; import pcgen.core.SizeAdjustment; +import pcgen.core.SpellProhibitor; import pcgen.core.WeaponProf; import pcgen.core.character.WieldCategory; import pcgen.core.spell.Spell; @@ -220,6 +221,8 @@ public static final ObjectKey<SpellResistance> SR = new ObjectKey<SpellResistance>(SpellResistance.NONE); + public static final ObjectKey<SpellProhibitor> CHOICE = new ObjectKey<SpellProhibitor>(null); + public static final ObjectKey<SizeAdjustment> BASESIZE; public static final ObjectKey<SizeAdjustment> SIZE; Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -3939,7 +3939,7 @@ final List<Object> columnList = new ArrayList<Object>(3); columnList.add(sc); - columnList.add(Integer.toString(sc.getCost())); + columnList.add(Integer.toString(sc.getSafe(IntegerKey.COST))); columnList.add(sc.getSupplementalDisplayInfo()); // If a subclass has already been selected, only add that one @@ -4079,14 +4079,14 @@ setSubClassKey(aPC, sc.getKeyName()); - if (sc.getChoice().length() > 0) + if (sc.get(ObjectKey.CHOICE) != null) { addSpecialty(sc.getChoice()); } columnNames.add("Specialty"); - if (sc.getCost() != 0) + if (sc.getSafe(IntegerKey.COST) != 0) { final ChooserInterface c1 = ChooserFactory.getChooserInstance(); c1.setTitle("School Choice (Prohibited)"); @@ -4095,7 +4095,7 @@ c1 .setMessageText("Make a selection. You must make as many selections " + "necessary to cover the cost of your previous selections."); - c1.setTotalChoicesAvail(sc.getCost()); + c1.setTotalChoicesAvail(sc.getSafe(IntegerKey.COST)); c1.setPoolFlag(true); c1.setCostColumnNumber(1); c1.setNegativeAllowed(true); Modified: Trunk/pcgen/code/src/java/pcgen/core/SubClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/SubClass.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/pcgen/core/SubClass.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -28,6 +28,7 @@ import pcgen.cdom.base.Category; import pcgen.cdom.enumeration.IntegerKey; import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.ObjectKey; import pcgen.persistence.lst.utils.DeferredLine; /** @@ -38,79 +39,22 @@ */ public final class SubClass extends PCClass implements CategorizedCDOMObject<SubClass> { - private String choice = null; - /** - * Has the prohibitCost value been set yet - * If not, it will default to the cost. - */ - private boolean prohibitCostSet = false; - - /** The cost to specialise in this sub-class. */ - private int cost = 0; - - /** The cost to have this sub-class as prohibited. */ - private int prohibitCost = 0; - - /** Constructor */ - public SubClass() - { - } - - /** - * Set the choice - * @param arg - */ - public void setChoice(final String arg) - { - choice = arg; - } - - /** * Get the choice * @return choice */ public String getChoice() { - if (choice == null) + SpellProhibitor sp = get(ObjectKey.CHOICE); + if (sp == null) { return ""; } - return choice; + return sp.getValueList().get(0); } /** - * Set the cost to specialise in this sub-class to the supplied value. - * - * @param arg The new cost of the sub-class. - */ - public void setCost(final int arg) - { - cost = arg; - } - - /** - * Get the cost to specialise in this sub-class. - * - * @return int The cost of the sub-class. - */ - public int getCost() - { - return cost; - } - - /** - * Sets the prohibitCost. - * @param prohibitCost The prohibitCost to set - */ - public void setProhibitCost(final int prohibitCost) - { - this.prohibitCost = prohibitCost; - this.prohibitCostSet = true; - } - - /** * Returns the prohibitCost. If the prohibited cost has not already * been set, then the sub-classes cost will be returned. This preserves * the previous behaviour where the prohibited cost and cost were the same. @@ -119,11 +63,12 @@ */ public int getProhibitCost() { - if (prohibitCostSet) + Integer prohib = get(IntegerKey.PROHIBIT_COST); + if (prohib != null) { - return prohibitCost; + return prohib; } - return cost; + return getSafe(IntegerKey.COST); } /** Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -77,11 +77,11 @@ if (lstLine.startsWith("SUBCLASS:") || lstLine.startsWith("SUBCLASSLEVEL:")) { - int tabLoc = lstLine.indexOf("\t"); SubClass subClass = null; if (lstLine.startsWith("SUBCLASS:")) { + int tabLoc = lstLine.indexOf("\t"); if (tabLoc == -1) { Logging.errorPrint("Expected SUBCLASS to have " @@ -89,15 +89,18 @@ + " (e.g. COST is a required Tag in a SUBCLASS)"); } final String n = lstLine.substring(9, tabLoc); + String restOfLine = lstLine.substring(tabLoc); subClass = pcClass.getSubClassKeyed(n); if (subClass == null) { subClass = new SubClass(); + subClass.setName(n); subClass.setSourceCampaign(source.getCampaign()); subClass.setSourceURI(source.getURI()); pcClass.addSubClass(subClass); } + parseLineIntoClass(context, subClass, source, restOfLine); } else { @@ -111,22 +114,17 @@ } } - if (subClass != null) - { - SubClassLoader.parseLine(context, subClass, lstLine, source); - } - return pcClass; } if (lstLine.startsWith("SUBSTITUTIONCLASS:") || lstLine.startsWith("SUBSTITUTIONLEVEL:")) { - int tabLoc = lstLine.indexOf("\t"); SubstitutionClass substitutionClass = null; if (lstLine.startsWith("SUBSTITUTIONCLASS:")) { + int tabLoc = lstLine.indexOf("\t"); String name; String restOfLine; if (tabLoc > 0) Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubClassLoader.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubClassLoader.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -1,113 +0,0 @@ -/* - * SubClassLoader.java - * Copyright 2002 (C) Bryan McRoberts <mer...@ya...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on November 19, 2002, 10:29 PM - * - * $Id$ - */ -package pcgen.persistence.lst; - -import java.util.Map; -import java.util.StringTokenizer; - -import pcgen.core.PObject; -import pcgen.core.SubClass; -import pcgen.persistence.PersistenceLayerException; -import pcgen.persistence.SystemLoader; -import pcgen.rules.context.LoadContext; -import pcgen.util.Logging; - -/** - * - * @author David Rice <dav...@jc...> - * @version $Revision$ - */ -public final class SubClassLoader -{ - private static PCClassLoader classLoader = new PCClassLoader(); - - /** Creates a new instance of PCClassLoader */ - private SubClassLoader() - { - // TODO: Exception needs to be handled - } - - /** - * This method is static so it can be used by PCClassLoader. - * @param target - * @param lstLine - * @param source - * @return PObject - subclass - * @throws PersistenceLayerException - * @see pcgen.persistence.lst.LstObjectFileLoader#parseLine(LoadContext, pcgen.core.PObject, java.lang.String, pcgen.persistence.lst.CampaignSourceEntry) - */ - public static PObject parseLine(LoadContext context, PObject target, String lstLine, - CampaignSourceEntry source) throws PersistenceLayerException - { - SubClass subclass = (SubClass) target; - - if (subclass == null) - { - return subclass; - } - - if (!lstLine.startsWith("SUBCLASS:")) - { - return subclass; - } - - final StringTokenizer colToken = - new StringTokenizer(lstLine, SystemLoader.TAB_DELIM); - - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(SubClassLstToken.class); - while (colToken.hasMoreTokens()) - { - final String colString = colToken.nextToken().trim(); - final int idxColon = colString.indexOf(':'); - String key = ""; - try - { - key = colString.substring(0, idxColon); - } - catch (Exception e) - { - // TODO Handle Exception - } - SubClassLstToken token = (SubClassLstToken) tokenMap.get(key); - - if (token != null) - { - final String value = colString.substring(idxColon + 1).trim(); - LstUtils.deprecationCheck(token, subclass, value); - if (!token.parse(subclass, value)) - { - Logging.errorPrint("Error parsing ability " - + subclass.getDisplayName() + ':' + source.getURI() - + ':' + colString + "\""); - } - } - else - { - classLoader.parseLineIntoClass(context, subclass, source, colString); - } - } - - return subclass; - } -} Deleted: Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubClassLstToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubClassLstToken.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/SubClassLstToken.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -1,44 +0,0 @@ -/* - * SubClassLstToken - * Copyright 2005 (C) Devon Jones <sou...@ev...> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Created on September 2, 2002, 8:16 AM - * - * Current Ver: $Revision$ - * Last Editor: $Author$ - * Last Edited: $Date$ - * - */ -package pcgen.persistence.lst; - -import pcgen.core.SubClass; - -/** - * <code>SubClassLstToken</code> - * - * @author Devon Jones <sou...@ev...> - */ -public interface SubClassLstToken extends LstToken -{ - /** - * Parses an SubClass object - * @param subclass - * @param value - * @return true if parse OK - */ - public abstract boolean parse(SubClass subclass, String value); -} Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -49,7 +49,6 @@ tokenTypeList.add(EquipmentModifierLstToken.class); tokenTypeList.add(RaceLstToken.class); tokenTypeList.add(SourceLstToken.class); - tokenTypeList.add(SubClassLstToken.class); //Kits tokenTypeList.add(KitLstToken.class); tokenTypeList.add(BaseKitLstToken.class); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/ChoiceToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/ChoiceToken.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/ChoiceToken.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -1,50 +1,142 @@ package plugin.lsttokens.subclass; +import java.util.Arrays; +import java.util.Collection; +import java.util.TreeSet; + +import pcgen.base.lang.StringUtil; import pcgen.cdom.base.Constants; +import pcgen.cdom.enumeration.ObjectKey; +import pcgen.core.PCClass; +import pcgen.core.SpellProhibitor; import pcgen.core.SubClass; -import pcgen.persistence.lst.SubClassLstToken; +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.ProhibitedSpellType; /** * Class deals with CHOICE Token */ -public class ChoiceToken implements SubClassLstToken +public class ChoiceToken extends AbstractToken implements + CDOMPrimaryToken<SubClass> { + @Override public String getTokenName() { return "CHOICE"; } - public boolean parse(SubClass subclass, String value) + public boolean parse(LoadContext context, SubClass pcc, String value) { - int pipeLoc = value.indexOf(Constants.PIPE); + SpellProhibitor sp = subParse(context, pcc, value); + if (sp == null) + { + return false; + } + context.getObjectContext().put(pcc, ObjectKey.CHOICE, sp); + return true; + } + + public SpellProhibitor subParse(LoadContext context, SubClass pcc, + String value) + { + if (isEmpty(value) || hasIllegalSeparator('|', value)) + { + return null; + } + + int pipeLoc = value.indexOf('|'); if (pipeLoc == -1) { - Logging.errorPrint(getTokenName() + " uses a deprecated format: " - + value + "\n " - + "New format must be type|value, e.g. SCHOOL|Abjuration"); - subclass.setChoice(value); - return true; + Logging.errorPrint(getTokenName() + + " has no | separator for arguments: " + value); + return null; } - if (pipeLoc != value.lastIndexOf(Constants.PIPE)) + + if (value.lastIndexOf('|') != pipeLoc) { - Logging.errorPrint(getTokenName() + " has invalid arguments: " - + value + "\n cannot have two | characters"); - return false; + Logging.errorPrint(getTokenName() + + " has more than two | separated arguments: " + value); + return null; } - String type = value.substring(0, pipeLoc); - if ("SCHOOL".equals(type) || "SUBSCHOOL".equals(type) - || "DESCRIPTOR".equals(type)) + + String pstString = value.substring(0, pipeLoc); + ProhibitedSpellType type; + + try { - // Unfortunately, in 5.14, we have no way of validating that the - // input - // is correct - subclass.setChoice(value.substring(pipeLoc + 1)); - return true; + type = ProhibitedSpellType.valueOf(pstString); } - Logging - .errorPrint(getTokenName() + " did not understand type: " + type); - return false; + catch (IllegalArgumentException e) + { + Logging + .errorPrint(getTokenName() + + " encountered an invalid Prohibited Spell Type: " + + value); + Logging.errorPrint(" Legal values are: " + + StringUtil.join(Arrays.asList(ProhibitedSpellType + .values()), ", ")); + return null; + } + if (type.equals(ProhibitedSpellType.SCHOOL) + || type.equals(ProhibitedSpellType.SUBSCHOOL) + || type.equals(ProhibitedSpellType.DESCRIPTOR)) + { + SpellProhibitor spellProb = typeSafeParse(context, pcc, type, value + .substring(pipeLoc + 1)); + if (spellProb == null) + { + Logging.errorPrint(" entire token value was: " + value); + return null; + } + return spellProb; + } + + Logging.errorPrint("Invalid TYPE in " + getTokenName() + ": " + + pstString); + return null; } + + private SpellProhibitor typeSafeParse(LoadContext context, PCClass pcc, + ProhibitedSpellType type, String args) + { + SpellProhibitor spellProb = new SpellProhibitor(); + spellProb.setType(type); + if (args.length() == 0) + { + Logging.errorPrint(getTokenName() + " " + type + + " has no arguments"); + return null; + } + spellProb.addValue(args); + return spellProb; + } + + public String[] unparse(LoadContext context, SubClass pcc) + { + SpellProhibitor sp = context.getObjectContext().getObject(pcc, + ObjectKey.CHOICE); + if (sp == null) + { + // Zero indicates no Token present + return null; + } + StringBuilder sb = new StringBuilder(); + ProhibitedSpellType pst = sp.getType(); + sb.append(pst.toString().toUpperCase()); + sb.append('|'); + Collection<String> valueSet = sp.getValueList(); + sb.append(StringUtil + .join(new TreeSet<String>(valueSet), Constants.PIPE)); + return new String[] { sb.toString() }; + } + + public Class<SubClass> getTokenClass() + { + return SubClass.class; + } + } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/CostToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/CostToken.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/CostToken.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -1,12 +1,16 @@ package plugin.lsttokens.subclass; +import pcgen.cdom.enumeration.IntegerKey; import pcgen.core.SubClass; -import pcgen.persistence.lst.SubClassLstToken; +import pcgen.persistence.PersistenceLayerException; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.util.Logging; /** * Class deals with COST Token */ -public class CostToken implements SubClassLstToken +public class CostToken implements CDOMPrimaryToken<SubClass> { public String getTokenName() @@ -14,16 +18,47 @@ return "COST"; } - public boolean parse(SubClass subclass, String value) + public boolean parse(LoadContext context, SubClass sc, String value) + throws PersistenceLayerException { try { - subclass.setCost(Integer.parseInt(value)); + Integer cost = Integer.valueOf(value); + if (cost.intValue() < 0) + { + Logging.errorPrint(getTokenName() + " must be an integer >= 0"); + return false; + } + context.getObjectContext().put(sc, IntegerKey.COST, cost); return true; } catch (NumberFormatException nfe) { + Logging.errorPrint(getTokenName() + + " expected an integer. Tag must be of the form: " + + getTokenName() + ":<int>"); return false; } } + + public String[] unparse(LoadContext context, SubClass sc) + { + Integer cost = context.getObjectContext().getInteger(sc, + IntegerKey.COST); + if (cost == null) + { + return null; + } + if (cost.intValue() < 0) + { + context.addWriteMessage(getTokenName() + " must be an integer > 0"); + return null; + } + return new String[] { cost.toString() }; + } + + public Class<SubClass> getTokenClass() + { + return SubClass.class; + } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/ProhibitcostToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/ProhibitcostToken.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/ProhibitcostToken.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -1,12 +1,16 @@ package plugin.lsttokens.subclass; +import pcgen.cdom.enumeration.IntegerKey; import pcgen.core.SubClass; -import pcgen.persistence.lst.SubClassLstToken; +import pcgen.persistence.PersistenceLayerException; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.util.Logging; /** * Class deals with PROHIBITCOST Token */ -public class ProhibitcostToken implements SubClassLstToken +public class ProhibitcostToken implements CDOMPrimaryToken<SubClass> { public String getTokenName() @@ -14,16 +18,47 @@ return "PROHIBITCOST"; } - public boolean parse(SubClass subclass, String value) + public boolean parse(LoadContext context, SubClass sc, String value) + throws PersistenceLayerException { try { - subclass.setProhibitCost(Integer.parseInt(value)); + Integer cost = Integer.valueOf(value); + if (cost.intValue() < 0) + { + Logging.errorPrint(getTokenName() + " must be an integer >= 0"); + return false; + } + context.getObjectContext().put(sc, IntegerKey.PROHIBIT_COST, cost); return true; } catch (NumberFormatException nfe) { + Logging.errorPrint(getTokenName() + + " expected an integer. Tag must be of the form: " + + getTokenName() + ":<int>"); return false; } } + + public String[] unparse(LoadContext context, SubClass sc) + { + Integer cost = context.getObjectContext().getInteger(sc, + IntegerKey.PROHIBIT_COST); + if (cost == null) + { + return null; + } + if (cost.intValue() < 0) + { + context.addWriteMessage(getTokenName() + " must be an integer > 0"); + return null; + } + return new String[] { cost.toString() }; + } + + public Class<SubClass> getTokenClass() + { + return SubClass.class; + } } Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclassToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclassToken.java 2008-10-11 00:16:55 UTC (rev 8030) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/subclass/SubclassToken.java 2008-10-11 00:26:22 UTC (rev 8031) @@ -1,22 +0,0 @@ -package plugin.lsttokens.subclass; - -import pcgen.core.SubClass; -import pcgen.persistence.lst.SubClassLstToken; - -/** - * Class deals with SUBCLASSLEVEL Token - */ -public class SubclassToken implements SubClassLstToken -{ - - public String getTokenName() - { - return "SUBCLASS"; - } - - public boolean parse(SubClass subclass, String value) - { - subclass.setName(value); - return true; - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-10-16 00:18:09
|
Revision: 8091 http://pcgen.svn.sourceforge.net/pcgen/?rev=8091&view=rev Author: thpr Date: 2008-10-16 00:18:07 +0000 (Thu, 16 Oct 2008) Log Message: ----------- dead code removal Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java Trunk/pcgen/code/src/java/pcgen/core/Campaign.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ClassskillToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ClassspellToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ReqskillToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-16 00:10:38 UTC (rev 8090) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-16 00:18:07 UTC (rev 8091) @@ -2452,20 +2452,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${lstplugins.dir}/CampaignLstToken-CLASSSKILL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/campaign/ClassskillToken.class" /> - </patternset> - </fileset> - </jar> - <jar jarfile="${lstplugins.dir}/CampaignLstToken-CLASSSPELL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/campaign/ClassspellToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${lstplugins.dir}/CampaignLstToken-CLASS.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> @@ -2683,13 +2669,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${lstplugins.dir}/CampaignLstToken-REQSKILL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/campaign/ReqskillToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${lstplugins.dir}/CampaignLstToken-SETTING.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-10-16 00:10:38 UTC (rev 8090) +++ Trunk/pcgen/code/src/java/pcgen/cdom/enumeration/ListKey.java 2008-10-16 00:18:07 UTC (rev 8091) @@ -99,10 +99,6 @@ public static final ListKey<CampaignSourceEntry> FILE_BIO_SET = new ListKey<CampaignSourceEntry>(); /** FILE_CLASS - a ListKey */ public static final ListKey<CampaignSourceEntry> FILE_CLASS = new ListKey<CampaignSourceEntry>(); - /** FILE_CLASS_SKILL - a ListKey */ - public static final ListKey<CampaignSourceEntry> FILE_CLASS_SKILL = new ListKey<CampaignSourceEntry>(); - /** FILE_CLASS_SPELL - a ListKey */ - public static final ListKey<CampaignSourceEntry> FILE_CLASS_SPELL = new ListKey<CampaignSourceEntry>(); /** FILE_COMPANION_MOD - a ListKey */ public static final ListKey<CampaignSourceEntry> FILE_COMPANION_MOD = new ListKey<CampaignSourceEntry>(); /** FILE_COVER - a ListKey */ @@ -129,8 +125,6 @@ public static final ListKey<URI> FILE_PCC = new ListKey<URI>(); /** FILE_RACE - a ListKey */ public static final ListKey<CampaignSourceEntry> FILE_RACE = new ListKey<CampaignSourceEntry>(); - /** FILE_REQ_SKILL - a ListKey */ - public static final ListKey<String> FILE_REQ_SKILL = new ListKey<String>(); /** FILE_SKILL - a ListKey */ public static final ListKey<CampaignSourceEntry> FILE_SKILL = new ListKey<CampaignSourceEntry>(); /** FILE_SPELL - a ListKey */ Modified: Trunk/pcgen/code/src/java/pcgen/core/Campaign.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Campaign.java 2008-10-16 00:10:38 UTC (rev 8090) +++ Trunk/pcgen/code/src/java/pcgen/core/Campaign.java 2008-10-16 00:18:07 UTC (rev 8091) @@ -117,24 +117,6 @@ * * @param files */ - public void addAllClassSkillFiles(final List<CampaignSourceEntry> files) - { - addAllToListFor(ListKey.FILE_CLASS_SKILL, files); - } - - /** - * - * @param files - */ - public void addAllClassSpellFiles(final List<CampaignSourceEntry> files) - { - addAllToListFor(ListKey.FILE_CLASS_SPELL, files); - } - - /** - * - * @param files - */ public void addAllCompanionModFiles(final List<CampaignSourceEntry> files) { addAllToListFor(ListKey.FILE_COMPANION_MOD, files); @@ -252,15 +234,6 @@ * * @param files */ - public void addAllReqSkillFiles(final List<String> files) - { - addAllToListFor(ListKey.FILE_REQ_SKILL, files); - } - - /** - * - * @param files - */ public void addAllSkillFiles(final List<CampaignSourceEntry> files) { addAllToListFor(ListKey.FILE_SKILL, files); @@ -353,24 +326,6 @@ * * @param file */ - public void addClassSkillFile(final CampaignSourceEntry file) - { - addToListFor(ListKey.FILE_CLASS_SKILL, file); - } - - /** - * - * @param file - */ - public void addClassSpellFile(final CampaignSourceEntry file) - { - addToListFor(ListKey.FILE_CLASS_SPELL, file); - } - - /** - * - * @param file - */ public void addCompanionModFile(final CampaignSourceEntry file) { addToListFor(ListKey.FILE_COMPANION_MOD, file); @@ -533,15 +488,6 @@ } /** - * - * @param file - */ - public void addReqSkillFile(final String file) - { - addToListFor(ListKey.FILE_REQ_SKILL, file); - } - - /** * Add section 15 info * @param section15 */ @@ -658,23 +604,6 @@ } /** - * Returns the classSkillFileList. - * @return List - */ - public List<CampaignSourceEntry> getClassSkillFiles() - { - return getSafeListFor(ListKey.FILE_CLASS_SKILL); - } - - /** - * Returns the classSpellFileList. - * @return List - */ - public List<CampaignSourceEntry> getClassSpellFiles() - { - return getSafeListFor(ListKey.FILE_CLASS_SPELL); - } - /** * Returns the companionmodFileList. * @return List */ @@ -938,15 +867,6 @@ } /** - * Returns the reqSkillList. - * @return List - */ - public List<String> getReqSkillFiles() - { - return getSafeListFor(ListKey.FILE_REQ_SKILL); - } - - /** * Get section 15 as a List * @return section 15 */ Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignLoader.java 2008-10-16 00:10:38 UTC (rev 8090) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/CampaignLoader.java 2008-10-16 00:18:07 UTC (rev 8091) @@ -190,11 +190,8 @@ baseCampaign.addAllShieldProfFiles(subCampaign.getShieldProfFiles()); baseCampaign.addAllWeaponProfFiles(subCampaign.getWeaponProfFiles()); baseCampaign.addAllEquipFiles(subCampaign.getEquipFiles()); - baseCampaign.addAllClassSkillFiles(subCampaign.getClassSkillFiles()); - baseCampaign.addAllClassSpellFiles(subCampaign.getClassSpellFiles()); baseCampaign.addAllSpellFiles(subCampaign.getSpellFiles()); baseCampaign.addAllLanguageFiles(subCampaign.getLanguageFiles()); - baseCampaign.addAllReqSkillFiles(subCampaign.getReqSkillFiles()); baseCampaign.addAllTemplateFiles(subCampaign.getTemplateFiles()); baseCampaign.addAllEquipModFiles(subCampaign.getEquipModFiles()); baseCampaign.addAllKitFiles(subCampaign.getKitFiles()); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2008-10-16 00:10:38 UTC (rev 8090) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/LstSystemLoader.java 2008-10-16 00:18:07 UTC (rev 8091) @@ -187,10 +187,6 @@ new HashMap<String, List<URI>>(); private final List<CampaignSourceEntry> classFileList = new ArrayList<CampaignSourceEntry>(); - private final List<CampaignSourceEntry> classSkillFileList = - new ArrayList<CampaignSourceEntry>(); - private final List<CampaignSourceEntry> classSpellFileList = - new ArrayList<CampaignSourceEntry>(); private final List<CampaignSourceEntry> companionmodFileList = new ArrayList<CampaignSourceEntry>(); private final List<CampaignSourceEntry> deityFileList = @@ -217,7 +213,6 @@ private final List<CampaignSourceEntry> raceFileList = new ArrayList<CampaignSourceEntry>(); - private final List<String> reqSkillFileList = new ArrayList<String>(); private final List<CampaignSourceEntry> skillFileList = new ArrayList<CampaignSourceEntry>(); private final List<CampaignSourceEntry> spellFileList = @@ -603,8 +598,6 @@ int count = bioSetFileList.size(); count += abilityCategoryFileList.size(); count += classFileList.size(); - count += classSkillFileList.size(); - count += classSpellFileList.size(); count += companionmodFileList.size(); count += deityFileList.size(); count += domainFileList.size(); @@ -929,11 +922,8 @@ armorProfFileList.addAll(aCamp.getArmorProfFiles()); shieldProfFileList.addAll(aCamp.getShieldProfFiles()); equipmentFileList.addAll(aCamp.getEquipFiles()); - classSkillFileList.addAll(aCamp.getClassSkillFiles()); - classSpellFileList.addAll(aCamp.getClassSpellFiles()); spellFileList.addAll(aCamp.getSpellFiles()); languageFileList.addAll(aCamp.getLanguageFiles()); - reqSkillFileList.addAll(aCamp.getReqSkillFiles()); templateFileList.addAll(aCamp.getTemplateFiles()); equipmodFileList.addAll(aCamp.getEquipModFiles()); kitFileList.addAll(aCamp.getKitFiles()); @@ -1384,11 +1374,8 @@ armorProfFileList.removeAll(lstExcludeFiles); shieldProfFileList.removeAll(lstExcludeFiles); equipmentFileList.removeAll(lstExcludeFiles); - classSkillFileList.removeAll(lstExcludeFiles); - classSpellFileList.removeAll(lstExcludeFiles); spellFileList.removeAll(lstExcludeFiles); languageFileList.removeAll(lstExcludeFiles); - reqSkillFileList.removeAll(lstExcludeFiles); templateFileList.removeAll(lstExcludeFiles); equipmodFileList.removeAll(lstExcludeFiles); kitFileList.removeAll(lstExcludeFiles); @@ -1416,10 +1403,7 @@ armorProfFileList.clear(); shieldProfFileList.clear(); equipmentFileList.clear(); - classSkillFileList.clear(); - classSpellFileList.clear(); spellFileList.clear(); - reqSkillFileList.clear(); languageFileList.clear(); equipmodFileList.clear(); kitFileList.clear(); Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ClassskillToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ClassskillToken.java 2008-10-16 00:10:38 UTC (rev 8090) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ClassskillToken.java 2008-10-16 00:18:07 UTC (rev 8091) @@ -1,27 +0,0 @@ -package plugin.lsttokens.campaign; - -import java.net.URI; - -import pcgen.core.Campaign; -import pcgen.persistence.lst.CampaignLstToken; -import pcgen.persistence.lst.CampaignSourceEntry; - -/** - * Class deals with CLASSSKILL Token - */ -public class ClassskillToken implements CampaignLstToken -{ - - public String getTokenName() - { - return "CLASSSKILL"; - } - - public boolean parse(Campaign campaign, String value, URI sourceUri) - { - campaign.addLine("CLASSSKILL:" + value); - campaign.addClassSkillFile(CampaignSourceEntry.getNewCSE(campaign, - sourceUri, value)); - return true; - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ClassspellToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ClassspellToken.java 2008-10-16 00:10:38 UTC (rev 8090) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ClassspellToken.java 2008-10-16 00:18:07 UTC (rev 8091) @@ -1,27 +0,0 @@ -package plugin.lsttokens.campaign; - -import java.net.URI; - -import pcgen.core.Campaign; -import pcgen.persistence.lst.CampaignLstToken; -import pcgen.persistence.lst.CampaignSourceEntry; - -/** - * Class deals with CLASSSPELL Token - */ -public class ClassspellToken implements CampaignLstToken -{ - - public String getTokenName() - { - return "CLASSSPELL"; - } - - public boolean parse(Campaign campaign, String value, URI sourceUri) - { - campaign.addLine("CLASSSPELL:" + value); - campaign.addClassSpellFile(CampaignSourceEntry.getNewCSE(campaign, - sourceUri, value)); - return true; - } -} Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ReqskillToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ReqskillToken.java 2008-10-16 00:10:38 UTC (rev 8090) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/campaign/ReqskillToken.java 2008-10-16 00:18:07 UTC (rev 8091) @@ -1,29 +0,0 @@ -package plugin.lsttokens.campaign; - -import java.net.URI; - -import pcgen.core.Campaign; -import pcgen.persistence.lst.CampaignLstToken; - -/** - * Class deals with REQSKILL Token - */ -public class ReqskillToken implements CampaignLstToken -{ - - public String getTokenName() - { - return "REQSKILL"; - } - - public boolean parse(Campaign campaign, String value, URI sourceUri) - { - campaign.addLine("REQSKILL:" + value); - String[] names = value.split("\\|"); - for (int i = 0; i < names.length; i++) - { - campaign.getReqSkillFiles().add(names[i]); - } - return true; - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jde...@us...> - 2008-10-18 12:09:19
|
Revision: 8108 http://pcgen.svn.sourceforge.net/pcgen/?rev=8108&view=rev Author: jdempsey Date: 2008-10-18 12:09:14 +0000 (Sat, 18 Oct 2008) Log Message: ----------- FReq: CHOOSE:ABILITY needs to be usable in abilities Issue#: 2034599 Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/core/chooser/AbilityChoiceManager.java Trunk/pcgen/code/src/java/plugin/lsttokens/choose/AbilityToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-17 21:17:10 UTC (rev 8107) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-18 12:09:14 UTC (rev 8108) @@ -2758,6 +2758,13 @@ <target name="jar-lst-choose-plugins" depends="makeplugindirs" description="Build (Link) Choose Lst Token plugin jar files"> <!-- Choose tokens--> + <jar jarfile="${lstplugins.dir}/ChooseToken-ABILITY.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/choose/AbilityToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${lstplugins.dir}/ChooseToken-ARMORPROF.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Added: Trunk/pcgen/code/src/java/pcgen/core/chooser/AbilityChoiceManager.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/AbilityChoiceManager.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/AbilityChoiceManager.java 2008-10-18 12:09:14 UTC (rev 8108) @@ -0,0 +1,269 @@ +/* + * AbilityChoiceManager.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 18/10/2008 22:22:14 + * + * $Id: $ + */ +package pcgen.core.chooser; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.StringTokenizer; + +import pcgen.cdom.enumeration.ObjectKey; +import pcgen.core.Ability; +import pcgen.core.AbilityCategory; +import pcgen.core.Categorisable; +import pcgen.core.Globals; +import pcgen.core.PObject; +import pcgen.core.PlayerCharacter; +import pcgen.core.SettingsHandler; +import pcgen.core.prereq.PrereqHandler; +import pcgen.util.Logging; + +/** + * The Class <code>AbilityChoiceManager</code> is responsible for setting up the + * list of available values in an ABILITY chooser. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class AbilityChoiceManager extends AbstractBasicStringChoiceManager +{ + + /** + * Make a new Ability chooser. + * + * @param aPObject the object providing the choice + * @param choiceString the choice string + * @param aPC the character the choice is being made for + */ + public AbilityChoiceManager(PObject aPObject, String choiceString, + PlayerCharacter aPC) + { + super(aPObject, choiceString, aPC); + setTitle("Ability Choice"); + List<String> list = getChoiceList(); + if (list == null || list.size() < 2) + { + throw new IllegalArgumentException( + "Choice List for AbilityChoiceManager must be at least 2 items"); + } + } + + /** + * Parse the Choice string and build a list of available choices. + * + * @param aPc The character being processed. + * @param availableList The list to be populated with the possible choices. + * @param selectedList The list to be populated with the choices that have already been selected. + */ + @Override + public void getChoices(final PlayerCharacter aPc, + final List<String> availableList, final List<String> selectedList) + { + String category = null; + for (String aString : getChoiceList()) + { + if (category == null) + { + category = aString; + continue; + } + if (aString.startsWith("TYPE=") || aString.startsWith("TYPE.")) + { + final String featType = aString.substring(5); + + for (Iterator<? extends Categorisable> it = + Globals.getAbilityKeyIterator(category); it.hasNext();) + { + final Ability ability = (Ability) it.next(); + + if (ability.isType(featType) + && aPc.canSelectAbility(ability) + && !availableList.contains(ability.toString())) + { + availableList.add(ability.toString()); + } + } + } + else + { + final StringTokenizer bTok = new StringTokenizer(aString, ","); + while (bTok.hasMoreElements()) + { + String tokString = (String) bTok.nextElement(); + + addChoiceToAvailable(aPc, availableList, category, + tokString.trim()); + } + } + } + selectedList.addAll(aPc.getAssociationList(pobject)); + setPreChooserChoices(selectedList.size()); + } + + /** + * Add a single ability to the list of available ability names. + * + * @param aPc The character being processed. + * @param availableList The list of feats to be offered + * @param categoryKey the category key + * @param abilityKey the ability key + */ + private void addChoiceToAvailable(final PlayerCharacter aPc, + final List<String> availableList, String categoryKey, String abilityKey) + { + String subName = ""; + Ability anAbility = Globals.getAbilityKeyed(categoryKey, abilityKey); + AbilityCategory aCategory = + SettingsHandler.getGame().getAbilityCategory(categoryKey); + + if (anAbility == null) + { + Logging.errorPrint("Feat not found: " + abilityKey); + return; + } + + if (!abilityKey.equalsIgnoreCase(anAbility.getKeyName())) + { + subName = abilityKey.substring(anAbility.getKeyName().length()); + abilityKey = anAbility.getKeyName(); + + final int si = subName.indexOf('('); + + if (si > -1) + { + subName = subName.substring(si + 1); + } + } + + if (PrereqHandler.passesAll(anAbility.getPrerequisiteList(), aPc, + anAbility)) + { + if (anAbility.getSafe(ObjectKey.MULTIPLE_ALLOWED)) + { + // + // If already have taken the feat, use it so we can remove + // any choices already selected + // + final Ability pcFeat = + aPc.getAbilityKeyed(aCategory, abilityKey); + + if (pcFeat != null) + { + anAbility = pcFeat; + } + + final int percIdx = subName.indexOf('%'); + + if (percIdx > -1) + { + subName = subName.substring(0, percIdx); + } + else if (subName.length() != 0) + { + final int idx = subName.lastIndexOf(')'); + + if (idx > -1) + { + subName = subName.substring(0, idx); + } + } + + // Retrieve the choices offered by the ability + final List tempAvailList = new ArrayList(); + final List tempSelList = new ArrayList(); + ChooserUtilities.modChoices(anAbility, tempAvailList, + tempSelList, false, aPc, true, null); + final List<String> aavailableList = new ArrayList<String>(); // available list of choices + final List<String> sselectedList = new ArrayList<String>(); // selected list of choices + ChooserUtilities.convertChoiceListToStringList(tempAvailList, + aavailableList); + ChooserUtilities.convertChoiceListToStringList(tempSelList, + sselectedList); + + // + // Remove any that don't match + // + if (subName.length() != 0) + { + for (int n = aavailableList.size() - 1; n >= 0; --n) + { + final String bString = aavailableList.get(n); + + if (!bString.startsWith(subName)) + { + aavailableList.remove(n); + } + } + + // + // Example: ADD:FEAT(Skill Focus(Craft (Basketweaving))) + // If you have no ranks in Craft (Basketweaving), the available list will be empty + // + // Make sure that the specified feat is available, even though it does not meet the prerequisite + // + if ((percIdx == -1) && (aavailableList.size() == 0)) + { + aavailableList.add(subName); + } + } + + // + // Remove any already selected + // + if (!anAbility.getSafe(ObjectKey.STACKS)) + { + for (Iterator<String> e = sselectedList.iterator(); e + .hasNext();) + { + final int idx = aavailableList.indexOf(e.next()); + + if (idx > -1) + { + aavailableList.remove(idx); + } + } + } + + for (Iterator<String> e = aavailableList.iterator(); e + .hasNext();) + { + availableList.add(abilityKey + "(" + e.next() + ")"); + } + } + else + { + Ability testAbility = + Globals.getAbilityKeyed(categoryKey, abilityKey); + if (!aPc.hasRealAbility(aCategory, testAbility) + && !aPc.hasAutomaticAbility(aCategory, testAbility)) + { + availableList.add(abilityKey); + } + } + } + } + +} Modified: Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java 2008-10-17 21:17:10 UTC (rev 8107) +++ Trunk/pcgen/code/src/java/pcgen/core/chooser/ChooserUtilities.java 2008-10-18 12:09:14 UTC (rev 8108) @@ -356,6 +356,7 @@ private static void constructMap() { classLookup = new HashMap<String, String>(); + classLookup.put("ABILITY", AbilityChoiceManager.class.getName()); classLookup.put("ARMORTYPE", ArmorTypeChoiceManager.class.getName()); classLookup.put("CSKILLS", ClassSkillsChoiceManager.class.getName()); classLookup.put("CLASS", ClassChoiceManager.class.getName()); Added: Trunk/pcgen/code/src/java/plugin/lsttokens/choose/AbilityToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/choose/AbilityToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/choose/AbilityToken.java 2008-10-18 12:09:14 UTC (rev 8108) @@ -0,0 +1,114 @@ +/* + * AbilityToken.java + * Copyright 2008 (C) James Dempsey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 18/10/2008 19:00:51 + * + * $Id: $ + */ +package plugin.lsttokens.choose; + +import pcgen.core.AbilityCategory; +import pcgen.core.PObject; +import pcgen.core.SettingsHandler; +import pcgen.persistence.lst.ChooseLstToken; +import pcgen.util.Logging; + +/** + * The Class <code>AbilityToken</code> is responsible for parsing + * the ability choose token. + * + * Last Editor: $Author: $ + * Last Edited: $Date: $ + * + * @author James Dempsey <jde...@us...> + * @version $Revision: $ + */ +public class AbilityToken implements ChooseLstToken +{ + + /* (non-Javadoc) + * @see pcgen.persistence.lst.LstToken#getTokenName() + */ + public String getTokenName() + { + return "ABILITY"; + } + + /* (non-Javadoc) + * @see pcgen.persistence.lst.ChooseLstToken#parse(pcgen.core.PObject, java.lang.String, java.lang.String) + */ + public boolean parse(PObject po, String prefix, String value) + { + if (value == null) + { + Logging.errorPrint("CHOOSE:" + getTokenName() + + " requires arguments"); + return false; + } + if (value.indexOf('[') != -1) + { + Logging.errorPrint("CHOOSE:" + getTokenName() + + " arguments may not contain [] : " + value); + return false; + } + if (value.charAt(0) == '|') + { + Logging.errorPrint("CHOOSE:" + getTokenName() + + " arguments may not start with | : " + value); + return false; + } + if (value.charAt(value.length() - 1) == '|') + { + Logging.errorPrint("CHOOSE:" + getTokenName() + + " arguments may not end with | : " + value); + return false; + } + if (value.indexOf("||") != -1) + { + Logging.errorPrint("CHOOSE:" + getTokenName() + + " arguments uses double separator || : " + value); + return false; + } + int barLoc = value.indexOf('|'); + if (barLoc == -1) + { + Logging.errorPrint("CHOOSE:" + getTokenName() + + " requires a CATEGORY and arguments : " + value); + return false; + } + String cat = value.substring(0, barLoc); + AbilityCategory category = SettingsHandler.getGame() + .silentlyGetAbilityCategory(cat); + if (category == null) + { + Logging.errorPrint("CHOOSE:" + getTokenName() + + " found invalid CATEGORY: " + cat + " in value: " + + value); + return false; + } + + StringBuilder sb = new StringBuilder(); + if (prefix.length() > 0) + { + sb.append(prefix).append('|'); + } + sb.append(getTokenName()).append('|').append(value); + po.setChoiceString(sb.toString()); + return true; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-10-19 19:13:46
|
Revision: 8144 http://pcgen.svn.sourceforge.net/pcgen/?rev=8144&view=rev Author: thpr Date: 2008-10-19 19:13:43 +0000 (Sun, 19 Oct 2008) Log Message: ----------- ADD:CLASSSKILLS token update Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/base/lang/StringUtil.java Trunk/pcgen/code/src/java/pcgen/cdom/base/Constants.java Trunk/pcgen/code/src/java/pcgen/cdom/reference/ObjectMatchingReference.java Trunk/pcgen/code/src/java/plugin/lsttokens/add/ClassSkillsToken.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/cdom/helper/ClassSkillChoiceActor.java Trunk/pcgen/code/src/java/plugin/lsttokens/add/ClassSkillsLevelToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-19 19:12:57 UTC (rev 8143) +++ Trunk/pcgen/code/pluginbuild.xml 2008-10-19 19:13:43 UTC (rev 8144) @@ -2311,6 +2311,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${lstplugins.dir}/AddLstToken-CLASSSKILLSLEVEL.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/add/ClassSkillsLevelToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${lstplugins.dir}/AddLstToken-DOTCLEAR.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/base/lang/StringUtil.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/base/lang/StringUtil.java 2008-10-19 19:12:57 UTC (rev 8143) +++ Trunk/pcgen/code/src/java/pcgen/base/lang/StringUtil.java 2008-10-19 19:13:43 UTC (rev 8144) @@ -118,4 +118,45 @@ return result.toString(); } + + /** + * Replaces all of the instances of the find String with newStr in the + * (first) given String. + */ + public static String replaceAll(final String in, final String find, + final String newStr) + { + final char[] working = in.toCharArray(); + final StringBuilder sb = + new StringBuilder(in.length() + newStr.length()); + int startindex = in.indexOf(find); + + if (startindex < 0) + { + return in; + } + + int currindex = 0; + + while (startindex > -1) + { + for (int i = currindex; i < startindex; ++i) + { + sb.append(working[i]); + } + + currindex = startindex; + sb.append(newStr); + currindex += find.length(); + startindex = in.indexOf(find, currindex); + } + + for (int i = currindex; i < working.length; ++i) + { + sb.append(working[i]); + } + + return sb.toString(); + } + } Modified: Trunk/pcgen/code/src/java/pcgen/cdom/base/Constants.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/base/Constants.java 2008-10-19 19:12:57 UTC (rev 8143) +++ Trunk/pcgen/code/src/java/pcgen/cdom/base/Constants.java 2008-10-19 19:13:43 UTC (rev 8144) @@ -315,6 +315,11 @@ String LST_CHOOSE = "CHOOSE:"; String LST_ADDCHOICE = "ADDCHOICE:"; char CHAR_ASTERISK = '*'; + String LST_UNTRAINED = "UNTRAINED"; + String LST_TRAINED = "TRAINED"; + String LST_EXCLUSIVE = "EXCLUSIVE"; + String LST_NONEXCLUSIVE = "NONEXCLUSIVE"; + String LST_CROSSCLASS = "CROSSCLASS"; char PERCENT = '%'; public static final int NO_LEVEL_LIMIT = -1; } Added: Trunk/pcgen/code/src/java/pcgen/cdom/helper/ClassSkillChoiceActor.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/helper/ClassSkillChoiceActor.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/cdom/helper/ClassSkillChoiceActor.java 2008-10-19 19:13:43 UTC (rev 8144) @@ -0,0 +1,32 @@ +package pcgen.cdom.helper; + +import pcgen.cdom.base.ChoiceActor; +import pcgen.cdom.enumeration.AssociationListKey; +import pcgen.core.PCClass; +import pcgen.core.PlayerCharacter; +import pcgen.core.Skill; +import pcgen.core.analysis.SkillRankControl; + +public class ClassSkillChoiceActor implements ChoiceActor<Skill> +{ + + private final PCClass source; + private final Integer applyRank; + + public ClassSkillChoiceActor(PCClass obj, Integer autoRank) + { + applyRank = autoRank; + source = obj; + } + + public void applyChoice(Skill choice, PlayerCharacter pc) + { + Skill pcSkill = pc.addSkill(choice); + pc.addAssoc(source, AssociationListKey.CSKILL, pcSkill); + if (applyRank != null) + { + SkillRankControl.modRanks(applyRank, source, false, pc, pcSkill); + } + } + +} Modified: Trunk/pcgen/code/src/java/pcgen/cdom/reference/ObjectMatchingReference.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/cdom/reference/ObjectMatchingReference.java 2008-10-19 19:12:57 UTC (rev 8143) +++ Trunk/pcgen/code/src/java/pcgen/cdom/reference/ObjectMatchingReference.java 2008-10-19 19:13:43 UTC (rev 8144) @@ -53,6 +53,8 @@ private final V value; + private boolean allowNull = false; + /* * CONSIDER is it necessary/useful to cache the results of the pattern * match? If that is done, under what conditions does the cache need to be @@ -131,9 +133,9 @@ return false; } V actual = obj.get(key); - if (value == null) + if (actual == null) { - return actual == null; + return allowNull || value == null; } return value.equals(actual); } @@ -211,6 +213,11 @@ return count; } + public void returnIncludesNulls(boolean b) + { + allowNull = b; + } + /** * Returns true if this ObjectMatchingReference is equal to the given * Object. Equality is defined as being another ObjectMatchingReference Added: Trunk/pcgen/code/src/java/plugin/lsttokens/add/ClassSkillsLevelToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/add/ClassSkillsLevelToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/add/ClassSkillsLevelToken.java 2008-10-19 19:13:43 UTC (rev 8144) @@ -0,0 +1,230 @@ +/* + * Copyright 2007 (C) Thomas Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package plugin.lsttokens.add; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.StringTokenizer; + +import pcgen.base.formula.Formula; +import pcgen.cdom.base.CDOMReference; +import pcgen.cdom.base.ChoiceSet; +import pcgen.cdom.base.Constants; +import pcgen.cdom.base.FormulaFactory; +import pcgen.cdom.base.TransitionChoice; +import pcgen.cdom.choiceset.ReferenceChoiceSet; +import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.helper.ClassSkillChoiceActor; +import pcgen.cdom.inst.PCClassLevel; +import pcgen.cdom.reference.CDOMGroupRef; +import pcgen.cdom.reference.ObjectMatchingReference; +import pcgen.core.PCClass; +import pcgen.core.Skill; +import pcgen.rules.context.Changes; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.TokenUtilities; +import pcgen.rules.persistence.token.AbstractToken; +import pcgen.rules.persistence.token.CDOMSecondaryToken; +import pcgen.util.Logging; + +public class ClassSkillsLevelToken extends AbstractToken implements + CDOMSecondaryToken<PCClassLevel> +{ + @Override + public String getTokenName() + { + return "CLASSSKILLS"; + } + + private static final Class<Skill> SKILL_CLASS = Skill.class; + + public String getParentToken() + { + return "ADD"; + } + + private String getFullName() + { + return getParentToken() + ":" + getTokenName(); + } + + public boolean parse(LoadContext context, PCClassLevel obj, String value) + { + if (value.length() == 0) + { + Logging.errorPrint(getFullName() + " may not have empty argument"); + return false; + } + int pipeLoc = value.indexOf(Constants.PIPE); + int count; + String items; + if (pipeLoc == -1) + { + count = 1; + items = value; + } + else + { + String countString = value.substring(0, pipeLoc); + try + { + count = Integer.parseInt(countString); + if (count < 1) + { + Logging.errorPrint("Count in " + getFullName() + + " must be > 0"); + return false; + } + } + catch (NumberFormatException nfe) + { + Logging.errorPrint("Invalid Count in " + getFullName() + ": " + + countString); + return false; + } + items = value.substring(pipeLoc + 1); + } + + if (isEmpty(items) || hasIllegalSeparator(',', items)) + { + return false; + } + + List<CDOMReference<Skill>> refs = new ArrayList<CDOMReference<Skill>>(); + StringTokenizer tok = new StringTokenizer(items, Constants.COMMA); + CDOMGroupRef<Skill> allRef = context.ref + .getCDOMAllReference(SKILL_CLASS); + Integer autoRank = null; + while (tok.hasMoreTokens()) + { + String tokText = tok.nextToken(); + if (Constants.LST_ALL.equals(tokText)) + { + refs.add(allRef); + } + else if (Constants.LST_UNTRAINED.equals(tokText)) + { + ObjectMatchingReference<Skill, Boolean> omr = new ObjectMatchingReference<Skill, Boolean>( + SKILL_CLASS, allRef, ObjectKey.USE_UNTRAINED, + Boolean.TRUE); + omr.returnIncludesNulls(true); + refs.add(omr); + } + else if (Constants.LST_TRAINED.equals(tokText)) + { + refs.add(new ObjectMatchingReference<Skill, Boolean>( + SKILL_CLASS, allRef, ObjectKey.USE_UNTRAINED, + Boolean.FALSE)); + } + else if (Constants.LST_EXCLUSIVE.equals(tokText)) + { + refs + .add(new ObjectMatchingReference<Skill, Boolean>( + SKILL_CLASS, allRef, ObjectKey.EXCLUSIVE, + Boolean.TRUE)); + } + else if (Constants.LST_NONEXCLUSIVE.equals(tokText) + || Constants.LST_CROSSCLASS.equals(tokText)) + { + ObjectMatchingReference<Skill, Boolean> omr = new ObjectMatchingReference<Skill, Boolean>( + SKILL_CLASS, allRef, ObjectKey.EXCLUSIVE, Boolean.FALSE); + omr.returnIncludesNulls(true); + refs.add(omr); + } + else if (tokText.startsWith("AUTORANK=")) + { + if (autoRank != null) + { + Logging.errorPrint("Cannot have two AUTORANK= items in " + + getFullName() + ": " + value); + return false; + } + String rankString = tokText.substring(9); + autoRank = Integer.decode(rankString); + } + else + { + CDOMReference<Skill> skref = TokenUtilities.getTypeOrPrimitive( + context, SKILL_CLASS, tokText); + if (skref == null) + { + Logging.errorPrint(" Error was encountered while parsing " + + getFullName() + ": " + value + + " had an invalid reference: " + tokText); + return false; + } + refs.add(allRef); + } + } + + ReferenceChoiceSet<Skill> rcs = new ReferenceChoiceSet<Skill>(refs); + ChoiceSet<Skill> cs = new ChoiceSet<Skill>(getFullName(), rcs); + TransitionChoice<Skill> tc = new TransitionChoice<Skill>(cs, + FormulaFactory.getFormulaFor(count)); + context.getObjectContext().addToList(obj, ListKey.ADD, tc); + //TODO This is a hack, to get this to work pre-CDOM + PCClass parent = (PCClass) obj.get(ObjectKey.PARENT); + ClassSkillChoiceActor actor = new ClassSkillChoiceActor(parent, autoRank); + tc.setChoiceActor(actor); + return true; + } + + public String[] unparse(LoadContext context, PCClassLevel obj) + { + Changes<TransitionChoice<?>> grantChanges = context.getObjectContext() + .getListChanges(obj, ListKey.ADD); + Collection<TransitionChoice<?>> addedItems = grantChanges.getAdded(); + if (addedItems == null || addedItems.isEmpty()) + { + // Zero indicates no Token + return null; + } + List<String> addStrings = new ArrayList<String>(); + for (TransitionChoice<?> container : addedItems) + { + ChoiceSet<?> cs = container.getChoices(); + if (getFullName().equals(cs.getName()) + && SKILL_CLASS.equals(cs.getChoiceClass())) + { + Formula f = container.getCount(); + if (f == null) + { + context.addWriteMessage("Unable to find " + getFullName() + + " Count"); + return null; + } + String fString = f.toString(); + StringBuilder sb = new StringBuilder(); + if (!"1".equals(fString)) + { + sb.append(fString).append(Constants.PIPE); + } + sb.append(cs.getLSTformat()); + addStrings.add(sb.toString()); + } + } + return addStrings.toArray(new String[addStrings.size()]); + } + + public Class<PCClassLevel> getTokenClass() + { + return PCClassLevel.class; + } +} Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/add/ClassSkillsToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/add/ClassSkillsToken.java 2008-10-19 19:12:57 UTC (rev 8143) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/add/ClassSkillsToken.java 2008-10-19 19:13:43 UTC (rev 8144) @@ -17,52 +17,211 @@ */ package plugin.lsttokens.add; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.StringTokenizer; + +import pcgen.base.formula.Formula; +import pcgen.cdom.base.CDOMReference; +import pcgen.cdom.base.ChoiceSet; import pcgen.cdom.base.Constants; +import pcgen.cdom.base.FormulaFactory; +import pcgen.cdom.base.TransitionChoice; +import pcgen.cdom.choiceset.ReferenceChoiceSet; +import pcgen.cdom.enumeration.ListKey; +import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.helper.ClassSkillChoiceActor; +import pcgen.cdom.reference.CDOMGroupRef; +import pcgen.cdom.reference.ObjectMatchingReference; import pcgen.core.PCClass; -import pcgen.core.PObject; -import pcgen.persistence.lst.AddLstToken; +import pcgen.core.Skill; +import pcgen.rules.context.Changes; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.TokenUtilities; +import pcgen.rules.persistence.token.AbstractToken; +import pcgen.rules.persistence.token.CDOMSecondaryToken; import pcgen.util.Logging; -public class ClassSkillsToken implements AddLstToken +public class ClassSkillsToken extends AbstractToken implements + CDOMSecondaryToken<PCClass> { + @Override + public String getTokenName() + { + return "CLASSSKILLS"; + } - public boolean parse(PObject target, String value, int level) + private static final Class<Skill> SKILL_CLASS = Skill.class; + + public String getParentToken() { - if (!PCClass.class.isAssignableFrom(target.getClass())) + return "ADD"; + } + + private String getFullName() + { + return getParentToken() + ":" + getTokenName(); + } + + public boolean parse(LoadContext context, PCClass obj, String value) + { + if (value.length() == 0) { - Logging - .errorPrint("ADD:CLASSSKILLS is only valid in Class LST files"); - Logging.errorPrint(" bad use found in " - + target.getClass().getSimpleName() + " " - + target.getKeyName()); + Logging.errorPrint(getFullName() + " may not have empty argument"); return false; } int pipeLoc = value.indexOf(Constants.PIPE); - String countString; + int count; String items; if (pipeLoc == -1) { - countString = "1"; + count = 1; items = value; } else { - if (pipeLoc != value.lastIndexOf(Constants.PIPE)) + String countString = value.substring(0, pipeLoc); + try { - Logging.errorPrint("Syntax of ADD:" + getTokenName() - + " only allows one | : " + value); + count = Integer.parseInt(countString); + if (count < 1) + { + Logging.errorPrint("Count in " + getFullName() + + " must be > 0"); + return false; + } + } + catch (NumberFormatException nfe) + { + Logging.errorPrint("Invalid Count in " + getFullName() + ": " + + countString); return false; } - countString = value.substring(0, pipeLoc); items = value.substring(pipeLoc + 1); } - target.addAddList(level, getTokenName() + "(" + items + ")" - + countString); + + if (isEmpty(items) || hasIllegalSeparator(',', items)) + { + return false; + } + + List<CDOMReference<Skill>> refs = new ArrayList<CDOMReference<Skill>>(); + StringTokenizer tok = new StringTokenizer(items, Constants.COMMA); + CDOMGroupRef<Skill> allRef = context.ref + .getCDOMAllReference(SKILL_CLASS); + Integer autoRank = null; + while (tok.hasMoreTokens()) + { + String tokText = tok.nextToken(); + if (Constants.LST_ALL.equals(tokText)) + { + refs.add(allRef); + } + else if (Constants.LST_UNTRAINED.equals(tokText)) + { + ObjectMatchingReference<Skill, Boolean> omr = new ObjectMatchingReference<Skill, Boolean>( + SKILL_CLASS, allRef, ObjectKey.USE_UNTRAINED, + Boolean.TRUE); + omr.returnIncludesNulls(true); + refs.add(omr); + } + else if (Constants.LST_TRAINED.equals(tokText)) + { + refs.add(new ObjectMatchingReference<Skill, Boolean>( + SKILL_CLASS, allRef, ObjectKey.USE_UNTRAINED, + Boolean.FALSE)); + } + else if (Constants.LST_EXCLUSIVE.equals(tokText)) + { + refs + .add(new ObjectMatchingReference<Skill, Boolean>( + SKILL_CLASS, allRef, ObjectKey.EXCLUSIVE, + Boolean.TRUE)); + } + else if (Constants.LST_NONEXCLUSIVE.equals(tokText) + || Constants.LST_CROSSCLASS.equals(tokText)) + { + ObjectMatchingReference<Skill, Boolean> omr = new ObjectMatchingReference<Skill, Boolean>( + SKILL_CLASS, allRef, ObjectKey.EXCLUSIVE, Boolean.FALSE); + omr.returnIncludesNulls(true); + refs.add(omr); + } + else if (tokText.startsWith("AUTORANK=")) + { + if (autoRank != null) + { + Logging.errorPrint("Cannot have two AUTORANK= items in " + + getFullName() + ": " + value); + return false; + } + String rankString = tokText.substring(9); + autoRank = Integer.decode(rankString); + } + else + { + CDOMReference<Skill> skref = TokenUtilities.getTypeOrPrimitive( + context, SKILL_CLASS, tokText); + if (skref == null) + { + Logging.errorPrint(" Error was encountered while parsing " + + getFullName() + ": " + value + + " had an invalid reference: " + tokText); + return false; + } + refs.add(allRef); + } + } + + ReferenceChoiceSet<Skill> rcs = new ReferenceChoiceSet<Skill>(refs); + ChoiceSet<Skill> cs = new ChoiceSet<Skill>(getFullName(), rcs); + TransitionChoice<Skill> tc = new TransitionChoice<Skill>(cs, + FormulaFactory.getFormulaFor(count)); + context.getObjectContext().addToList(obj, ListKey.ADD, tc); + ClassSkillChoiceActor actor = new ClassSkillChoiceActor(obj, autoRank); + tc.setChoiceActor(actor); return true; } - public String getTokenName() + public String[] unparse(LoadContext context, PCClass obj) { - return "CLASSSKILLS"; + Changes<TransitionChoice<?>> grantChanges = context.getObjectContext() + .getListChanges(obj, ListKey.ADD); + Collection<TransitionChoice<?>> addedItems = grantChanges.getAdded(); + if (addedItems == null || addedItems.isEmpty()) + { + // Zero indicates no Token + return null; + } + List<String> addStrings = new ArrayList<String>(); + for (TransitionChoice<?> container : addedItems) + { + ChoiceSet<?> cs = container.getChoices(); + if (getFullName().equals(cs.getName()) + && SKILL_CLASS.equals(cs.getChoiceClass())) + { + Formula f = container.getCount(); + if (f == null) + { + context.addWriteMessage("Unable to find " + getFullName() + + " Count"); + return null; + } + String fString = f.toString(); + StringBuilder sb = new StringBuilder(); + if (!"1".equals(fString)) + { + sb.append(fString).append(Constants.PIPE); + } + sb.append(cs.getLSTformat()); + addStrings.add(sb.toString()); + } + } + return addStrings.toArray(new String[addStrings.size()]); } + + public Class<PCClass> getTokenClass() + { + return PCClass.class; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-11-01 00:56:01
|
Revision: 8288 http://pcgen.svn.sourceforge.net/pcgen/?rev=8288&view=rev Author: thpr Date: 2008-11-01 00:55:57 +0000 (Sat, 01 Nov 2008) Log Message: ----------- PRERACETYPE token rebuild Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/PCClass.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/PreracetypeToken.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRaceTypeTester.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-10-31 22:39:10 UTC (rev 8287) +++ Trunk/pcgen/code/pluginbuild.xml 2008-11-01 00:55:57 UTC (rev 8288) @@ -1674,6 +1674,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${preplugins.dir}/PreToken-PRERACETYPE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/pretokens/test/PreRaceTypeTester.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${preplugins.dir}/PreToken-PREREACH.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/core/PCClass.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-10-31 22:39:10 UTC (rev 8287) +++ Trunk/pcgen/code/src/java/pcgen/core/PCClass.java 2008-11-01 00:55:57 UTC (rev 8288) @@ -56,7 +56,6 @@ import pcgen.cdom.enumeration.IntegerKey; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.enumeration.ObjectKey; -import pcgen.cdom.enumeration.RaceType; import pcgen.cdom.enumeration.Region; import pcgen.cdom.enumeration.StringKey; import pcgen.cdom.enumeration.VariableKey; @@ -167,16 +166,6 @@ // really working properly /* - * UNKNOWNDESTINATION This is (yet again) a bit complicated due to the fact - * that this is a prerequisite test. First, this is LEVELONEONLY in the - * sense that this prerequisite might only be justifiably tested for the - * first time a class is taken (if the Race changes, then all bets are off, - * right?). To maintain the existing code function (always check on level - * up) this becomes ALLCLASSLEVELS and gets passed into each PCClassLevel. - */ - private RaceType preRaceType = null; - - /* * ALLCLASSLEVELS This goes into each PCClassLevel from PCClass in order to * store what the sublevel actually is. This is NOT set by a tag, so it is * PCCLASSLEVELONLY @@ -190,8 +179,6 @@ */ private Map<Integer, String> substitutionClassKey = null; - // private TreeSet<Language> languageBonus = new TreeSet<Language>(); - /* * TYPESAFETY This is definitely something that needs to NOT be a String, * but it gets VERY complicated to do that, since the keys are widely used @@ -702,24 +689,6 @@ } /* - * PCCLASSANDLEVEL This is a characteristic of both the PCClass and - * the individual PCClassLevels (since the prereq needs to be - * enforced at every level-up) - * - * Trying to DELETEMETHOD by cleaning out PRERACETYPE - but need - * some more guidance from Tir on how this should work - thpr 11/6/06 - */ - public final void setPreRaceType(RaceType rt) - { - preRaceType = rt; - } - - // public final void setSkillPool(final Integer argSkillPool) - // { - // skillPool = argSkillPool; - // } - - /* * REFACTOR This is BAD that this is referring to PCLevelInfo - that gets * VERY confusing as far as object interaction. Can we get rid of * PCLevelInfo altogether? @@ -1775,67 +1744,10 @@ return false; } - // /* - // * (non-Javadoc) - // * - // * @see pcgen.core.PObject#getWeaponProfAutos() - // */ - // public List<String> getWeaponProfAutos() { - // // first build up the list of the standard auto weapon profs - // final List<String> list = super.getWeaponProfAutos(); - // - // // then add in the proficiencies for each natural weapon - // // we have active. - // if (naturalWeapons != null) { - // for (Iterator<LevelProperty> li = naturalWeapons.iterator(); li - // .hasNext();) { - // final LevelProperty lp = li.next(); - // if (lp.getLevel() <= level) { - // final Equipment weapon = (Equipment) lp.getObject(); - // list.add(weapon.getSimpleName()); - // } - // } - // } - // return list; - // } - - /* - * TYPESAFETY This needs to be checking vs. a RaceType TypesafeEnumeration, - * not a general String - */ - /* - * REFACTOR How exactly does this work in the new PCClass is a PCClassLevel - * Factory model? Does this exist as a method in PCClass that should be - * called before getLevel() is used (and before the user tries to add the - * level to PlayerCharacter?) or is this a check that the level performs - * when the code attempts to add it to the PC? - */ public boolean isQualified(final PlayerCharacter aPC) { - - if (aPC == null) - { - return false; - } - - // if (isMonster() && (preRaceType != null) && - // !contains(aPC.getCritterType(), preRaceType)) - if (isMonster() - && (preRaceType != null) - && (!preRaceType.equals(aPC.getRace().get(ObjectKey.RACETYPE)) && !(aPC - .getCritterType().indexOf(preRaceType.toString()) >= 0))) - // Move the check for type out of race and into PlayerCharacter to make - // it easier for a template to adjust it. - { - return false; - } - - if (!PrereqHandler.passesAll(getPrerequisiteList(), aPC, this)) - { - return false; - } - - return true; + return aPC != null + && PrereqHandler.passesAll(getPrerequisiteList(), aPC, this); } @Override @@ -4494,23 +4406,7 @@ } } - // public void removeAutoAbilities(final AbilityCategory aCategory, final int aLevel) - // { - // if ( aCategory == AbilityCategory.FEAT ) - // { - // removeAllAutoFeats(aLevel); - // return; - // } - // - // if ( theAutoAbilities == null ) - // { - // return; - // } - // theAutoAbilities.put(aCategory, aLevel, null); - // } - SortedMap<Integer, PCClassLevel> levelMap = new TreeMap<Integer, PCClassLevel>(); -// List<PCClassLevel> repeatLevelObjects = new ArrayList<PCClassLevel>(); public PCClassLevel getClassLevel(int lvl) { Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-10-31 22:39:10 UTC (rev 8287) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/PCClassLoader.java 2008-11-01 00:55:57 UTC (rev 8288) @@ -24,7 +24,6 @@ import java.util.Collection; import java.util.List; -import java.util.Map; import java.util.StringTokenizer; import pcgen.cdom.enumeration.IntegerKey; @@ -283,8 +282,6 @@ final StringTokenizer colToken = new StringTokenizer(restOfLine, SystemLoader.TAB_DELIM); - Map<String, LstToken> tokenMap = TokenStore.inst().getTokenMap( - PCClassLstToken.class); // loop through all the tokens and parse them while (colToken.hasMoreTokens()) { @@ -310,17 +307,6 @@ { context.commit(); } - else if (tokenMap.containsKey(key)) - { - PCClassLstToken tok = (PCClassLstToken) tokenMap.get(key); - LstUtils.deprecationCheck(tok, pcClass, value); - if (!tok.parse(pcClass, value, lvl)) - { - Logging.errorPrint("Error parsing class " - + pcClass.getDisplayName() + ':' + source.getURI() - + ':' + token + "\""); - } - } else if (!PObjectLoader.parseTagLevel(pcClass, token, lvl)) { Logging.replayParsedMessages(); @@ -339,8 +325,6 @@ final StringTokenizer colToken = new StringTokenizer(restOfLine, SystemLoader.TAB_DELIM); - Map<String, LstToken> tokenMap = - TokenStore.inst().getTokenMap(PCClassLstToken.class); // loop through all the tokens and parse them while (colToken.hasMoreTokens()) { @@ -372,17 +356,6 @@ { context.commit(); } - else if (tokenMap.containsKey(key)) - { - PCClassLstToken tok = (PCClassLstToken) tokenMap.get(key); - LstUtils.deprecationCheck(tok, pcClass, value); - if (!tok.parse(pcClass, value, 0)) - { - Logging.errorPrint("Error parsing class " - + pcClass.getDisplayName() + ':' + source.getURI() + ':' - + token + "\""); - } - } else if (!PObjectLoader.parseTagLevel(pcClass, token, 0)) { Logging.replayParsedMessages(); Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2008-10-31 22:39:10 UTC (rev 8287) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2008-11-01 00:55:57 UTC (rev 8288) @@ -43,7 +43,6 @@ tokenTypeList.add(GlobalLstToken.class); tokenTypeList.add(AbilityLstToken.class); tokenTypeList.add(CampaignLstToken.class); - tokenTypeList.add(PCClassLstToken.class); tokenTypeList.add(CompanionModLstToken.class); tokenTypeList.add(EquipmentLstToken.class); tokenTypeList.add(EquipmentModifierLstToken.class); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/PreracetypeToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/PreracetypeToken.java 2008-10-31 22:39:10 UTC (rev 8287) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/pcclass/PreracetypeToken.java 2008-11-01 00:55:57 UTC (rev 8288) @@ -1,23 +1,93 @@ package plugin.lsttokens.pcclass; -import pcgen.cdom.enumeration.RaceType; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + import pcgen.core.PCClass; -import pcgen.persistence.lst.PCClassLstToken; +import pcgen.core.prereq.Prerequisite; +import pcgen.core.prereq.PrerequisiteOperator; +import pcgen.persistence.PersistenceLayerException; +import pcgen.rules.context.Changes; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.rules.persistence.token.DeferredToken; +import pcgen.util.Logging; /** * Class deals with PRERACETYPE Token */ -public class PreracetypeToken implements PCClassLstToken +public class PreracetypeToken implements CDOMPrimaryToken<PCClass>, + DeferredToken<PCClass> { + private static final String TOKEN_ROOT = "RACETYPE"; + public String getTokenName() { return "PRERACETYPE"; } - public boolean parse(PCClass pcclass, String value, int level) + public boolean parse(LoadContext context, PCClass obj, String value) + throws PersistenceLayerException { - pcclass.setPreRaceType(RaceType.getConstant(value)); + Prerequisite p = new Prerequisite(); + p.setKind("RACETYPE"); + p.setOperand(value); + p.setOperator(PrerequisiteOperator.GTEQ); + context.obj.put(obj, p); return true; } + + public String[] unparse(LoadContext context, PCClass obj) + { + Set<String> set = new TreeSet<String>(); + Changes<Prerequisite> changes = context.obj.getPrerequisiteChanges(obj); + if (changes == null || changes.isEmpty()) + { + return null; + } + for (Prerequisite p : changes.getAdded()) + { + String kind = p.getKind(); + if (kind == null + || kind.regionMatches(true, 0, TOKEN_ROOT, 0, Math.min( + TOKEN_ROOT.length(), kind.length()))) + { + set.add(p.getOperand()); + } + } + if (set.isEmpty()) + { + return null; + } + return set.toArray(new String[set.size()]); + } + + public Class<PCClass> getTokenClass() + { + return PCClass.class; + } + + public boolean process(LoadContext context, PCClass obj) + { + List<Prerequisite> prerequisiteList = obj.getPrerequisiteList(); + if (prerequisiteList != null) + { + for (Prerequisite p : prerequisiteList) + { + if ("RACETYPE".equalsIgnoreCase(p.getKind())) + { + if (!obj.isMonster()) + { + Logging.errorPrint("PCClass " + obj.getKeyName() + + " is not a Monster, but used PRERACETYPE"); + return false; + } + } + } + } + return true; + } + } Added: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRaceTypeTester.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRaceTypeTester.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRaceTypeTester.java 2008-11-01 00:55:57 UTC (rev 8288) @@ -0,0 +1,89 @@ +/* + * PreRace.java + * Copyright 2001 (C) Bryan McRoberts <mer...@ya...> + * Copyright 2003 (C) Chris Ward <fr...@pu...> + * Copyright 2005 (C) Greg Bingleman <by...@ho...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on November 28, 2003 + * + * Current Ver: $Revision: 7951 $ + * Last Editor: $Author: thpr $ + * Last Edited: $Date: 2008-10-05 15:21:21 -0400 (Sun, 05 Oct 2008) $ + * + */ +package plugin.pretokens.test; + +import pcgen.cdom.enumeration.ObjectKey; +import pcgen.cdom.enumeration.RaceType; +import pcgen.core.PlayerCharacter; +import pcgen.core.prereq.AbstractPrerequisiteTest; +import pcgen.core.prereq.Prerequisite; +import pcgen.core.prereq.PrerequisiteTest; + +/** + * @author wardc + * @author byngl <by...@ho...> + * + */ +public class PreRaceTypeTester extends AbstractPrerequisiteTest implements + PrerequisiteTest +{ + + /* + * (non-Javadoc) + * + * @see + * pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter) + */ + @Override + public int passes(final Prerequisite prereq, final PlayerCharacter character) + { + final int reqnumber = Integer.parseInt(prereq.getOperand()); + final String requiredRaceType = prereq.getKey(); + int runningTotal = 0; + + try + { + RaceType preRaceType = RaceType.valueOf(requiredRaceType); + if (preRaceType.equals(character.getRace().get(ObjectKey.RACETYPE))) + { + runningTotal++; + } + } + catch (IllegalArgumentException e) + { + //Can't match + } + if (character.getCritterType().indexOf(requiredRaceType) >= 0) + { + runningTotal++; + } + runningTotal = prereq.getOperator().compare(runningTotal, reqnumber); + return countedTotal(prereq, runningTotal); + } + + /* + * (non-Javadoc) + * + * @see pcgen.core.prereq.PrerequisiteTest#kindsHandled() + */ + public String kindHandled() + { + return "RACETYPE"; //$NON-NLS-1$ + } + +} Property changes on: Trunk/pcgen/code/src/java/plugin/pretokens/test/PreRaceTypeTester.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <th...@us...> - 2008-11-12 00:49:19
|
Revision: 8405 http://pcgen.svn.sourceforge.net/pcgen/?rev=8405&view=rev Author: thpr Date: 2008-11-12 00:49:15 +0000 (Wed, 12 Nov 2008) Log Message: ----------- update CHOOSE:LANGAUTO Modified Paths: -------------- Trunk/pcgen/code/pluginbuild.xml Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java Trunk/pcgen/code/src/java/pcgen/core/PObject.java Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java Trunk/pcgen/code/src/java/pcgen/core/Race.java Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java Trunk/pcgen/code/src/java/plugin/lsttokens/add/LanguageToken.java Trunk/pcgen/code/src/utest/plugin/lsttokens/add/ClassSkillsLevelTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/add/ClassSkillsTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/add/EquipTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/add/LanguageTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/add/SkillTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/add/TemplateTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/add/VFeatTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/testsupport/AbstractAddTokenTestCase.java Added Paths: ----------- Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/template/ChooseLangautoToken.java Trunk/pcgen/code/src/utest/plugin/lsttokens/race/ChooseLangautoTokenTest.java Trunk/pcgen/code/src/utest/plugin/lsttokens/template/ChooseLangautoTokenTest.java Removed Paths: ------------- Trunk/pcgen/code/src/java/plugin/lsttokens/choose/LangAutoToken.java Modified: Trunk/pcgen/code/pluginbuild.xml =================================================================== --- Trunk/pcgen/code/pluginbuild.xml 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/pluginbuild.xml 2008-11-12 00:49:15 UTC (rev 8405) @@ -2856,13 +2856,6 @@ </patternset> </fileset> </jar> - <jar jarfile="${lstplugins.dir}/ChooseToken-LANGAUTO.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> - <fileset dir="${build.classes.dir}"> - <patternset> - <include name="plugin/lsttokens/choose/LangAutoToken.class" /> - </patternset> - </fileset> - </jar> <jar jarfile="${lstplugins.dir}/ChooseToken-LANGUAGE.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> @@ -3898,6 +3891,13 @@ <target name="jar-lst-race-plugins" depends="makeplugindirs" description="Build (Link) Race Lst Token plugin jar files"> <!-- Race tokens--> + <jar jarfile="${lstplugins.dir}/RaceLstToken-CHOOSELANGAUTO.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/race/ChooseLangautoToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${lstplugins.dir}/RaceLstToken-CR.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> @@ -4295,6 +4295,13 @@ </patternset> </fileset> </jar> + <jar jarfile="${lstplugins.dir}/TemplateLstToken-CHOOSELANGAUTO.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> + <fileset dir="${build.classes.dir}"> + <patternset> + <include name="plugin/lsttokens/template/ChooseLangautoToken.class" /> + </patternset> + </fileset> + </jar> <jar jarfile="${lstplugins.dir}/TemplateLstToken-CR.jar" manifest="${src.java.dir}/plugin/lsttokens/manifest.mf"> <fileset dir="${build.classes.dir}"> <patternset> Modified: Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/java/pcgen/core/PCTemplate.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -84,13 +84,6 @@ txt.append(StringUtil.joinToStringBuffer(Globals.getContext().unparse( this), "\t")); txt.append("\t"); - - if ((getChooseLanguageAutos() != null) - && (getChooseLanguageAutos().length() > 0)) - { - txt.append("\tCHOOSE:LANGAUTO:").append(getChooseLanguageAutos()); - } - txt.append(super.getPCCText(false)); return txt.toString(); Modified: Trunk/pcgen/code/src/java/pcgen/core/PObject.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/java/pcgen/core/PObject.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -51,7 +51,6 @@ import pcgen.cdom.enumeration.StringKey; import pcgen.cdom.inst.PCClassLevel; import pcgen.cdom.reference.CDOMSingleRef; -import pcgen.core.analysis.LanguageSupport; import pcgen.core.analysis.WeaponProfType; import pcgen.core.bonus.BonusObj; import pcgen.core.bonus.BonusUtilities; @@ -107,8 +106,6 @@ private boolean isNewItem = true; - private String chooseLanguageAutos = Constants.EMPTY_STRING; - private URI sourceURI = null; private Set<String> types = new LinkedHashSet<String>(); @@ -1519,57 +1516,6 @@ return spellSupport; } - /** - * Set a list of languages that the character this Template is applied to - * automatically knows. - * - * @param argChooseLanguageAutos a comma separated list of languages to add - */ - public void setChooseLanguageAutos(final String argChooseLanguageAutos) - { - chooseLanguageAutos = argChooseLanguageAutos; - } - - /** - * Get a list of languages that the character this Template is applied to - * automatically knows. - * - * @return a comma separated list of languages automatically known - */ - public String getChooseLanguageAutos() - { - return chooseLanguageAutos; - } - - /** - * Adds one chosen language. - * - * @param flag - * @param aPC - */ - void chooseLanguageAutos(final boolean flag, final PlayerCharacter aPC) - { - if (!flag && !"".equals(chooseLanguageAutos)) - { - final List<Language> selectedList; // selected list of choices - - final ChooserInterface c = ChooserFactory.getChooserInstance(); - c.setTotalChoicesAvail(1); - c.setPoolFlag(false); - c.setTitle("Pick a Language: "); - - Set<Language> list = LanguageSupport.getLanguagesFromString(chooseLanguageAutos); - c.setAvailableList(new ArrayList<Language>(list)); - c.setVisible(true); - selectedList = c.getSelectedList(); - - if ((selectedList != null) && (selectedList.size() != 0)) - { - aPC.addFreeLanguage(selectedList.get(0)); - } - } - } - private DoubleKeyMap<AbilityCategory, Ability.Nature, List<QualifiedObject<String>>> theAbilities = new DoubleKeyMap<AbilityCategory, Ability.Nature, List<QualifiedObject<String>>>(); public void addAbility(final AbilityCategory aCategory, final Ability.Nature aNature, final QualifiedObject<String> anAbility) Modified: Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/java/pcgen/core/PlayerCharacter.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -6483,8 +6483,6 @@ } selectTemplates(race, isImporting()); // gets and adds templates - - race.chooseLanguageAutos(isImporting(), this); } // TODO - Change this back @@ -8336,8 +8334,6 @@ getAutoLanguages(); addNaturalWeapons(inTmpl.getListFor(ListKey.NATURAL_WEAPON)); - inTmpl.chooseLanguageAutos(isImporting(), this); - if (PlayerCharacterUtilities.canReassignTemplateFeats()) { final List<String> templateFeats = @@ -11416,7 +11412,7 @@ return -1; } - void addFreeLanguage(final Language aLang) + public void addFreeLanguage(final Language aLang) { this.languages.add(aLang); ++freeLangs; Modified: Trunk/pcgen/code/src/java/pcgen/core/Race.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/Race.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/java/pcgen/core/Race.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -101,13 +101,6 @@ txt.append(StringUtil.joinToStringBuffer(Globals.getContext().unparse( this), "\t")); txt.append("\t"); - - if ((getChooseLanguageAutos() != null) - && (getChooseLanguageAutos().length() > 0)) - { - txt.append("\tCHOOSE:LANGAUTO:").append(getChooseLanguageAutos()); - } - return txt.toString(); } Modified: Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/java/pcgen/gui/editor/EditorMainForm.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -765,7 +765,8 @@ // sel = pnlLanguages.getSelectedList2(); aString = EditUtil.delimitArray(sel, '|'); - thisRace.setChooseLanguageAutos(aString); + context.unconditionallyProcess(thisRace, "CHOOSE", "LANGAUTO|" + + aString); // // Save feats @@ -917,7 +918,8 @@ // sel = pnlLanguages.getSelectedList2(); aString = EditUtil.delimitArray(sel, '|'); - thisPCTemplate.setChooseLanguageAutos(aString); + context.unconditionallyProcess(thisPCTemplate, "CHOOSE", "LANGAUTO|" + + aString); // // Save feats @@ -2058,14 +2060,19 @@ if ((editType == EditorConstants.EDIT_TEMPLATE) || (editType == EditorConstants.EDIT_RACE)) { - if (editType == EditorConstants.EDIT_TEMPLATE) + aString = ""; + String[] unparsed = Globals.getContext().unparse(thisPObject, "CHOOSE"); + if (unparsed != null) { - aString = ((PCTemplate) thisPObject).getChooseLanguageAutos(); + for (String s : unparsed) + { + if (s.startsWith("LANGAUTO|")) + { + aString = s; + break; + } + } } - else - { - aString = ((Race) thisPObject).getChooseLanguageAutos(); - } aTok = new StringTokenizer(aString, "|", false); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/add/LanguageToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/add/LanguageToken.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/add/LanguageToken.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -134,11 +134,11 @@ return false; } - ReferenceChoiceSet<Language> rcs = new ReferenceChoiceSet<Language>( - refs); - ChoiceSet<Language> cs = new ChoiceSet<Language>("LANGUAGE", rcs); - PersistentTransitionChoice<Language> tc = new PersistentTransitionChoice<Language>( - cs, count); + ReferenceChoiceSet<Language> rcs = + new ReferenceChoiceSet<Language>(refs); + ChoiceSet<Language> cs = new ChoiceSet<Language>(getTokenName(), rcs); + PersistentTransitionChoice<Language> tc = + new PersistentTransitionChoice<Language>(cs, count); context.getObjectContext().addToList(obj, ListKey.ADD, tc); tc.setTitle("Language Choice"); tc.setChoiceActor(this); @@ -160,7 +160,8 @@ for (TransitionChoice<?> container : addedItems) { ChoiceSet<?> cs = container.getChoices(); - if (LANGUAGE_CLASS.equals(cs.getChoiceClass())) + if (cs.getName().equals(getTokenName()) + && LANGUAGE_CLASS.equals(cs.getChoiceClass())) { Formula f = container.getCount(); if (f == null) Deleted: Trunk/pcgen/code/src/java/plugin/lsttokens/choose/LangAutoToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/choose/LangAutoToken.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/choose/LangAutoToken.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -1,63 +0,0 @@ -package plugin.lsttokens.choose; - -import pcgen.core.PCTemplate; -import pcgen.core.PObject; -import pcgen.core.Race; -import pcgen.persistence.lst.ChooseLstToken; -import pcgen.util.Logging; - -public class LangAutoToken implements ChooseLstToken -{ - - public boolean parse(PObject po, String prefix, String value) - { - if (value == null) - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " requires additional arguments"); - return false; - } - if (value.indexOf('[') != -1) - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments may not contain [] : " + value); - return false; - } - if (value.charAt(0) == '|') - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments may not start with | : " + value); - return false; - } - if (value.charAt(value.length() - 1) == '|') - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments may not end with | : " + value); - return false; - } - if (value.indexOf("||") != -1) - { - Logging.errorPrint("CHOOSE:" + getTokenName() - + " arguments uses double separator || : " + value); - return false; - } - if (po instanceof PCTemplate) - { - ((PCTemplate) po).setChooseLanguageAutos(value); - return true; - } - else if (po instanceof Race) - { - ((Race) po).setChooseLanguageAutos(value); - return true; - } - Logging.errorPrint("CHOOSE:" + getTokenName() + " is not supported in " - + po.getClass().getName() + " files"); - return false; - } - - public String getTokenName() - { - return "LANGAUTO"; - } -} Added: Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -0,0 +1,190 @@ +/* + * Copyright 2007 (C) Thomas Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package plugin.lsttokens.race; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.StringTokenizer; + +import pcgen.base.formula.Formula; +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.base.CDOMReference; +import pcgen.cdom.base.ChoiceSet; +import pcgen.cdom.base.Constants; +import pcgen.cdom.base.PersistentChoiceActor; +import pcgen.cdom.base.PersistentTransitionChoice; +import pcgen.cdom.base.TransitionChoice; +import pcgen.cdom.choiceset.ReferenceChoiceSet; +import pcgen.cdom.enumeration.ListKey; +import pcgen.core.Globals; +import pcgen.core.Language; +import pcgen.core.PlayerCharacter; +import pcgen.core.Race; +import pcgen.rules.context.Changes; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.TokenUtilities; +import pcgen.rules.persistence.token.AbstractToken; +import pcgen.rules.persistence.token.CDOMSecondaryToken; +import pcgen.util.Logging; + +public class ChooseLangautoToken extends AbstractToken implements + CDOMSecondaryToken<Race>, PersistentChoiceActor<Language> +{ + + private static final Class<Language> LANGUAGE_CLASS = Language.class; + + public String getParentToken() + { + return "CHOOSE"; + } + + private String getFullName() + { + return getParentToken() + ":" + getTokenName(); + } + + @Override + public String getTokenName() + { + return "LANGAUTO"; + } + + public boolean parse(LoadContext context, Race obj, String value) + { + if (isEmpty(value) || hasIllegalSeparator('|', value)) + { + return false; + } + List<CDOMReference<Language>> refs = + new ArrayList<CDOMReference<Language>>(); + StringTokenizer tok = new StringTokenizer(value, Constants.PIPE); + boolean foundAny = false; + boolean foundOther = false; + while (tok.hasMoreTokens()) + { + String tokText = tok.nextToken(); + CDOMReference<Language> lang; + if (Constants.LST_ALL.equals(tokText)) + { + foundAny = true; + lang = context.ref.getCDOMAllReference(LANGUAGE_CLASS); + } + else + { + foundOther = true; + lang = + TokenUtilities.getTypeOrPrimitive(context, + LANGUAGE_CLASS, tokText); + } + if (lang == null) + { + Logging.errorPrint(" Error was encountered while parsing " + + getFullName() + ": " + value + + " had an invalid reference: " + tokText); + return false; + } + refs.add(lang); + } + if (foundAny && foundOther) + { + Logging.errorPrint("Non-sensical " + getFullName() + + ": Contains ANY and a specific reference: " + value); + return false; + } + + ReferenceChoiceSet<Language> rcs = + new ReferenceChoiceSet<Language>(refs); + ChoiceSet<Language> cs = new ChoiceSet<Language>(getTokenName(), rcs); + PersistentTransitionChoice<Language> tc = + new PersistentTransitionChoice<Language>(cs, Formula.ONE); + context.getObjectContext().addToList(obj, ListKey.ADD, tc); + tc.setTitle("Pick a Language"); + tc.setChoiceActor(this); + return true; + } + + public String[] unparse(LoadContext context, Race obj) + { + Changes<PersistentTransitionChoice<?>> grantChanges = + context.getObjectContext().getListChanges(obj, ListKey.ADD); + Collection<PersistentTransitionChoice<?>> addedItems = + grantChanges.getAdded(); + if (addedItems == null || addedItems.isEmpty()) + { + // Zero indicates no Token + return null; + } + List<String> addStrings = new ArrayList<String>(); + for (TransitionChoice<?> container : addedItems) + { + ChoiceSet<?> cs = container.getChoices(); + if (cs.getName().equals(getTokenName()) + && LANGUAGE_CLASS.equals(cs.getChoiceClass())) + { + Formula f = container.getCount(); + if (f == null) + { + context.addWriteMessage("Unable to find " + getFullName() + + " Count"); + return null; + } + StringBuilder sb = new StringBuilder(); + sb.append(cs.getLSTformat().replaceAll(Constants.COMMA, + Constants.PIPE)); + addStrings.add(sb.toString()); + + // assoc.getAssociation(AssociationKey.CHOICE_MAXCOUNT); + } + } + return addStrings.toArray(new String[addStrings.size()]); + } + + public Class<Race> getTokenClass() + { + return Race.class; + } + + public void applyChoice(CDOMObject owner, Language choice, + PlayerCharacter pc) + { + pc.addFreeLanguage(choice); + } + + public boolean allow(Language choice, PlayerCharacter pc, boolean allowStack) + { + return !pc.getLanguagesList().contains(choice); + } + + public Language decodeChoice(String s) + { + return Globals.getContext().ref.silentlyGetConstructedCDOMObject( + LANGUAGE_CLASS, s); + } + + public String encodeChoice(Object choice) + { + return ((Language) choice).getKeyName(); + } + + public void restoreChoice(PlayerCharacter pc, CDOMObject owner, + Language choice) + { + // No action required + } +} Property changes on: Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: Trunk/pcgen/code/src/java/plugin/lsttokens/template/ChooseLangautoToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/template/ChooseLangautoToken.java (rev 0) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/template/ChooseLangautoToken.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -0,0 +1,191 @@ +/* + * Copyright 2007 (C) Thomas Parker <th...@us...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package plugin.lsttokens.template; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.StringTokenizer; + +import pcgen.base.formula.Formula; +import pcgen.cdom.base.CDOMObject; +import pcgen.cdom.base.CDOMReference; +import pcgen.cdom.base.ChoiceSet; +import pcgen.cdom.base.Constants; +import pcgen.cdom.base.PersistentChoiceActor; +import pcgen.cdom.base.PersistentTransitionChoice; +import pcgen.cdom.base.TransitionChoice; +import pcgen.cdom.choiceset.ReferenceChoiceSet; +import pcgen.cdom.enumeration.ListKey; +import pcgen.core.Globals; +import pcgen.core.Language; +import pcgen.core.PCTemplate; +import pcgen.core.PlayerCharacter; +import pcgen.rules.context.Changes; +import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.TokenUtilities; +import pcgen.rules.persistence.token.AbstractToken; +import pcgen.rules.persistence.token.CDOMSecondaryToken; +import pcgen.util.Logging; + +public class ChooseLangautoToken extends AbstractToken implements + CDOMSecondaryToken<PCTemplate>, PersistentChoiceActor<Language> +{ + + private static final Class<Language> LANGUAGE_CLASS = Language.class; + + public String getParentToken() + { + return "CHOOSE"; + } + + private String getFullName() + { + return getParentToken() + ":" + getTokenName(); + } + + @Override + public String getTokenName() + { + return "LANGAUTO"; + } + + public boolean parse(LoadContext context, PCTemplate obj, String value) + { + if (isEmpty(value) || hasIllegalSeparator('|', value)) + { + return false; + } + + List<CDOMReference<Language>> refs = + new ArrayList<CDOMReference<Language>>(); + StringTokenizer tok = new StringTokenizer(value, Constants.PIPE); + boolean foundAny = false; + boolean foundOther = false; + while (tok.hasMoreTokens()) + { + String tokText = tok.nextToken(); + CDOMReference<Language> lang; + if (Constants.LST_ALL.equals(tokText)) + { + foundAny = true; + lang = context.ref.getCDOMAllReference(LANGUAGE_CLASS); + } + else + { + foundOther = true; + lang = + TokenUtilities.getTypeOrPrimitive(context, + LANGUAGE_CLASS, tokText); + } + if (lang == null) + { + Logging.errorPrint(" Error was encountered while parsing " + + getFullName() + ": " + value + + " had an invalid reference: " + tokText); + return false; + } + refs.add(lang); + } + if (foundAny && foundOther) + { + Logging.errorPrint("Non-sensical " + getFullName() + + ": Contains ANY and a specific reference: " + value); + return false; + } + + ReferenceChoiceSet<Language> rcs = + new ReferenceChoiceSet<Language>(refs); + ChoiceSet<Language> cs = new ChoiceSet<Language>(getTokenName(), rcs); + PersistentTransitionChoice<Language> tc = + new PersistentTransitionChoice<Language>(cs, Formula.ONE); + context.getObjectContext().addToList(obj, ListKey.ADD, tc); + tc.setTitle("Pick a Language"); + tc.setChoiceActor(this); + return true; + } + + public String[] unparse(LoadContext context, PCTemplate obj) + { + Changes<PersistentTransitionChoice<?>> grantChanges = + context.getObjectContext().getListChanges(obj, ListKey.ADD); + Collection<PersistentTransitionChoice<?>> addedItems = + grantChanges.getAdded(); + if (addedItems == null || addedItems.isEmpty()) + { + // Zero indicates no Token + return null; + } + List<String> addStrings = new ArrayList<String>(); + for (TransitionChoice<?> container : addedItems) + { + ChoiceSet<?> cs = container.getChoices(); + if (cs.getName().equals(getTokenName()) + && LANGUAGE_CLASS.equals(cs.getChoiceClass())) + { + Formula f = container.getCount(); + if (f == null) + { + context.addWriteMessage("Unable to find " + getFullName() + + " Count"); + return null; + } + StringBuilder sb = new StringBuilder(); + sb.append(cs.getLSTformat().replaceAll(Constants.COMMA, + Constants.PIPE)); + addStrings.add(sb.toString()); + + // assoc.getAssociation(AssociationKey.CHOICE_MAXCOUNT); + } + } + return addStrings.toArray(new String[addStrings.size()]); + } + + public Class<PCTemplate> getTokenClass() + { + return PCTemplate.class; + } + + public void applyChoice(CDOMObject owner, Language choice, + PlayerCharacter pc) + { + pc.addFreeLanguage(choice); + } + + public boolean allow(Language choice, PlayerCharacter pc, boolean allowStack) + { + return !pc.getLanguagesList().contains(choice); + } + + public Language decodeChoice(String s) + { + return Globals.getContext().ref.silentlyGetConstructedCDOMObject( + LANGUAGE_CLASS, s); + } + + public String encodeChoice(Object choice) + { + return ((Language) choice).getKeyName(); + } + + public void restoreChoice(PlayerCharacter pc, CDOMObject owner, + Language choice) + { + // No action required + } +} Property changes on: Trunk/pcgen/code/src/java/plugin/lsttokens/template/ChooseLangautoToken.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: Trunk/pcgen/code/src/utest/plugin/lsttokens/add/ClassSkillsLevelTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/add/ClassSkillsLevelTokenTest.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/add/ClassSkillsLevelTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -92,4 +92,9 @@ return false; } + @Override + public boolean allowsFormula() + { + return true; + } } Modified: Trunk/pcgen/code/src/utest/plugin/lsttokens/add/ClassSkillsTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/add/ClassSkillsTokenTest.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/add/ClassSkillsTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -92,4 +92,9 @@ return false; } + @Override + public boolean allowsFormula() + { + return true; + } } Modified: Trunk/pcgen/code/src/utest/plugin/lsttokens/add/EquipTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/add/EquipTokenTest.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/add/EquipTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -91,4 +91,9 @@ return false; } + @Override + public boolean allowsFormula() + { + return true; + } } Modified: Trunk/pcgen/code/src/utest/plugin/lsttokens/add/LanguageTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/add/LanguageTokenTest.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/add/LanguageTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -91,4 +91,9 @@ return false; } + @Override + public boolean allowsFormula() + { + return true; + } } Modified: Trunk/pcgen/code/src/utest/plugin/lsttokens/add/SkillTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/add/SkillTokenTest.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/add/SkillTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -91,4 +91,9 @@ return false; } + @Override + public boolean allowsFormula() + { + return true; + } } Modified: Trunk/pcgen/code/src/utest/plugin/lsttokens/add/TemplateTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/add/TemplateTokenTest.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/add/TemplateTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -91,4 +91,9 @@ return false; } + @Override + public boolean allowsFormula() + { + return true; + } } Modified: Trunk/pcgen/code/src/utest/plugin/lsttokens/add/VFeatTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/add/VFeatTokenTest.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/add/VFeatTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -102,6 +102,12 @@ loadContext.ref.reassociateCategory(AbilityCategory.FEAT, obj); } + @Override + public boolean allowsFormula() + { + return true; + } + @Test public void testRoundRobinStacks() throws PersistenceLayerException { Added: Trunk/pcgen/code/src/utest/plugin/lsttokens/race/ChooseLangautoTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/race/ChooseLangautoTokenTest.java (rev 0) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/race/ChooseLangautoTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -0,0 +1,106 @@ +/* + * + * 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.race; + +import org.junit.Test; + +import pcgen.cdom.base.CDOMObject; +import pcgen.core.Language; +import pcgen.core.Race; +import pcgen.rules.persistence.CDOMLoader; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.rules.persistence.token.CDOMSecondaryToken; +import plugin.lsttokens.ChooseLst; +import plugin.lsttokens.testsupport.AbstractAddTokenTestCase; +import plugin.lsttokens.testsupport.CDOMTokenLoader; + +public class ChooseLangautoTokenTest extends + AbstractAddTokenTestCase<CDOMObject, Language> +{ + + static ChooseLst token = new ChooseLst(); + static ChooseLangautoToken subtoken = new ChooseLangautoToken(); + static CDOMTokenLoader<CDOMObject> loader = + new CDOMTokenLoader<CDOMObject>(CDOMObject.class); + + @Override + public char getJoinCharacter() + { + return '|'; + } + + @Override + public Class<Race> getCDOMClass() + { + return Race.class; + } + + @Override + public CDOMLoader<CDOMObject> getLoader() + { + return loader; + } + + @Override + public CDOMPrimaryToken<CDOMObject> getToken() + { + return token; + } + + @Override + public CDOMSecondaryToken<?> getSubToken() + { + return subtoken; + } + + @Override + public Class<Language> getTargetClass() + { + return Language.class; + } + + @Override + public boolean isAllLegal() + { + return true; + } + + @Override + public boolean isTypeLegal() + { + return true; + } + + @Test + public void testEmpty() + { + // Just to get Eclipse to recognize this as a JUnit 4.0 Test Case + } + + @Override + public boolean allowsParenAsSub() + { + return false; + } + + @Override + public boolean allowsFormula() + { + return false; + } +} Property changes on: Trunk/pcgen/code/src/utest/plugin/lsttokens/race/ChooseLangautoTokenTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: Trunk/pcgen/code/src/utest/plugin/lsttokens/template/ChooseLangautoTokenTest.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/template/ChooseLangautoTokenTest.java (rev 0) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/template/ChooseLangautoTokenTest.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -0,0 +1,106 @@ +/* + * + * 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.template; + +import org.junit.Test; + +import pcgen.cdom.base.CDOMObject; +import pcgen.core.Language; +import pcgen.core.PCTemplate; +import pcgen.rules.persistence.CDOMLoader; +import pcgen.rules.persistence.token.CDOMPrimaryToken; +import pcgen.rules.persistence.token.CDOMSecondaryToken; +import plugin.lsttokens.ChooseLst; +import plugin.lsttokens.testsupport.AbstractAddTokenTestCase; +import plugin.lsttokens.testsupport.CDOMTokenLoader; + +public class ChooseLangautoTokenTest extends + AbstractAddTokenTestCase<CDOMObject, Language> +{ + + static ChooseLst token = new ChooseLst(); + static ChooseLangautoToken subtoken = new ChooseLangautoToken(); + static CDOMTokenLoader<CDOMObject> loader = + new CDOMTokenLoader<CDOMObject>(CDOMObject.class); + + @Override + public char getJoinCharacter() + { + return '|'; + } + + @Override + public Class<PCTemplate> getCDOMClass() + { + return PCTemplate.class; + } + + @Override + public CDOMLoader<CDOMObject> getLoader() + { + return loader; + } + + @Override + public CDOMPrimaryToken<CDOMObject> getToken() + { + return token; + } + + @Override + public CDOMSecondaryToken<?> getSubToken() + { + return subtoken; + } + + @Override + public Class<Language> getTargetClass() + { + return Language.class; + } + + @Override + public boolean isAllLegal() + { + return true; + } + + @Override + public boolean isTypeLegal() + { + return true; + } + + @Test + public void testEmpty() + { + // Just to get Eclipse to recognize this as a JUnit 4.0 Test Case + } + + @Override + public boolean allowsParenAsSub() + { + return false; + } + + @Override + public boolean allowsFormula() + { + return false; + } +} Property changes on: Trunk/pcgen/code/src/utest/plugin/lsttokens/template/ChooseLangautoTokenTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: Trunk/pcgen/code/src/utest/plugin/lsttokens/testsupport/AbstractAddTokenTestCase.java =================================================================== --- Trunk/pcgen/code/src/utest/plugin/lsttokens/testsupport/AbstractAddTokenTestCase.java 2008-11-11 23:41:52 UTC (rev 8404) +++ Trunk/pcgen/code/src/utest/plugin/lsttokens/testsupport/AbstractAddTokenTestCase.java 2008-11-12 00:49:15 UTC (rev 8405) @@ -45,6 +45,8 @@ public abstract boolean allowsParenAsSub(); + public abstract boolean allowsFormula(); + @Override public void setUp() throws PersistenceLayerException, URISyntaxException { @@ -78,7 +80,7 @@ @Test public void testInvalidInputOnlySubTokenPipe() - throws PersistenceLayerException + throws PersistenceLayerException { assertFalse(parse(getSubTokenName() + '|')); assertNoSideEffects(); @@ -88,7 +90,7 @@ public void testInvalidInputJoinOnly() throws PersistenceLayerException { assertFalse(parse(getSubTokenName() + '|' - + Character.toString(getJoinCharacter()))); + + Character.toString(getJoinCharacter()))); assertNoSideEffects(); } @@ -135,19 +137,25 @@ @Test public void testInvalidInputNegativeFormula() - throws PersistenceLayerException + throws PersistenceLayerException { - construct(primaryContext, "TestWP1"); - assertFalse(parse(getSubTokenName() + '|' + "-1|TestWP1")); - assertNoSideEffects(); + if (allowsFormula()) + { + construct(primaryContext, "TestWP1"); + assertFalse(parse(getSubTokenName() + '|' + "-1|TestWP1")); + assertNoSideEffects(); + } } @Test public void testInvalidInputZeroFormula() throws PersistenceLayerException { - construct(primaryContext, "TestWP1"); - assertFalse(parse(getSubTokenName() + '|' + "0|TestWP1")); - assertNoSideEffects(); + if (allowsFormula()) + { + construct(primaryContext, "TestWP1"); + assertFalse(parse(getSubTokenName() + '|' + "0|TestWP1")); + assertNoSideEffects(); + } } @Test @@ -162,7 +170,7 @@ @Test public void testInvalidInputTypeUnterminated() - throws PersistenceLayerException + throws PersistenceLayerException { if (isTypeLegal()) { @@ -173,7 +181,7 @@ @Test public void testInvalidInputClearDotTypeDoubleSeparator() - throws PersistenceLayerException + throws PersistenceLayerException { if (isTypeLegal()) { @@ -184,7 +192,7 @@ @Test public void testInvalidInputClearDotTypeFalseStart() - throws PersistenceLayerException + throws PersistenceLayerException { if (isTypeLegal()) { @@ -281,7 +289,7 @@ { construct(primaryContext, "TestWP1"); assertFalse(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter())); + + getJoinCharacter())); assertNoSideEffects(); } @@ -290,7 +298,7 @@ { construct(primaryContext, "TestWP1"); assertFalse(parse(getSubTokenName() + '|' + getJoinCharacter() - + "TestWP1")); + + "TestWP1")); assertNoSideEffects(); } @@ -300,7 +308,7 @@ construct(primaryContext, "TestWP1"); construct(primaryContext, "TestWP2"); assertFalse(parse(getSubTokenName() + '|' + "TestWP2" - + getJoinCharacter() + getJoinCharacter() + "TestWP1")); + + getJoinCharacter() + getJoinCharacter() + "TestWP1")); assertNoSideEffects(); } @@ -310,13 +318,13 @@ // Explicitly do NOT build TestWP2 construct(primaryContext, "TestWP1"); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TestWP2")); assertFalse(primaryContext.ref.validate()); } @Test public void testInvalidInputCheckTypeEqualLength() - throws PersistenceLayerException + throws PersistenceLayerException { // Explicitly do NOT build TestWP2 (this checks that the TYPE= doesn't // consume the | @@ -324,15 +332,15 @@ { construct(primaryContext, "TestWP1"); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TYPE=TestType" + getJoinCharacter() - + "TestWP2")); + + getJoinCharacter() + "TYPE=TestType" + getJoinCharacter() + + "TestWP2")); assertFalse(primaryContext.ref.validate()); } } @Test public void testInvalidInputCheckTypeDotLength() - throws PersistenceLayerException + throws PersistenceLayerException { // Explicitly do NOT build TestWP2 (this checks that the TYPE= doesn't // consume the | @@ -340,8 +348,8 @@ { construct(primaryContext, "TestWP1"); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TYPE.TestType.OtherTestType" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TYPE.TestType.OtherTestType" + + getJoinCharacter() + "TestWP2")); assertFalse(primaryContext.ref.validate()); } } @@ -354,7 +362,7 @@ assertTrue(parse(getSubTokenName() + '|' + "TestWP1")); assertTrue(primaryContext.ref.validate()); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TestWP2")); assertTrue(primaryContext.ref.validate()); if (isTypeLegal()) { @@ -363,12 +371,12 @@ assertTrue(parse(getSubTokenName() + '|' + "TYPE.TestType")); assertTrue(primaryContext.ref.validate()); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2" + getJoinCharacter() - + "TYPE=TestType")); + + getJoinCharacter() + "TestWP2" + getJoinCharacter() + + "TYPE=TestType")); assertTrue(primaryContext.ref.validate()); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2" + getJoinCharacter() - + "TYPE=TestType.OtherTestType")); + + getJoinCharacter() + "TestWP2" + getJoinCharacter() + + "TYPE=TestType.OtherTestType")); assertTrue(primaryContext.ref.validate()); } if (isAllLegal()) @@ -397,17 +405,23 @@ @Test public void testRoundRobinCount() throws PersistenceLayerException { - construct(primaryContext, "TestWP1 (Test)"); - construct(secondaryContext, "TestWP1 (Test)"); - runRoundRobin(getSubTokenName() + '|' + "4|TestWP1 (Test)"); + if (allowsFormula()) + { + construct(primaryContext, "TestWP1 (Test)"); + construct(secondaryContext, "TestWP1 (Test)"); + runRoundRobin(getSubTokenName() + '|' + "4|TestWP1 (Test)"); + } } @Test public void testRoundRobinFormulaCount() throws PersistenceLayerException { - construct(primaryContext, "TestWP1 (Test)"); - construct(secondaryContext, "TestWP1 (Test)"); - runRoundRobin(getSubTokenName() + '|' + "INT|TestWP1 (Test)"); + if (allowsFormula()) + { + construct(primaryContext, "TestWP1 (Test)"); + construct(secondaryContext, "TestWP1 (Test)"); + runRoundRobin(getSubTokenName() + '|' + "INT|TestWP1 (Test)"); + } } @Test @@ -442,7 +456,7 @@ construct(secondaryContext, "TestWP2"); construct(secondaryContext, "TestWP3"); runRoundRobin(getSubTokenName() + '|' + "TestWP1" + getJoinCharacter() - + "TestWP2" + getJoinCharacter() + "TestWP3"); + + "TestWP2" + getJoinCharacter() + "TestWP3"); } @Test @@ -455,9 +469,8 @@ construct(secondaryContext, "TestWP1"); construct(secondaryContext, "TestWP2"); runRoundRobin(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2" + getJoinCharacter() - + "TYPE=OtherTestType" + getJoinCharacter() - + "TYPE=TestType"); + + getJoinCharacter() + "TestWP2" + getJoinCharacter() + + "TYPE=OtherTestType" + getJoinCharacter() + "TYPE=TestType"); } } @@ -476,7 +489,7 @@ if (isTypeLegal()) { runRoundRobin(getSubTokenName() + '|' - + "TYPE=TestAltType.TestThirdType.TestType"); + + "TYPE=TestAltType.TestThirdType.TestType"); } } @@ -489,7 +502,7 @@ { construct(primaryContext, "TestWP1"); assertFalse(parse(getSubTokenName() + '|' + "ALL" - + getJoinCharacter() + "TestWP1")); + + getJoinCharacter() + "TestWP1")); assertNoSideEffects(); } } @@ -501,7 +514,7 @@ { construct(primaryContext, "TestWP1"); assertFalse(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "ALL")); + + getJoinCharacter() + "ALL")); assertNoSideEffects(); } } @@ -512,7 +525,7 @@ if (isTypeLegal() && isAllLegal()) { assertFalse(parse(getSubTokenName() + '|' + "ALL" - + getJoinCharacter() + "TYPE=TestType")); + + getJoinCharacter() + "TYPE=TestType")); assertNoSideEffects(); } } @@ -523,14 +536,14 @@ if (isTypeLegal() && isAllLegal()) { assertFalse(parse(getSubTokenName() + '|' + "TYPE=TestType" - + getJoinCharacter() + "ALL")); + + getJoinCharacter() + "ALL")); assertNoSideEffects(); } } @Test public void testInputInvalidAddsTypeNoSideEffect() - throws PersistenceLayerException + throws PersistenceLayerException { if (isTypeLegal()) { @@ -541,18 +554,18 @@ construct(primaryContext, "TestWP3"); construct(secondaryContext, "TestWP3"); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TestWP2")); assertTrue(parseSecondary(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TestWP2")); assertFalse(parse(getSubTokenName() + '|' + "TestWP3" - + getJoinCharacter() + "TYPE=")); + + getJoinCharacter() + "TYPE=")); assertNoSideEffects(); } } @Test public void testInputInvalidAddsBasicNoSideEffect() - throws PersistenceLayerException + throws PersistenceLayerException { construct(primaryContext, "TestWP1"); construct(secondaryContext, "TestWP1"); @@ -563,17 +576,17 @@ construct(primaryContext, "TestWP4"); construct(secondaryContext, "TestWP4"); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TestWP2")); assertTrue(parseSecondary(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TestWP2")); assertFalse(parse(getSubTokenName() + '|' + "TestWP3" - + getJoinCharacter() + getJoinCharacter() + "TestWP4")); + + getJoinCharacter() + getJoinCharacter() + "TestWP4")); assertNoSideEffects(); } @Test public void testInputInvalidAddsAllNoSideEffect() - throws PersistenceLayerException + throws PersistenceLayerException { if (isAllLegal()) { @@ -584,11 +597,11 @@ construct(primaryContext, "TestWP3"); construct(secondaryContext, "TestWP3"); assertTrue(parse(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TestWP2")); assertTrue(parseSecondary(getSubTokenName() + '|' + "TestWP1" - + getJoinCharacter() + "TestWP2")); + + getJoinCharacter() + "TestWP2")); assertFalse(parse(getSubTokenName() + '|' + "TestWP3" - + getJoinCharacter() + "ALL")); + + getJoinCharacter() + "ALL")); assertNoSideEffects(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |