From: <jde...@us...> - 2011-03-17 12:09:46
|
Revision: 14725 http://pcgen.svn.sourceforge.net/pcgen/?rev=14725&view=rev Author: jdempsey Date: 2011-03-17 12:09:39 +0000 (Thu, 17 Mar 2011) Log Message: ----------- Abilities tab * Add method to DatasetFacade to retrieve prerequisites for an ability - required to drive the prereq tree view. Modified Paths: -------------- sandbox/uisync/code/src/java/pcgen/core/DataSet.java sandbox/uisync/code/src/java/pcgen/core/facade/DataSetFacade.java sandbox/uisync/code/src/test/pcgen/core/DataSetTest.java sandbox/uisync/code/src/test/pcgen/gui2/facade/MockDataSetFacade.java Property Changed: ---------------- sandbox/uisync/system/icons/ Modified: sandbox/uisync/code/src/java/pcgen/core/DataSet.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/DataSet.java 2011-03-17 04:09:21 UTC (rev 14724) +++ sandbox/uisync/code/src/java/pcgen/core/DataSet.java 2011-03-17 12:09:39 UTC (rev 14725) @@ -20,9 +20,13 @@ */ package pcgen.core; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; +import pcgen.cdom.base.Category; import pcgen.cdom.base.Constants; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.StringKey; @@ -30,12 +34,12 @@ import pcgen.core.facade.AbilityCategoryFacade; import pcgen.core.facade.AbilityFacade; import pcgen.core.facade.AlignmentFacade; +import pcgen.core.facade.BodyStructureFacade; import pcgen.core.facade.CampaignFacade; import pcgen.core.facade.ClassFacade; import pcgen.core.facade.DataSetFacade; import pcgen.core.facade.DeityFacade; import pcgen.core.facade.EquipmentFacade; -import pcgen.core.facade.BodyStructureFacade; import pcgen.core.facade.GameModeFacade; import pcgen.core.facade.RaceFacade; import pcgen.core.facade.SkillFacade; @@ -44,6 +48,7 @@ import pcgen.core.facade.generator.StatGenerationFacade; import pcgen.core.facade.util.DefaultListFacade; import pcgen.core.facade.util.ListFacade; +import pcgen.core.prereq.Prerequisite; import pcgen.rules.context.LoadContext; import pcgen.util.enumeration.View; @@ -175,6 +180,57 @@ return categories; } + /* (non-Javadoc) + * @see pcgen.core.facade.DataSetFacade#getPrereqAbilities(pcgen.core.facade.AbilityFacade) + */ + public List<AbilityFacade> getPrereqAbilities(AbilityFacade abilityFacade) + { + if (abilityFacade == null || !(abilityFacade instanceof Ability)) + { + return Collections.emptyList(); + } + + Ability ability = (Ability) abilityFacade; + List<AbilityFacade> prereqList = new ArrayList<AbilityFacade>(); + for (Prerequisite prereq : ability.getPrerequisiteList()) + { + prereqList.addAll(getAbilitiesFromPrereq(prereq, ability.getCDOMCategory())); + } + return prereqList; + } + + private List<AbilityFacade> getAbilitiesFromPrereq(Prerequisite prereq, Category<Ability> cat) + { + List<AbilityFacade> prereqList = new ArrayList<AbilityFacade>(); + if (prereq == null) + { + return prereqList; + } + + + if ("FEAT" == prereq.getKind() + || "FEAT".equalsIgnoreCase(prereq.getKind()) + || "ABILITY" == prereq.getKind() + || "ABILITY".equalsIgnoreCase(prereq.getKind())) + { + Ability ability = + Globals.getContext().ref + .getManufacturer(Ability.class, cat).getObject( + prereq.getKey()); + if (ability != null) + { + prereqList.add(ability); + } + } + + for (Prerequisite childPrereq : prereq.getPrerequisites()) + { + prereqList.addAll(getAbilitiesFromPrereq(childPrereq, cat)); + } + + return prereqList; + } + public ListFacade<SkillFacade> getSkills() { return skills; Modified: sandbox/uisync/code/src/java/pcgen/core/facade/DataSetFacade.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/facade/DataSetFacade.java 2011-03-17 04:09:21 UTC (rev 14724) +++ sandbox/uisync/code/src/java/pcgen/core/facade/DataSetFacade.java 2011-03-17 12:09:39 UTC (rev 14725) @@ -20,6 +20,8 @@ */ package pcgen.core.facade; +import java.util.List; + import pcgen.core.facade.generator.StatGenerationFacade; import pcgen.core.facade.util.ListFacade; @@ -34,6 +36,14 @@ public ListFacade<AbilityCategoryFacade> getAbilityCategories(); + /** + * Retrieve the abilities that must be taken before this ability can be taken. + * Used when building up a tree of abilities by prerequisite. + * @param abilityFacade The ability to be queried + * @return The list of prerequisite abilities + */ + public List<AbilityFacade> getPrereqAbilities(AbilityFacade abilityFacade); + public ListFacade<SkillFacade> getSkills(); public ListFacade<RaceFacade> getRaces(); Modified: sandbox/uisync/code/src/test/pcgen/core/DataSetTest.java =================================================================== --- sandbox/uisync/code/src/test/pcgen/core/DataSetTest.java 2011-03-17 04:09:21 UTC (rev 14724) +++ sandbox/uisync/code/src/test/pcgen/core/DataSetTest.java 2011-03-17 12:09:39 UTC (rev 14725) @@ -22,14 +22,20 @@ */ package pcgen.core; +import java.util.List; + import org.junit.Test; import pcgen.PCGenTestCase; import pcgen.cdom.base.Constants; +import pcgen.core.facade.AbilityFacade; +import pcgen.core.facade.BodyStructureFacade; import pcgen.core.facade.CampaignFacade; -import pcgen.core.facade.BodyStructureFacade; import pcgen.core.facade.util.DefaultListFacade; import pcgen.core.facade.util.ListFacade; +import pcgen.core.prereq.Prerequisite; +import pcgen.util.TestHelper; +import plugin.pretokens.parser.PreAbilityParser; /** * The Class <code>DataSetTest</code> check that the Dataset class is functioning @@ -90,6 +96,43 @@ } /** + * Verify the getPrereqAbilities method is functioning correctly. + * @throws Exception + */ + @Test + public void testGetPrereqAbilities() throws Exception + { + Ability acrobatics = TestHelper.makeAbility("Acrobatics", AbilityCategory.FEAT, "general"); + Ability dodge = TestHelper.makeAbility("Dodge", AbilityCategory.FEAT, "general"); + Ability mobility = TestHelper.makeAbility("Mobility", AbilityCategory.FEAT, "general"); + Ability springAttack = TestHelper.makeAbility("Spring Attack", AbilityCategory.FEAT, "general"); + PreAbilityParser parser = new PreAbilityParser(); + Prerequisite prereq = + parser.parse("ability", "1,CATEGORY=FEAT,KEY_Dodge", + false, false); + mobility.addPrerequisite(prereq); + prereq = + parser.parse("ability", "2,CATEGORY=FEAT,KEY_Dodge,KEY_Mobility", + false, false); + springAttack.addPrerequisite(prereq); + + DataSet dataset = + new DataSet(Globals.getContext(), SettingsHandler.getGame(), + new DefaultListFacade<CampaignFacade>()); + List<AbilityFacade> abilities = dataset.getPrereqAbilities(acrobatics); + assertEquals("Acrobatics prereq should be empty", 0, abilities.size()); + abilities = dataset.getPrereqAbilities(dodge); + assertEquals("Dodge prereq should be empty", 0, abilities.size()); + abilities = dataset.getPrereqAbilities(mobility); + assertEquals("Mobility prereq should not be empty", 1, abilities.size()); + assertEquals("Mobility prereq should be dodge", dodge, abilities.get(0)); + abilities = dataset.getPrereqAbilities(springAttack); + assertEquals("Spring Attack prereq should not be empty", 2, abilities.size()); + assertEquals("Spring Attack prereq should be dodge", dodge, abilities.get(0)); + assertEquals("Spring Attack prereq should be dodge", mobility, abilities.get(1)); + } + + /** * @param locations * @param name */ Modified: sandbox/uisync/code/src/test/pcgen/gui2/facade/MockDataSetFacade.java =================================================================== --- sandbox/uisync/code/src/test/pcgen/gui2/facade/MockDataSetFacade.java 2011-03-17 04:09:21 UTC (rev 14724) +++ sandbox/uisync/code/src/test/pcgen/gui2/facade/MockDataSetFacade.java 2011-03-17 12:09:39 UTC (rev 14725) @@ -22,6 +22,8 @@ */ package pcgen.gui2.facade; +import java.util.List; + import pcgen.core.facade.AbilityCategoryFacade; import pcgen.core.facade.AbilityFacade; import pcgen.core.facade.AlignmentFacade; @@ -71,6 +73,12 @@ return null; } + public List<AbilityFacade> getPrereqAbilities(AbilityFacade abilityFacade) + { + // TODO Auto-generated method stub + return null; + } + /* (non-Javadoc) * @see pcgen.core.facade.DataSetFacade#getAbilityCategories() */ Property changes on: sandbox/uisync/system/icons ___________________________________________________________________ Added: svn:ignore + Thumbs.db This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |