From: <th...@us...> - 2007-08-27 16:26:59
|
Revision: 3887 http://pcgen.svn.sourceforge.net/pcgen/?rev=3887&view=rev Author: thpr Date: 2007-08-26 20:41:01 -0700 (Sun, 26 Aug 2007) Log Message: ----------- CDOM: Remove/Race Token changes for CHOOSE changes & token commit requirement * non working build * Modified Paths: -------------- branches/cdom/code/src/java/plugin/lsttokens/race/CrToken.java branches/cdom/code/src/java/plugin/lsttokens/race/FeatToken.java branches/cdom/code/src/java/plugin/lsttokens/race/HitdiceadvancementToken.java branches/cdom/code/src/java/plugin/lsttokens/race/HitdieToken.java branches/cdom/code/src/java/plugin/lsttokens/race/LangbonusToken.java branches/cdom/code/src/java/plugin/lsttokens/race/MonccskillToken.java branches/cdom/code/src/java/plugin/lsttokens/race/MoncskillToken.java branches/cdom/code/src/java/plugin/lsttokens/race/MonsterclassToken.java branches/cdom/code/src/java/plugin/lsttokens/race/SkillmultToken.java branches/cdom/code/src/java/plugin/lsttokens/race/StartfeatsToken.java branches/cdom/code/src/java/plugin/lsttokens/race/WeaponbonusToken.java branches/cdom/code/src/java/plugin/lsttokens/remove/FeatToken.java Modified: branches/cdom/code/src/java/plugin/lsttokens/race/CrToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/CrToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/CrToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -26,7 +26,7 @@ import pcgen.cdom.base.LSTWriteable; import pcgen.cdom.content.ChallengeRating; import pcgen.core.Race; -import pcgen.persistence.GraphChanges; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.lst.RaceLstToken; @@ -68,7 +68,7 @@ public String[] unparse(LoadContext context, Race race) { - GraphChanges<ChallengeRating> changes = + AssociatedChanges<ChallengeRating> changes = context.getGraphContext().getChangesFromToken(getTokenName(), race, ChallengeRating.class); if (changes == null) Modified: branches/cdom/code/src/java/plugin/lsttokens/race/FeatToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/FeatToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/FeatToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -39,11 +39,10 @@ import pcgen.cdom.enumeration.AbilityCategory; import pcgen.cdom.enumeration.AbilityNature; import pcgen.cdom.enumeration.AssociationKey; -import pcgen.cdom.graph.PCGraphGrantsEdge; import pcgen.core.Ability; import pcgen.core.Race; import pcgen.core.prereq.Prerequisite; -import pcgen.persistence.GraphChanges; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.lst.AbstractToken; import pcgen.persistence.lst.RaceLstToken; @@ -91,15 +90,15 @@ return false; } - ArrayList<PCGraphGrantsEdge> edgeList = - new ArrayList<PCGraphGrantsEdge>(); + ArrayList<AssociatedPrereqObject> edgeList = + new ArrayList<AssociatedPrereqObject>(); while (true) { CDOMCategorizedSingleRef<Ability> ability = context.ref.getCDOMReference(ABILITY_CLASS, AbilityCategory.FEAT, token); - PCGraphGrantsEdge edge = + AssociatedPrereqObject edge = context.getGraphContext().grant(getTokenName(), obj, ability); edge.setAssociation(AssociationKey.ABILITY_NATURE, @@ -127,9 +126,9 @@ + "PRExxx tags in " + getTokenName() + ":?)"); return false; } - for (PCGraphGrantsEdge edge : edgeList) + for (AssociatedPrereqObject edge : edgeList) { - edge.addPreReq(prereq); + edge.addPrerequisite(prereq); } if (!tok.hasMoreTokens()) { @@ -143,7 +142,7 @@ public String[] unparse(LoadContext context, Race race) { - GraphChanges<Ability> changes = + AssociatedChanges<Ability> changes = context.getGraphContext().getChangesFromToken(getTokenName(), race, ABILITY_CLASS); if (changes == null) Modified: branches/cdom/code/src/java/plugin/lsttokens/race/HitdiceadvancementToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/HitdiceadvancementToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/HitdiceadvancementToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -92,14 +92,8 @@ final StringTokenizer commaTok = new StringTokenizer(value, Constants.COMMA); - if (context.getObjectContext().containsListFor(race, - ListKey.HITDICE_ADVANCEMENT)) - { - Logging.errorPrint("Encountered second " + getTokenName() - + ": overwriting previous advancement list"); - context.getObjectContext().removeList(race, - ListKey.HITDICE_ADVANCEMENT); - } + context.getObjectContext() + .removeList(race, ListKey.HITDICE_ADVANCEMENT); int last = 1; while (commaTok.hasMoreTokens()) { Modified: branches/cdom/code/src/java/plugin/lsttokens/race/HitdieToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/HitdieToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/HitdieToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -41,7 +41,7 @@ import pcgen.cdom.modifier.HitDieStep; import pcgen.core.PCClass; import pcgen.core.Race; -import pcgen.persistence.GraphChanges; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.lst.AbstractToken; import pcgen.persistence.lst.RaceLstToken; @@ -289,7 +289,7 @@ public String[] unparse(LoadContext context, Race race) { - GraphChanges<HitDieCommandFactory> changes = + AssociatedChanges<HitDieCommandFactory> changes = context.getGraphContext().getChangesFromToken(getTokenName(), race, HitDieCommandFactory.class); if (changes == null) Modified: branches/cdom/code/src/java/plugin/lsttokens/race/LangbonusToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/LangbonusToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/LangbonusToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -31,7 +31,7 @@ import pcgen.core.Language; import pcgen.core.LanguageList; import pcgen.core.Race; -import pcgen.persistence.Changes; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.lst.AbstractToken; import pcgen.persistence.lst.RaceLstToken; @@ -161,10 +161,10 @@ { CDOMReference<LanguageList> swl = context.ref.getCDOMReference(LANGUAGELIST_CLASS, "*Starting"); - Changes<CDOMReference<Language>> changes = + AssociatedChanges<CDOMReference<Language>> changes = context.getListContext().getChangesInList(getTokenName(), race, swl); - if (changes == null || changes.isEmpty()) + if (changes == null) { // Legal if no Language was present in the race return null; @@ -194,10 +194,7 @@ } if (list.isEmpty()) { - // Zero indicates no add or global clear, which is an error - context.addWriteMessage(getTokenName() - + " was expecting non-empty changes to include " - + "added items or global clear"); + // Zero indicates no add or global clear return null; } return list.toArray(new String[list.size()]); Modified: branches/cdom/code/src/java/plugin/lsttokens/race/MonccskillToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/MonccskillToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/MonccskillToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -22,20 +22,22 @@ package plugin.lsttokens.race; import java.util.ArrayList; -import java.util.Collection; import java.util.List; +import java.util.Set; import java.util.StringTokenizer; +import pcgen.base.util.MapToList; import pcgen.cdom.base.AssociatedPrereqObject; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.base.Constants; +import pcgen.cdom.base.LSTWriteable; import pcgen.cdom.base.ReferenceUtilities; import pcgen.cdom.enumeration.AssociationKey; import pcgen.cdom.enumeration.SkillCost; import pcgen.core.ClassSkillList; import pcgen.core.Race; import pcgen.core.Skill; -import pcgen.persistence.Changes; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.lst.AbstractToken; import pcgen.persistence.lst.RaceLstToken; @@ -168,10 +170,10 @@ { CDOMReference<ClassSkillList> swl = context.ref.getCDOMReference(SKILLLIST_CLASS, "*Monster"); - Changes<CDOMReference<Skill>> changes = + AssociatedChanges<CDOMReference<Skill>> changes = context.getListContext().getChangesInList(getTokenName(), race, swl); - if (changes == null || changes.isEmpty()) + if (changes == null) { // Legal if no MONCSKILL was present in the race return null; @@ -196,23 +198,30 @@ } if (changes.hasAddedItems()) { - Collection<CDOMReference<Skill>> addedCollection = - changes.getAdded(); - for (CDOMReference<Skill> added : addedCollection) + MapToList<LSTWriteable, AssociatedPrereqObject> mtl = + changes.getAddedAssociations(); + Set<LSTWriteable> added = mtl.getKeySet(); + for (LSTWriteable ab : added) { - AssociatedPrereqObject se = changes.getAddedAssociation(added); - if (!SkillCost.CROSS_CLASS.equals(se - .getAssociation(AssociationKey.SKILL_COST))) + for (AssociatedPrereqObject assoc : mtl.getListFor(ab)) { - context - .addWriteMessage("Skill Cost must be CROSS_CLASS for Token " - + getTokenName()); - return null; + if (!SkillCost.CROSS_CLASS.equals(assoc + .getAssociation(AssociationKey.SKILL_COST))) + { + context + .addWriteMessage("Skill Cost must be CROSS_CLASS for Token " + + getTokenName()); + return null; + } } } - list.add(ReferenceUtilities.joinLstFormat(addedCollection, - Constants.PIPE)); + list.add(ReferenceUtilities.joinLstFormat(added, Constants.PIPE)); } + if (list.isEmpty()) + { + // Zero indicates no add or clear + return null; + } return list.toArray(new String[list.size()]); } } Modified: branches/cdom/code/src/java/plugin/lsttokens/race/MoncskillToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/MoncskillToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/MoncskillToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -22,20 +22,22 @@ package plugin.lsttokens.race; import java.util.ArrayList; -import java.util.Collection; import java.util.List; +import java.util.Set; import java.util.StringTokenizer; +import pcgen.base.util.MapToList; import pcgen.cdom.base.AssociatedPrereqObject; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.base.Constants; +import pcgen.cdom.base.LSTWriteable; import pcgen.cdom.base.ReferenceUtilities; import pcgen.cdom.enumeration.AssociationKey; import pcgen.cdom.enumeration.SkillCost; import pcgen.core.ClassSkillList; import pcgen.core.Race; import pcgen.core.Skill; -import pcgen.persistence.Changes; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.lst.AbstractToken; import pcgen.persistence.lst.RaceLstToken; @@ -167,10 +169,10 @@ { CDOMReference<ClassSkillList> swl = context.ref.getCDOMReference(SKILLLIST_CLASS, "*Monster"); - Changes<CDOMReference<Skill>> changes = + AssociatedChanges<CDOMReference<Skill>> changes = context.getListContext().getChangesInList(getTokenName(), race, swl); - if (changes == null || changes.isEmpty()) + if (changes == null) { // Legal if no MONCSKILL was present in the race return null; @@ -195,23 +197,30 @@ } if (changes.hasAddedItems()) { - Collection<CDOMReference<Skill>> addedCollection = - changes.getAdded(); - for (CDOMReference<Skill> added : addedCollection) + MapToList<LSTWriteable, AssociatedPrereqObject> mtl = + changes.getAddedAssociations(); + Set<LSTWriteable> added = mtl.getKeySet(); + for (LSTWriteable ab : added) { - AssociatedPrereqObject se = changes.getAddedAssociation(added); - if (!SkillCost.CLASS.equals(se - .getAssociation(AssociationKey.SKILL_COST))) + for (AssociatedPrereqObject assoc : mtl.getListFor(ab)) { - context - .addWriteMessage("Skill Cost must be CLASS for Token " - + getTokenName()); - return null; + if (!SkillCost.CLASS.equals(assoc + .getAssociation(AssociationKey.SKILL_COST))) + { + context + .addWriteMessage("Skill Cost must be CLASS for Token " + + getTokenName()); + return null; + } } } - list.add(ReferenceUtilities.joinLstFormat(addedCollection, - Constants.PIPE)); + list.add(ReferenceUtilities.joinLstFormat(added, Constants.PIPE)); } + if (list.isEmpty()) + { + // Zero indicates no add or clear + return null; + } return list.toArray(new String[list.size()]); } } Modified: branches/cdom/code/src/java/plugin/lsttokens/race/MonsterclassToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/MonsterclassToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/MonsterclassToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -33,7 +33,7 @@ import pcgen.cdom.content.LevelCommandFactory; import pcgen.core.PCClass; import pcgen.core.Race; -import pcgen.persistence.GraphChanges; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.lst.RaceLstToken; import pcgen.util.Logging; @@ -114,7 +114,7 @@ public String[] unparse(LoadContext context, Race race) { - GraphChanges<LevelCommandFactory> changes = + AssociatedChanges<LevelCommandFactory> changes = context.getGraphContext().getChangesFromToken(getTokenName(), race, LevelCommandFactory.class); if (changes == null) Modified: branches/cdom/code/src/java/plugin/lsttokens/race/SkillmultToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/SkillmultToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/SkillmultToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -42,7 +42,7 @@ { try { - race.setInitialSkillMultiplier(Integer.parseInt(value)); + race.setInitialSkillMultiplier(Integer.decode(value)); return true; } catch (NumberFormatException nfe) Modified: branches/cdom/code/src/java/plugin/lsttokens/race/StartfeatsToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/StartfeatsToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/StartfeatsToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -21,8 +21,6 @@ */ package plugin.lsttokens.race; -import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; @@ -32,19 +30,20 @@ import pcgen.cdom.base.CDOMGroupRef; import pcgen.cdom.base.FormulaFactory; import pcgen.cdom.base.LSTWriteable; +import pcgen.cdom.content.ChooseActionContainer; import pcgen.cdom.enumeration.AbilityCategory; import pcgen.cdom.enumeration.AbilityNature; import pcgen.cdom.enumeration.AssociationKey; -import pcgen.cdom.factory.GrantFactory; -import pcgen.cdom.graph.PCGraphGrantsEdge; import pcgen.cdom.helper.ChoiceSet; +import pcgen.cdom.helper.GrantActor; import pcgen.cdom.helper.ReferenceChoiceSet; import pcgen.core.Ability; +import pcgen.core.PCTemplate; import pcgen.core.Race; import pcgen.core.bonus.Bonus; import pcgen.core.bonus.BonusObj; import pcgen.core.prereq.Prerequisite; -import pcgen.persistence.GraphChanges; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.AbstractToken; @@ -115,31 +114,29 @@ return false; } + ChooseActionContainer container = + new ChooseActionContainer(getTokenName()); + container.addActor(new GrantActor<PCTemplate>()); + AssociatedPrereqObject edge = + context.getGraphContext() + .grant(getTokenName(), race, container); + edge.setAssociation(AssociationKey.CHOICE_COUNT, FormulaFactory + .getFormulaFor(featCount)); + edge.setAssociation(AssociationKey.CHOICE_MAXCOUNT, FormulaFactory + .getFormulaFor(featCount)); + edge.setAssociation(AssociationKey.ABILITY_CATEGORY, + AbilityCategory.FEAT); + edge + .setAssociation(AssociationKey.ABILITY_NATURE, AbilityNature.NORMAL); CDOMGroupRef<Ability> ref = context.ref.getCDOMAllReference(ABILITY_CLASS, AbilityCategory.FEAT); ReferenceChoiceSet<Ability> rcs = new ReferenceChoiceSet<Ability>(Collections.singletonList(ref)); ChoiceSet<Ability> cs = new ChoiceSet<Ability>(getTokenName(), rcs); - PCGraphGrantsEdge edge = - context.getGraphContext().grant(getTokenName(), race, cs); - edge.setAssociation(AssociationKey.CHOICE_COUNT, FormulaFactory - .getFormulaFor(featCount)); - edge.setAssociation(AssociationKey.CHOICE_MAXCOUNT, FormulaFactory - .getFormulaFor(featCount)); - GrantFactory<Ability> gf = new GrantFactory<Ability>(edge); + edge.setAssociation(AssociationKey.CHOICE, cs); + /* - * FUTURE Technically, this Category item should not be in the - * GrantFactory, as it really belogs as something that can be extracted - * from the ChoiceSet... - */ - gf - .setAssociation(AssociationKey.ABILITY_CATEGORY, - AbilityCategory.FEAT); - gf.setAssociation(AssociationKey.ABILITY_NATURE, AbilityNature.NORMAL); - PCGraphGrantsEdge gfedge = - context.getGraphContext().grant(getTokenName(), race, gf); - /* * This prereq exists solely to prevent the ability to select Feats * before first level. It simply aligns this to the rules that provide * for the extra feats for a starting character (which is first level) @@ -148,61 +145,66 @@ */ Prerequisite prereq = getPrerequisite("PREMULT:1,[PRELEVEL:1],[PREHD:1+]"); - gfedge.addPreReq(prereq); + edge.addPrerequisite(prereq); return true; } public String[] unparse(LoadContext context, Race race) { - GraphChanges<ChoiceSet> choiceChanges = + AssociatedChanges<ChooseActionContainer> grantChanges = context.getGraphContext().getChangesFromToken(getTokenName(), - race, ChoiceSet.class); - if (choiceChanges == null) + race, ChooseActionContainer.class); + if (grantChanges == null) { return null; } MapToList<LSTWriteable, AssociatedPrereqObject> mtl = - choiceChanges.getAddedAssociations(); + grantChanges.getAddedAssociations(); if (mtl == null || mtl.isEmpty()) { // Zero indicates no Token return null; } - GraphChanges<GrantFactory> grantChanges = - context.getGraphContext().getChangesFromToken(getTokenName(), - race, GrantFactory.class); - Collection<LSTWriteable> grantAdded = grantChanges.getAdded(); - if (grantAdded == null || grantAdded.isEmpty()) - { - // Zero indicates no Token present - return null; - } - List<String> addStrings = new ArrayList<String>(); + String returnString = null; for (LSTWriteable lstw : mtl.getKeySet()) { - ChoiceSet<?> cs = (ChoiceSet<?>) lstw; - if (ABILITY_CLASS.equals(cs.getChoiceClass())) + ChooseActionContainer container = (ChooseActionContainer) lstw; + if (getTokenName().equals(container.getName())) { - AbilityNature nat = null; - AbilityCategory cat = null; - for (LSTWriteable gw : grantAdded) + if (returnString != null) { - GrantFactory<?> gf = (GrantFactory<?>) gw; - if (gf.usesChoiceSet(cs)) - { - cat = - gf - .getAssociation(AssociationKey.ABILITY_CATEGORY); - nat = gf.getAssociation(AssociationKey.ABILITY_NATURE); - break; - } + context.addWriteMessage("Found two CHOOSE containers for: " + + container.getName()); + continue; } + } + else + { + context.addWriteMessage("Unexpected CHOOSE container found: " + + container.getName()); + continue; + } + List<AssociatedPrereqObject> assocList = mtl.getListFor(lstw); + if (assocList.size() != 1) + { + context + .addWriteMessage("Only one Association to a CHOOSE can be made per object"); + return null; + } + AssociatedPrereqObject assoc = assocList.get(0); + ChoiceSet<?> cs = assoc.getAssociation(AssociationKey.CHOICE); + if (ABILITY_CLASS.equals(cs.getChoiceClass())) + { + AbilityNature nat = + assoc.getAssociation(AssociationKey.ABILITY_NATURE); if (nat == null) { context .addWriteMessage("Unable to find Nature for GrantFactory"); return null; } + AbilityCategory cat = + assoc.getAssociation(AssociationKey.ABILITY_CATEGORY); if (cat == null) { context @@ -215,14 +217,6 @@ // can't handle those here! continue; } - List<AssociatedPrereqObject> assocList = mtl.getListFor(lstw); - if (assocList.size() != 1) - { - context - .addWriteMessage("Only one Association to a CHOOSE can be made per object"); - return null; - } - AssociatedPrereqObject assoc = assocList.get(0); Formula f = assoc.getAssociation(AssociationKey.CHOICE_COUNT); if (f == null) { @@ -230,11 +224,11 @@ + " Count"); return null; } - addStrings.add(f.toString()); + returnString = f.toString(); // assoc.getAssociation(AssociationKey.CHOICE_MAXCOUNT); } } - return addStrings.toArray(new String[addStrings.size()]); + return new String[]{returnString}; } } Modified: branches/cdom/code/src/java/plugin/lsttokens/race/WeaponbonusToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/race/WeaponbonusToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/race/WeaponbonusToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -27,11 +27,12 @@ import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.base.Constants; +import pcgen.cdom.base.LSTWriteable; import pcgen.cdom.base.ReferenceUtilities; import pcgen.core.Race; import pcgen.core.WeaponProf; import pcgen.core.WeaponProfList; -import pcgen.persistence.Changes; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.lst.AbstractToken; import pcgen.persistence.lst.RaceLstToken; @@ -126,20 +127,18 @@ { CDOMReference<WeaponProfList> swl = context.ref.getCDOMReference(WEAPONPROFLIST_CLASS, "*Starting"); - Changes<CDOMReference<WeaponProf>> changes = + AssociatedChanges<CDOMReference<WeaponProf>> changes = context.getListContext().getChangesInList(getTokenName(), race, swl); - if (changes == null || changes.isEmpty()) + if (changes == null) { // Legal if no WEAPONBONUS was present in the race return null; } - Collection<CDOMReference<WeaponProf>> added = changes.getAdded(); + Collection<LSTWriteable> added = changes.getAdded(); if (added.isEmpty()) { - // Zero indicates no add, which is an error - context.addWriteMessage(getTokenName() - + " was expecting non-empty changes to include Added items"); + // Zero indicates no add return null; } return new String[]{ReferenceUtilities.joinLstFormat(added, Modified: branches/cdom/code/src/java/plugin/lsttokens/remove/FeatToken.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/remove/FeatToken.java 2007-08-27 03:40:26 UTC (rev 3886) +++ branches/cdom/code/src/java/plugin/lsttokens/remove/FeatToken.java 2007-08-27 03:41:01 UTC (rev 3887) @@ -18,7 +18,6 @@ package plugin.lsttokens.remove; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.StringTokenizer; @@ -29,18 +28,18 @@ import pcgen.cdom.base.Constants; import pcgen.cdom.base.FormulaFactory; import pcgen.cdom.base.LSTWriteable; +import pcgen.cdom.content.ChooseActionContainer; import pcgen.cdom.enumeration.AbilityCategory; import pcgen.cdom.enumeration.AbilityNature; import pcgen.cdom.enumeration.AssociationKey; -import pcgen.cdom.factory.RemoveFactory; -import pcgen.cdom.graph.PCGraphGrantsEdge; import pcgen.cdom.helper.ChoiceSet; import pcgen.cdom.helper.CompoundOrChoiceSet; import pcgen.cdom.helper.PrimitiveChoiceSet; import pcgen.cdom.helper.ReferenceChoiceSet; +import pcgen.cdom.helper.RemoveActor; import pcgen.core.Ability; import pcgen.core.PObject; -import pcgen.persistence.GraphChanges; +import pcgen.persistence.AssociatedChanges; import pcgen.persistence.LoadContext; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.AbstractToken; @@ -157,8 +156,8 @@ } else if ("CHOICE".equalsIgnoreCase(token)) { - PrimitiveChoiceSet<Ability> chooser = - (PrimitiveChoiceSet<Ability>) ChooseLoader.parseToken( + PrimitiveChoiceSet chooser = + ChooseLoader.parseToken( context, obj, "FEAT", "PC"); if (chooser == null) { @@ -210,102 +209,89 @@ { pcs = new CompoundOrChoiceSet<Ability>(pcsList); } - ChoiceSet<Ability> cs = new ChoiceSet<Ability>("REMOVE", pcs); - PCGraphGrantsEdge edge = - context.getGraphContext().grant(getTokenName(), obj, cs); + + ChooseActionContainer container = new ChooseActionContainer("REMOVE"); + container.addActor(new RemoveActor()); + AssociatedPrereqObject edge = + context.getGraphContext().grant(getTokenName(), obj, container); edge.setAssociation(AssociationKey.CHOICE_COUNT, FormulaFactory .getFormulaFor(count)); edge.setAssociation(AssociationKey.CHOICE_MAXCOUNT, FormulaFactory .getFormulaFor(Integer.MAX_VALUE)); - RemoveFactory<Ability> rf = new RemoveFactory<Ability>(edge); - context.getGraphContext().grant(getTokenName(), obj, rf); - /* - * FUTURE Technically, this Category item should not be in the - * RemoveFactory, as it really belogs as something that can be extracted - * from the ChoiceSet... - */ - rf - .setAssociation(AssociationKey.ABILITY_CATEGORY, - AbilityCategory.FEAT); - rf.setAssociation(AssociationKey.ABILITY_NATURE, AbilityNature.NORMAL); + edge.setAssociation(AssociationKey.ABILITY_CATEGORY, + AbilityCategory.FEAT); + edge + .setAssociation(AssociationKey.ABILITY_NATURE, AbilityNature.NORMAL); + ChoiceSet<Ability> cs = new ChoiceSet<Ability>("REMOVE", pcs); + edge.setAssociation(AssociationKey.CHOICE, cs); return true; } public String[] unparse(LoadContext context, PObject obj) { - GraphChanges<ChoiceSet> choiceChanges = + AssociatedChanges<ChooseActionContainer> grantChanges = context.getGraphContext().getChangesFromToken(getTokenName(), - obj, ChoiceSet.class); - if (choiceChanges == null) + obj, ChooseActionContainer.class); + if (grantChanges == null) { + System.err.println(1); return null; } MapToList<LSTWriteable, AssociatedPrereqObject> mtl = - choiceChanges.getAddedAssociations(); + grantChanges.getAddedAssociations(); if (mtl == null || mtl.isEmpty()) { // Zero indicates no Token return null; } - GraphChanges<RemoveFactory> grantChanges = - context.getGraphContext().getChangesFromToken(getTokenName(), - obj, RemoveFactory.class); - Collection<LSTWriteable> grantAdded = grantChanges.getAdded(); - if (grantAdded == null || grantAdded.isEmpty()) - { - // Zero indicates no Token present - return null; - } - List<String> addStrings = new ArrayList<String>(); + List<String> removeStrings = new ArrayList<String>(); for (LSTWriteable lstw : mtl.getKeySet()) { - ChoiceSet<?> cs = (ChoiceSet<?>) lstw; + ChooseActionContainer container = (ChooseActionContainer) lstw; + if (!"REMOVE".equals(container.getName())) + { + context.addWriteMessage("Unexpected CHOOSE container found: " + + container.getName()); + continue; + } + List<AssociatedPrereqObject> assocList = mtl.getListFor(lstw); + if (assocList.size() != 1) + { + context + .addWriteMessage("Only one Association to a CHOOSE can be made per object"); + return null; + } + AssociatedPrereqObject assoc = assocList.get(0); + ChoiceSet<?> cs = assoc.getAssociation(AssociationKey.CHOICE); if (ABILITY_CLASS.equals(cs.getChoiceClass())) { - AbilityNature nat = null; - AbilityCategory cat = null; - for (LSTWriteable rw : grantAdded) - { - RemoveFactory<?> rf = (RemoveFactory<?>) rw; - if (rf.usesChoiceSet(cs)) - { - cat = - rf - .getAssociation(AssociationKey.ABILITY_CATEGORY); - nat = rf.getAssociation(AssociationKey.ABILITY_NATURE); - break; - } - } + AbilityNature nat = + assoc.getAssociation(AssociationKey.ABILITY_NATURE); if (nat == null) { context - .addWriteMessage("Unable to find Nature for RemoverFactory"); + .addWriteMessage("Unable to find Nature for GrantFactory"); return null; } + AbilityCategory cat = + assoc.getAssociation(AssociationKey.ABILITY_CATEGORY); if (cat == null) { context - .addWriteMessage("Unable to find Category for RemoverFactory"); + .addWriteMessage("Unable to find Category for GrantFactory"); return null; } if (!AbilityCategory.FEAT.equals(cat) || !AbilityNature.NORMAL.equals(nat)) { - // will be done with VFEAT or ABILITY + // can't handle those here! continue; } - List<AssociatedPrereqObject> assocList = mtl.getListFor(lstw); - if (assocList.size() != 1) - { - context - .addWriteMessage("Only one Association to a CHOOSE can be made per object"); - return null; - } - AssociatedPrereqObject assoc = assocList.get(0); Formula f = assoc.getAssociation(AssociationKey.CHOICE_COUNT); if (f == null) { - context.addWriteMessage("Unable to find Choice Count"); + context.addWriteMessage("Unable to find " + getTokenName() + + " Count"); return null; } String fString = f.toString(); @@ -315,11 +301,11 @@ sb.append(fString).append(Constants.PIPE); } sb.append(cs.getLSTformat()); - addStrings.add(sb.toString()); + removeStrings.add(sb.toString()); // assoc.getAssociation(AssociationKey.CHOICE_MAXCOUNT); } } - return addStrings.toArray(new String[addStrings.size()]); + return removeStrings.toArray(new String[removeStrings.size()]); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |