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. |